├── .gitignore
├── .metadata
├── README.md
├── android
├── app
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── ysn
│ │ │ │ └── com
│ │ │ │ └── food_recipe
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── key.properties
└── settings.gradle
├── assets
└── images
│ ├── img_logo_512.png
│ ├── img_logo_themealdb.png
│ ├── img_not_found.jpg
│ ├── img_placeholder.jpg
│ └── img_yudi_setiawan.jpeg
├── design
├── cover google play.sketch
├── food recipe 1.png
├── food recipe 2.png
├── food recipe 3.png
├── food recipe 4.png
├── food recipe cover 1.png
├── food recipe cover 2.png
├── food recipe cover 3.png
├── food recipe cover 4.png
├── food recipe cover 5.png
└── ic_launcher
│ ├── res
│ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ └── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ ├── web_hi_res_1024.png
│ ├── web_hi_res_120.png
│ ├── web_hi_res_152.png
│ ├── web_hi_res_167.png
│ ├── web_hi_res_180.png
│ ├── web_hi_res_20.png
│ ├── web_hi_res_29.png
│ ├── web_hi_res_40.png
│ ├── web_hi_res_512.png
│ ├── web_hi_res_58.png
│ ├── web_hi_res_60.png
│ ├── web_hi_res_76.png
│ ├── web_hi_res_80.png
│ └── web_hi_res_87.png
├── ios
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── web_hi_res_1024.png
│ │ ├── web_hi_res_120-1.png
│ │ ├── web_hi_res_120.png
│ │ ├── web_hi_res_152.png
│ │ ├── web_hi_res_167.png
│ │ ├── web_hi_res_180.png
│ │ ├── web_hi_res_20.png
│ │ ├── web_hi_res_29-1.png
│ │ ├── web_hi_res_29.png
│ │ ├── web_hi_res_40-1.png
│ │ ├── web_hi_res_40-2.png
│ │ ├── web_hi_res_40.png
│ │ ├── web_hi_res_58-1.png
│ │ ├── web_hi_res_58.png
│ │ ├── web_hi_res_60.png
│ │ ├── web_hi_res_76.png
│ │ ├── web_hi_res_80-1.png
│ │ ├── web_hi_res_80.png
│ │ └── web_hi_res_87.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ ├── Runner-Bridging-Header.h
│ └── ic_launcher.png
├── lib
├── main.dart
├── src
│ ├── app.dart
│ ├── blocs
│ │ ├── detailmeals
│ │ │ └── detail_meals_bloc.dart
│ │ ├── favorite
│ │ │ ├── favorite_bloc.dart
│ │ │ └── favorite_meals_bloc_model.dart
│ │ ├── home
│ │ │ └── home_bloc.dart
│ │ ├── listmeals
│ │ │ └── list_meals_bloc.dart
│ │ └── searchmeals
│ │ │ └── search_meals_bloc.dart
│ ├── database
│ │ ├── dao
│ │ │ └── favorite_meal_dao.dart
│ │ ├── database.dart
│ │ ├── entity
│ │ │ ├── favorite_meal.dart
│ │ │ └── favorite_meal.g.dart
│ │ └── repository
│ │ │ └── favorite_meal_repository.dart
│ ├── models
│ │ ├── area
│ │ │ ├── area_meals.dart
│ │ │ └── area_meals.g.dart
│ │ ├── categories
│ │ │ ├── categories.dart
│ │ │ └── categories.g.dart
│ │ ├── filterarea
│ │ │ ├── filter_area_meals.dart
│ │ │ └── filter_area_meals.g.dart
│ │ ├── filtercategories
│ │ │ ├── filter_categories.dart
│ │ │ └── filter_categories.g.dart
│ │ ├── latest
│ │ │ ├── latest_meals.dart
│ │ │ └── latest_meals.g.dart
│ │ ├── lookupmealsbyid
│ │ │ ├── lookup_meals_by_id.dart
│ │ │ └── lookup_meals_by_id.g.dart
│ │ ├── randommeals
│ │ │ ├── random_meals.dart
│ │ │ └── random_meals.g.dart
│ │ └── searchmeals
│ │ │ ├── search_meals.dart
│ │ │ └── search_meals.g.dart
│ ├── resources
│ │ ├── food_api_provider.dart
│ │ └── food_api_repository.dart
│ ├── ui
│ │ ├── detailmeals
│ │ │ └── detail_meals_screen.dart
│ │ ├── favorite
│ │ │ └── favorite_screen.dart
│ │ ├── home
│ │ │ └── home_screen.dart
│ │ ├── infoapp
│ │ │ └── info_app_screen.dart
│ │ ├── listmeals
│ │ │ └── list_meals_screen.dart
│ │ └── searchmeals
│ │ │ └── search_meals_screen.dart
│ └── utils
│ │ └── utils.dart
└── values
│ └── color_assets.dart
├── pubspec.lock
└── pubspec.yaml
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | .dart_tool/
26 | .flutter-plugins
27 | .packages
28 | .pub-cache/
29 | .pub/
30 | /build/
31 |
32 | # Android related
33 | **/android/**/gradle-wrapper.jar
34 | **/android/.gradle
35 | **/android/captures/
36 | **/android/gradlew
37 | **/android/gradlew.bat
38 | **/android/local.properties
39 | **/android/**/GeneratedPluginRegistrant.java
40 |
41 | # iOS/XCode related
42 | **/ios/**/*.mode1v3
43 | **/ios/**/*.mode2v3
44 | **/ios/**/*.moved-aside
45 | **/ios/**/*.pbxuser
46 | **/ios/**/*.perspectivev3
47 | **/ios/**/*sync/
48 | **/ios/**/.sconsign.dblite
49 | **/ios/**/.tags*
50 | **/ios/**/.vagrant/
51 | **/ios/**/DerivedData/
52 | **/ios/**/Icon?
53 | **/ios/**/Pods/
54 | **/ios/**/.symlinks/
55 | **/ios/**/profile
56 | **/ios/**/xcuserdata
57 | **/ios/.generated/
58 | **/ios/Flutter/App.framework
59 | **/ios/Flutter/Flutter.framework
60 | **/ios/Flutter/Generated.xcconfig
61 | **/ios/Flutter/app.flx
62 | **/ios/Flutter/app.zip
63 | **/ios/Flutter/flutter_assets/
64 | **/ios/ServiceDefinitions.json
65 | **/ios/Runner/GeneratedPluginRegistrant.*
66 |
67 | # Exceptions to above rules.
68 | !**/ios/**/default.mode1v3
69 | !**/ios/**/default.mode2v3
70 | !**/ios/**/default.pbxuser
71 | !**/ios/**/default.perspectivev3
72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
73 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 1bd85dd6c207d69c148b92ec8f68244c00dec503
8 | channel: master
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Food Recipe
2 | Application that presents information about food recipes from [TheMealDb](https://www.themealdb.com) API.
3 |
4 |
5 |
6 | [
](https://play.google.com/store/apps/details?id=ysn.com.food_recipe)
7 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | def keystoreProperties = new Properties()
29 | def keystorePropertiesFile = rootProject.file('key.properties')
30 | if (keystorePropertiesFile.exists()) {
31 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
32 | }
33 |
34 | android {
35 | compileSdkVersion 28
36 |
37 | sourceSets {
38 | main.java.srcDirs += 'src/main/kotlin'
39 | }
40 |
41 | lintOptions {
42 | disable 'InvalidPackage'
43 | }
44 |
45 | defaultConfig {
46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
47 | applicationId "ysn.com.food_recipe"
48 | minSdkVersion 16
49 | targetSdkVersion 28
50 | versionCode flutterVersionCode.toInteger()
51 | versionName flutterVersionName
52 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
53 | }
54 |
55 | signingConfigs {
56 | release {
57 | keyAlias keystoreProperties['keyAlias']
58 | keyPassword keystoreProperties['keyPassword']
59 | storeFile file(keystoreProperties['storeFile'])
60 | storePassword keystoreProperties['storePassword']
61 | }
62 | }
63 |
64 | buildTypes {
65 | release {
66 | // TODO: Add your own signing config for the release build.
67 | // Signing with the debug keys for now, so `flutter run --release` works.
68 | // signingConfig signingConfigs.debug
69 | signingConfig signingConfigs.release
70 |
71 | /*minifyEnabled true
72 | useProguard true
73 |
74 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'*/
75 | }
76 | }
77 | }
78 |
79 | flutter {
80 | source '../..'
81 | }
82 |
83 | dependencies {
84 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
85 | testImplementation 'junit:junit:4.12'
86 | androidTestImplementation 'androidx.test:runner:1.1.0'
87 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
88 | }
89 |
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | ## Flutter wrapper
2 | -keep class io.flutter.app.** { *; }
3 | -keep class io.flutter.plugin.** { *; }
4 | -keep class io.flutter.util.** { *; }
5 | -keep class io.flutter.view.** { *; }
6 | -keep class io.flutter.** { *; }
7 | -keep class io.flutter.plugins.** { *; }
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
11 |
15 |
22 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/ysn/com/food_recipe/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package ysn.com.food_recipe
2 |
3 | import android.os.Bundle
4 |
5 | import io.flutter.app.FlutterActivity
6 | import io.flutter.plugins.GeneratedPluginRegistrant
7 |
8 | class MainActivity: FlutterActivity() {
9 | override fun onCreate(savedInstanceState: Bundle?) {
10 | super.onCreate(savedInstanceState)
11 | GeneratedPluginRegistrant.registerWith(this)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.31'
3 | repositories {
4 | google()
5 | jcenter()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.2.1'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | jcenter()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | android.enableJetifier=true
2 | android.useAndroidX=true
3 | org.gradle.jvmargs=-Xmx1536M
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 14 08:21:19 WIB 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
7 |
--------------------------------------------------------------------------------
/android/key.properties:
--------------------------------------------------------------------------------
1 | storePassword=nasigoreng
2 | keyPassword=nasigoreng
3 | keyAlias=ysn studio
4 | storeFile=/Users/yudisetiawan/AndroidStudioProjects/keystore_ysn.jks
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/assets/images/img_logo_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/assets/images/img_logo_512.png
--------------------------------------------------------------------------------
/assets/images/img_logo_themealdb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/assets/images/img_logo_themealdb.png
--------------------------------------------------------------------------------
/assets/images/img_not_found.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/assets/images/img_not_found.jpg
--------------------------------------------------------------------------------
/assets/images/img_placeholder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/assets/images/img_placeholder.jpg
--------------------------------------------------------------------------------
/assets/images/img_yudi_setiawan.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/assets/images/img_yudi_setiawan.jpeg
--------------------------------------------------------------------------------
/design/cover google play.sketch:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/cover google play.sketch
--------------------------------------------------------------------------------
/design/food recipe 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe 1.png
--------------------------------------------------------------------------------
/design/food recipe 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe 2.png
--------------------------------------------------------------------------------
/design/food recipe 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe 3.png
--------------------------------------------------------------------------------
/design/food recipe 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe 4.png
--------------------------------------------------------------------------------
/design/food recipe cover 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe cover 1.png
--------------------------------------------------------------------------------
/design/food recipe cover 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe cover 2.png
--------------------------------------------------------------------------------
/design/food recipe cover 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe cover 3.png
--------------------------------------------------------------------------------
/design/food recipe cover 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe cover 4.png
--------------------------------------------------------------------------------
/design/food recipe cover 5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/food recipe cover 5.png
--------------------------------------------------------------------------------
/design/ic_launcher/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/design/ic_launcher/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/design/ic_launcher/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/design/ic_launcher/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/design/ic_launcher/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_1024.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_120.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_152.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_167.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_180.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_20.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_29.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_40.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_512.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_58.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_60.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_76.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_80.png
--------------------------------------------------------------------------------
/design/ic_launcher/web_hi_res_87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/design/ic_launcher/web_hi_res_87.png
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 8.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def parse_KV_file(file, separator='=')
14 | file_abs_path = File.expand_path(file)
15 | if !File.exists? file_abs_path
16 | return [];
17 | end
18 | pods_ary = []
19 | skip_line_start_symbols = ["#", "/"]
20 | File.foreach(file_abs_path) { |line|
21 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
22 | plugin = line.split(pattern=separator)
23 | if plugin.length == 2
24 | podname = plugin[0].strip()
25 | path = plugin[1].strip()
26 | podpath = File.expand_path("#{path}", file_abs_path)
27 | pods_ary.push({:name => podname, :path => podpath});
28 | else
29 | puts "Invalid plugin specification: #{line}"
30 | end
31 | }
32 | return pods_ary
33 | end
34 |
35 | target 'Runner' do
36 | use_frameworks!
37 |
38 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
39 | # referring to absolute paths on developers' machines.
40 | system('rm -rf .symlinks')
41 | system('mkdir -p .symlinks/plugins')
42 |
43 | # Flutter Pods
44 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')
45 | if generated_xcode_build_settings.empty?
46 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first."
47 | end
48 | generated_xcode_build_settings.map { |p|
49 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
50 | symlink = File.join('.symlinks', 'flutter')
51 | File.symlink(File.dirname(p[:path]), symlink)
52 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))
53 | end
54 | }
55 |
56 | # Plugin Pods
57 | plugin_pods = parse_KV_file('../.flutter-plugins')
58 | plugin_pods.map { |p|
59 | symlink = File.join('.symlinks', 'plugins', p[:name])
60 | File.symlink(p[:path], symlink)
61 | pod p[:name], :path => File.join(symlink, 'ios')
62 | }
63 | end
64 |
65 | post_install do |installer|
66 | installer.pods_project.targets.each do |target|
67 | target.build_configurations.each do |config|
68 | config.build_settings['ENABLE_BITCODE'] = 'NO'
69 | end
70 | end
71 | end
72 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Flutter (1.0.0)
3 | - FMDB (2.7.5):
4 | - FMDB/standard (= 2.7.5)
5 | - FMDB/standard (2.7.5)
6 | - get_version (0.0.1):
7 | - Flutter
8 | - package_info (0.0.1):
9 | - Flutter
10 | - path_provider (0.0.1):
11 | - Flutter
12 | - sqflite (0.0.1):
13 | - Flutter
14 | - FMDB (~> 2.7.2)
15 | - url_launcher (0.0.1):
16 | - Flutter
17 |
18 | DEPENDENCIES:
19 | - Flutter (from `.symlinks/flutter/ios`)
20 | - get_version (from `.symlinks/plugins/get_version/ios`)
21 | - package_info (from `.symlinks/plugins/package_info/ios`)
22 | - path_provider (from `.symlinks/plugins/path_provider/ios`)
23 | - sqflite (from `.symlinks/plugins/sqflite/ios`)
24 | - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
25 |
26 | SPEC REPOS:
27 | https://github.com/cocoapods/specs.git:
28 | - FMDB
29 |
30 | EXTERNAL SOURCES:
31 | Flutter:
32 | :path: ".symlinks/flutter/ios"
33 | get_version:
34 | :path: ".symlinks/plugins/get_version/ios"
35 | package_info:
36 | :path: ".symlinks/plugins/package_info/ios"
37 | path_provider:
38 | :path: ".symlinks/plugins/path_provider/ios"
39 | sqflite:
40 | :path: ".symlinks/plugins/sqflite/ios"
41 | url_launcher:
42 | :path: ".symlinks/plugins/url_launcher/ios"
43 |
44 | SPEC CHECKSUMS:
45 | Flutter: 9d0fac939486c9aba2809b7982dfdbb47a7b0296
46 | FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
47 | get_version: a59b7bd8fbf7543739bd853218b6685899419d05
48 | package_info: d7c98b64f60add4c2908b9d94d82a45d3c8827ad
49 | path_provider: 09407919825bfe3c2deae39453b7a5b44f467873
50 | sqflite: d1612813fa7db7c667bed9f1d1b508deffc56999
51 | url_launcher: 92b89c1029a0373879933c21642958c874539095
52 |
53 | PODFILE CHECKSUM: b7d0755641915265774624f3b3be49c5c073d379
54 |
55 | COCOAPODS: 1.5.3
56 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
56 |
58 |
64 |
65 |
66 |
67 |
68 |
69 |
75 |
77 |
83 |
84 |
85 |
86 |
88 |
89 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildSystemType
6 | Original
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "web_hi_res_40.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "web_hi_res_60.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "web_hi_res_29.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "web_hi_res_58.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "web_hi_res_87.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "web_hi_res_80.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "web_hi_res_120-1.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "web_hi_res_120.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "web_hi_res_180.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "web_hi_res_20.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "web_hi_res_40-1.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "web_hi_res_29-1.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "web_hi_res_58-1.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "web_hi_res_40-2.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "web_hi_res_80-1.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "web_hi_res_76.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "web_hi_res_152.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "web_hi_res_167.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "web_hi_res_1024.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_1024.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_120-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_120-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_120.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_152.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_167.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_180.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_20.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_29-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_29-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_29.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_40-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_40-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_40-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_40-2.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_40.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_58-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_58-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_58.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_60.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_76.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_80-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_80-1.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_80.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/AppIcon.appiconset/web_hi_res_87.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | Food Recipe
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UISupportedInterfaceOrientations
30 |
31 | UIInterfaceOrientationPortrait
32 | UIInterfaceOrientationLandscapeLeft
33 | UIInterfaceOrientationLandscapeRight
34 |
35 | UISupportedInterfaceOrientations~ipad
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationPortraitUpsideDown
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UIViewControllerBasedStatusBarAppearance
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
--------------------------------------------------------------------------------
/ios/Runner/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CoderJava/Food-Recipe/bf5c89e4e0df3f12c51f26f36477dbdb94fa77d4/ios/Runner/ic_launcher.png
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'src/app.dart';
4 |
5 | void main() => runApp(App());
6 |
--------------------------------------------------------------------------------
/lib/src/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:food_recipe/values/color_assets.dart';
3 |
4 | import 'ui/favorite/favorite_screen.dart';
5 | import 'ui/home/home_screen.dart';
6 | import 'ui/infoapp/info_app_screen.dart';
7 | import 'ui/listmeals/list_meals_screen.dart';
8 | import 'ui/searchmeals/search_meals_screen.dart';
9 | import 'utils/utils.dart';
10 |
11 | class App extends StatefulWidget {
12 | @override
13 | _AppState createState() => _AppState();
14 | }
15 |
16 | class _AppState extends State {
17 | int _indexTabSelected = 0;
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | return MaterialApp(
22 | debugShowCheckedModeBanner: false,
23 | routes: {
24 | navigatorListMeals: (context) {
25 | return ListMealsScreen();
26 | },
27 | navigatorSearchMeals: (context) {
28 | return SearchMealsScreen();
29 | },
30 | navigatorInfoApp: (context) {
31 | return InfoAppScreen();
32 | },
33 | },
34 | theme: ThemeData(
35 | primaryColor: ColorAssets.primarySwatchColor,
36 | accentColor: ColorAssets.accentColor,
37 | ),
38 | home: Scaffold(
39 | body: _buildBodyWidget(),
40 | bottomNavigationBar: BottomNavigationBar(
41 | currentIndex: _indexTabSelected,
42 | items: [
43 | BottomNavigationBarItem(
44 | title: Text("Home"),
45 | icon: Icon(Icons.home),
46 | ),
47 | BottomNavigationBarItem(
48 | title: Text("Favorite"),
49 | icon: Icon(Icons.star),
50 | ),
51 | ],
52 | onTap: (indexTab) {
53 | setState(() => _indexTabSelected = indexTab);
54 | },
55 | ),
56 | ),
57 | );
58 | }
59 |
60 | Widget _buildBodyWidget() {
61 | if (_indexTabSelected == 0) {
62 | return HomeScreen();
63 | } else {
64 | return FavoriteScreen();
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/lib/src/blocs/detailmeals/detail_meals_bloc.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/models/lookupmealsbyid/lookup_meals_by_id.dart';
2 | import 'package:food_recipe/src/resources/food_api_repository.dart';
3 |
4 | class DetailsMealsBloc {
5 | final _foodApiRepository = FoodApiRepository();
6 |
7 | dispose() {
8 | // TODO: do something in here
9 | }
10 |
11 | Future getDetailsMealsById(String idMeal) async {
12 | return await _foodApiRepository.getLookupMealsById(idMeal);
13 | }
14 |
15 | }
16 |
17 | final detailsMealsBloc = DetailsMealsBloc();
--------------------------------------------------------------------------------
/lib/src/blocs/favorite/favorite_bloc.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/database/entity/favorite_meal.dart';
2 | import 'package:food_recipe/src/database/repository/favorite_meal_repository.dart';
3 | import 'package:rxdart/rxdart.dart';
4 |
5 | import 'favorite_meals_bloc_model.dart';
6 |
7 | class FavoriteBloc {
8 | final _favoriteMealRepository = FavoriteMealRepository();
9 | var _publishSubjectListFavoriteMeal =
10 | PublishSubject();
11 |
12 | dispose() {
13 | _publishSubjectListFavoriteMeal.close();
14 | }
15 |
16 | Observable get listFavoriteMeal =>
17 | _publishSubjectListFavoriteMeal.stream;
18 |
19 | getAllFavoriteMeals() async {
20 | _publishSubjectListFavoriteMeal.sink
21 | .add(FavoriteMealsBlocModel(isLoading: true));
22 | List listFavoriteMeals =
23 | await _favoriteMealRepository.getAllFavoriteMeals();
24 | FavoriteMealsBlocModel favoriteMealsBlocModel =
25 | FavoriteMealsBlocModel(listFavoriteMeals: listFavoriteMeals);
26 | _publishSubjectListFavoriteMeal.sink.add(favoriteMealsBlocModel);
27 | }
28 |
29 | removeFavoriteMealById(String id) async {
30 | _publishSubjectListFavoriteMeal.sink.add(FavoriteMealsBlocModel(isLoading: true));
31 | await _favoriteMealRepository.deleteFavoriteMealById(id);
32 | List listFavoriteMeals =
33 | await _favoriteMealRepository.getAllFavoriteMeals();
34 | FavoriteMealsBlocModel favoriteMealsBlocModel =
35 | FavoriteMealsBlocModel(listFavoriteMeals: listFavoriteMeals);
36 | _publishSubjectListFavoriteMeal.sink.add(favoriteMealsBlocModel);
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/lib/src/blocs/favorite/favorite_meals_bloc_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/database/entity/favorite_meal.dart';
2 |
3 | class FavoriteMealsBlocModel {
4 | List listFavoriteMeals;
5 | bool isLoading;
6 |
7 | FavoriteMealsBlocModel({this.listFavoriteMeals, this.isLoading = false,});
8 |
9 | @override
10 | String toString() {
11 | return 'FavoriteMealsBlocModel{listFavoriteMeals: $listFavoriteMeals, isLoading: $isLoading}';
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/lib/src/blocs/home/home_bloc.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/models/categories/categories.dart';
2 | import 'package:food_recipe/src/models/latest/latest_meals.dart';
3 | import 'package:food_recipe/src/resources/food_api_repository.dart';
4 |
5 | class HomeBloc {
6 | final _repository = FoodApiRepository();
7 |
8 | dispose() {
9 | // TODO: do something in here
10 | }
11 |
12 | Future getLatestMeals() async {
13 | return await _repository.getLatestMeals();
14 | }
15 |
16 | Future getCategories() async {
17 | return await _repository.getCategories();
18 | }
19 |
20 | }
21 |
22 | final homeBloc = HomeBloc();
--------------------------------------------------------------------------------
/lib/src/blocs/listmeals/list_meals_bloc.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/database/entity/favorite_meal.dart';
2 | import 'package:food_recipe/src/database/repository/favorite_meal_repository.dart';
3 | import 'package:food_recipe/src/models/filtercategories/filter_categories.dart';
4 | import 'package:food_recipe/src/models/lookupmealsbyid/lookup_meals_by_id.dart';
5 | import 'package:food_recipe/src/resources/food_api_repository.dart';
6 |
7 | class ListMealsBloc {
8 | final _foodApiRepository = FoodApiRepository();
9 | final _favoriteMealRepository = FavoriteMealRepository();
10 |
11 | dispose() {
12 | // TODO: do something in here
13 | }
14 |
15 | Future getFilterCategories(String category) async {
16 | FilterCategories filterCategories =
17 | await _foodApiRepository.getFilterByCategories(category);
18 | List listFavoriteMeals =
19 | await _favoriteMealRepository.getAllFavoriteMeals();
20 | List listFilterCategoryItems =
21 | filterCategories.filterCategoryItems.where((item) {
22 | bool isFavorite = false;
23 | for (FavoriteMeal favoriteMeal in listFavoriteMeals) {
24 | if (item.idMeal == favoriteMeal.idMeal) {
25 | isFavorite = true;
26 | break;
27 | }
28 | }
29 | item.isFavorite = isFavorite;
30 | return true;
31 | }).toList();
32 | filterCategories.filterCategoryItems = listFilterCategoryItems;
33 | return filterCategories;
34 | }
35 |
36 | Future getDetailMealById(String id) async {
37 | LookupMealsById lookupMealsById = await _foodApiRepository.getLookupMealsById(id);
38 | return lookupMealsById;
39 | }
40 |
41 | Future addFavoriteMeal(FavoriteMeal favoriteMeal) async {
42 | return await _favoriteMealRepository.insertFavoriteMeal(favoriteMeal);
43 | }
44 |
45 | Future deleteFavoriteMealById(String id) async {
46 | return await _favoriteMealRepository.deleteFavoriteMealById(id);
47 | }
48 | }
49 |
50 | final listMealsBloc = ListMealsBloc();
51 |
--------------------------------------------------------------------------------
/lib/src/blocs/searchmeals/search_meals_bloc.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/database/entity/favorite_meal.dart';
2 | import 'package:food_recipe/src/database/repository/favorite_meal_repository.dart';
3 | import 'package:food_recipe/src/models/lookupmealsbyid/lookup_meals_by_id.dart';
4 | import 'package:food_recipe/src/models/searchmeals/search_meals.dart';
5 | import 'package:food_recipe/src/resources/food_api_repository.dart';
6 | import 'package:rxdart/rxdart.dart';
7 |
8 | class SearchMealsBloc {
9 | final _publishSubjectSearchMealsByKeyword = PublishSubject();
10 | final _foodApiRepository = FoodApiRepository();
11 | final _favoriteMealRepository = FavoriteMealRepository();
12 |
13 | dispose() {
14 | _publishSubjectSearchMealsByKeyword.close();
15 | }
16 |
17 | Observable get resultSearchMealsByKeyword =>
18 | _publishSubjectSearchMealsByKeyword.stream;
19 |
20 | searchMealsByKeyword(String keyword) async {
21 | _publishSubjectSearchMealsByKeyword.sink.add(SearchMeals(isLoading: true));
22 | if (keyword.trim().isEmpty) {
23 | _publishSubjectSearchMealsByKeyword.sink
24 | .add(SearchMeals(searchMealsItems: []));
25 | } else {
26 | SearchMeals searchMeals =
27 | await _foodApiRepository.getSearchMealsByKeyword(keyword);
28 | List listFavoriteMeals =
29 | await _favoriteMealRepository.getAllFavoriteMeals();
30 | if (searchMeals.searchMealsItems == null) {
31 | _publishSubjectSearchMealsByKeyword.sink.add(SearchMeals(searchMealsItems: []));
32 | return;
33 | }
34 | List listSearchMealsItem =
35 | searchMeals.searchMealsItems.where((searchMealsItem) {
36 | for (FavoriteMeal favoriteMeal in listFavoriteMeals) {
37 | if (favoriteMeal.idMeal == searchMealsItem.idMeal) {
38 | searchMealsItem.isFavorite = true;
39 | break;
40 | }
41 | }
42 | return true;
43 | }).toList();
44 | searchMeals.searchMealsItems = listSearchMealsItem;
45 | _publishSubjectSearchMealsByKeyword.sink.add(searchMeals);
46 | }
47 | }
48 |
49 | Future getDetailMealById(String id) async {
50 | LookupMealsById lookupMealsById =
51 | await _foodApiRepository.getLookupMealsById(id);
52 | return lookupMealsById;
53 | }
54 |
55 | Future addFavoriteMeal(FavoriteMeal favoriteMeal) async {
56 | return await _favoriteMealRepository.insertFavoriteMeal(favoriteMeal);
57 | }
58 |
59 | Future deleteFavoriteMealById(String id) async {
60 | return await _favoriteMealRepository.deleteFavoriteMealById(id);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/lib/src/database/dao/favorite_meal_dao.dart:
--------------------------------------------------------------------------------
1 | import 'package:food_recipe/src/database/entity/favorite_meal.dart';
2 |
3 | import '../database.dart';
4 |
5 | class FavoriteMealDao {
6 | final dbProvider = DatabaseProvider.dbProvider;
7 |
8 | Future createFavoriteMeal(FavoriteMeal favoriteMeal) async {
9 | final db = await dbProvider.database;
10 | var result = db.insert(favoriteTable, favoriteMeal.toJson());
11 | return result;
12 | }
13 |
14 | Future> getAllFavoriteMeals() async {
15 | final db = await dbProvider.database;
16 | List