├── .gitattributes ├── .gitignore ├── .metadata ├── README.md ├── android ├── .project ├── .settings │ └── org.eclipse.buildship.core.prefs ├── app │ ├── .classpath │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── build.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── flutterwidgets │ │ │ └── MainActivity.java │ │ └── 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 ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── fonts └── CartIcons.ttf ├── images ├── Simulator Screen Shot - iPhone XR - 2019-02-16 at 19.40.34.png ├── animated_bottom_bar.gif ├── ezgif.com-crop.gif ├── fancy_bar_v2.gif ├── menu_icon.png └── tabLyout.gif ├── ios ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── main.m ├── lib ├── animation │ └── animated_bottom_bar.dart ├── form_kit │ ├── flutter_form.dart │ └── toast.dart ├── grocerry_kit │ ├── auth.dart │ ├── home_page.dart │ ├── model │ │ ├── grocery_model.dart │ │ └── product_model.dart │ ├── phone_verify.dart │ ├── sub_pages │ │ ├── cart.dart │ │ └── home_list.dart │ └── welcome.dart ├── main.dart ├── note_app │ ├── controller │ │ └── notes_controller.dart │ ├── dto │ │ └── notes_dto.dart │ ├── edit_note.dart │ ├── note_home.dart │ ├── service │ │ └── notes_service.dart │ └── utility.dart ├── pages │ ├── buttons.dart │ ├── floatin_tuto.dart │ ├── floating_button.dart │ ├── snackbar.dart │ └── tabs.dart ├── utils │ └── cart_icons_icons.dart └── wallpaper_kit │ ├── models │ ├── colllection_list_model.dart │ └── images_list_model.dart │ ├── pages │ └── home_page.dart │ ├── services │ └── image_service.dart │ └── sub_pages │ └── wallpapers.dart ├── pubspec.yaml ├── screenshots ├── Screenshot 2019-04-28 at 12.01.16 AM.png ├── Screenshot 2019-04-28 at 12.01.23 AM.png ├── Screenshot 2019-04-28 at 12.01.36 AM.png ├── Screenshot 2019-04-28 at 12.01.54 AM.png ├── attachment.jpg └── preview.jpg └── test └── widget_test.dart /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.lock 4 | *.log 5 | *.pyc 6 | *.swp 7 | .DS_Store 8 | .atom/ 9 | .buildlog/ 10 | .history 11 | .svn/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # Visual Studio Code related 20 | .vscode/ 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | .dart_tool/ 25 | .flutter-plugins 26 | .packages 27 | .pub-cache/ 28 | .pub/ 29 | build/ 30 | 31 | # Android related 32 | **/android/**/gradle-wrapper.jar 33 | **/android/.gradle 34 | **/android/captures/ 35 | **/android/gradlew 36 | **/android/gradlew.bat 37 | **/android/local.properties 38 | **/android/**/GeneratedPluginRegistrant.java 39 | 40 | # iOS/XCode related 41 | **/ios/**/*.mode1v3 42 | **/ios/**/*.mode2v3 43 | **/ios/**/*.moved-aside 44 | **/ios/**/*.pbxuser 45 | **/ios/**/*.perspectivev3 46 | **/ios/**/*sync/ 47 | **/ios/**/.sconsign.dblite 48 | **/ios/**/.tags* 49 | **/ios/**/.vagrant/ 50 | **/ios/**/DerivedData/ 51 | **/ios/**/Icon? 52 | **/ios/**/Pods/ 53 | **/ios/**/.symlinks/ 54 | **/ios/**/profile 55 | **/ios/**/xcuserdata 56 | **/ios/.generated/ 57 | **/ios/Flutter/App.framework 58 | **/ios/Flutter/Flutter.framework 59 | **/ios/Flutter/Generated.xcconfig 60 | **/ios/Flutter/app.flx 61 | **/ios/Flutter/app.zip 62 | **/ios/Flutter/flutter_assets/ 63 | **/ios/ServiceDefinitions.json 64 | **/ios/Runner/GeneratedPluginRegistrant.* 65 | 66 | # Exceptions to above rules. 67 | !**/ios/**/default.mode1v3 68 | !**/ios/**/default.mode2v3 69 | !**/ios/**/default.pbxuser 70 | !**/ios/**/default.perspectivev3 71 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 72 | -------------------------------------------------------------------------------- /.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: 5391447fae6209bb21a89e6a5a6583cac1af9b4b 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Flutter UI Kits 2 | 3 | This project contains various inspired UI kits purely coded in Flutter framework. 4 | 5 | ### Animated BottomBar ([Fancy Bar v1.2.0](https://pub.dev/packages/fancy_bar#-readme-tab- "Fancy Bar v1.2.0")) 6 | 7 | Available as a seprate Package @pub 8 | Clone the project [here.](https://github.com/leoelstin/fancy_bar "here.") 9 | 10 | ### V1 11 | ![alt text](https://raw.githubusercontent.com/leoelstin/Flutter-UI-Kits/master/images/ezgif.com-crop.gif) 12 | 13 | ### V2 14 | ![alt text](https://github.com/leoelstin/Flutter-UI-Kits/blob/master/images/fancy_bar_v2.gif?raw=true) 15 | 16 | An animated bottom bar with AnimatedSwitcher. 17 | 18 | Sample Code :: 19 | 20 | InkWell( 21 | onTap: () => setItem(3), 22 | child: Container( 23 | width: 100, 24 | height: 55, 25 | alignment: Alignment.center, 26 | child: AnimatedSwitcher( 27 | transitionBuilder: 28 | (Widget child, Animation animation) { 29 | return ScaleTransition( 30 | scale: animation, 31 | child: child, 32 | ); 33 | }, 34 | duration: Duration(milliseconds: 250), 35 | child: pos == 3 36 | ? Text('Profile', 37 | style: TextStyle( 38 | color: Colors.blue, 39 | fontWeight: FontWeight.bold, 40 | fontSize: 18)) 41 | : Icon(Icons.account_circle), 42 | )), 43 | ), 44 | 45 | 46 | ### Wallpaper UI Kit 47 | 48 | ![alt text](https://raw.githubusercontent.com/leoelstin/Flutter-UI-Kits/master/screenshots/attachment.jpg?raw=true) 49 | 50 | 51 | ## Grocery UI Kit 52 | ![alt text](https://github.com/leoelstin/flutter_widgets/blob/master/screenshots/preview.jpg?raw=true) 53 | 54 | Designed by **[Ishan Madushka](https://www.uplabs.com/ishan_madushka)** 55 | 56 | # Feel free to star and fork the project 57 | 58 | I'll continue to work on this project as im learning the flutter framework. 59 | This app is based on a learning course from Udemy with my own customization to make the app look good. 60 | 61 | ## Features 62 | 63 | ### Grocery UI Kit 64 | 65 | ![alt text](https://github.com/leoelstin/flutter_widgets/blob/master/screenshots/Screenshot%202019-04-28%20at%2012.01.16%20AM.png?raw=true) ![alt text](https://github.com/leoelstin/flutter_widgets/blob/master/screenshots/Screenshot%202019-04-28%20at%2012.01.23%20AM.png?raw=true) ![alt text](https://github.com/leoelstin/flutter_widgets/blob/master/screenshots/Screenshot%202019-04-28%20at%2012.01.36%20AM.png?raw=true) 66 | 67 | UI Kit is not completed more # Stars will motivate me work more 68 | 69 | Donations 70 | --------- 71 | 72 | This project needs you! If you would like to support this project's further development, the creator of this project or the continuous maintenance of this project, feel free to donate. Your donation is highly appreciated (and I love food, coffee and beer). Thank you! 73 | 74 | **PayPal** 75 | 76 | * **[Donate $5](https://www.paypal.me/leoelstin/5)**: Thank's for creating this project, here's a coffee (or some beer) for you! 77 | * **[Donate $10](https://www.paypal.me/leoelstin/10)**: Wow, I am stunned. Let me take you to the movies! 78 | * **[Donate $15](https://www.paypal.me/leoelstin/15)**: I really appreciate your work, let's grab some lunch! 79 | * **[Donate $25](https://www.paypal.me/leoelstin/25)**: That's some awesome stuff you did right there, dinner is on me! 80 | Of course, you can also choose what you want to donate, all donations are awesome! 81 | 82 | -------------------------------------------------------------------------------- /android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 27 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.example.flutterwidgets" 37 | minSdkVersion 16 38 | targetSdkVersion 27 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | 15 | 19 | 26 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/example/flutterwidgets/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.flutterwidgets; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 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/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.1' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | rootProject.buildDir = '../build' 20 | subprojects { 21 | project.buildDir = "${rootProject.buildDir}/${project.name}" 22 | } 23 | subprojects { 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 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-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /fonts/CartIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/fonts/CartIcons.ttf -------------------------------------------------------------------------------- /images/Simulator Screen Shot - iPhone XR - 2019-02-16 at 19.40.34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/images/Simulator Screen Shot - iPhone XR - 2019-02-16 at 19.40.34.png -------------------------------------------------------------------------------- /images/animated_bottom_bar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/images/animated_bottom_bar.gif -------------------------------------------------------------------------------- /images/ezgif.com-crop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/images/ezgif.com-crop.gif -------------------------------------------------------------------------------- /images/fancy_bar_v2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/images/fancy_bar_v2.gif -------------------------------------------------------------------------------- /images/menu_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/images/menu_icon.png -------------------------------------------------------------------------------- /images/tabLyout.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/images/tabLyout.gif -------------------------------------------------------------------------------- /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 "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 15 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 16 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 17 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 18 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 19 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 20 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 21 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXCopyFilesBuildPhase section */ 25 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 26 | isa = PBXCopyFilesBuildPhase; 27 | buildActionMask = 2147483647; 28 | dstPath = ""; 29 | dstSubfolderSpec = 10; 30 | files = ( 31 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 32 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 33 | ); 34 | name = "Embed Frameworks"; 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXCopyFilesBuildPhase section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 41 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 42 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 43 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 44 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 45 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 46 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 47 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 48 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 49 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 50 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 52 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 55 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 64 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 9740EEB11CF90186004384FC /* Flutter */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 3B80C3931E831B6300D905FE /* App.framework */, 75 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 76 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 77 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 78 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 79 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 80 | ); 81 | name = Flutter; 82 | sourceTree = ""; 83 | }; 84 | 97C146E51CF9000F007C117D = { 85 | isa = PBXGroup; 86 | children = ( 87 | 9740EEB11CF90186004384FC /* Flutter */, 88 | 97C146F01CF9000F007C117D /* Runner */, 89 | 97C146EF1CF9000F007C117D /* Products */, 90 | CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, 91 | ); 92 | sourceTree = ""; 93 | }; 94 | 97C146EF1CF9000F007C117D /* Products */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 97C146EE1CF9000F007C117D /* Runner.app */, 98 | ); 99 | name = Products; 100 | sourceTree = ""; 101 | }; 102 | 97C146F01CF9000F007C117D /* Runner */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 106 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 107 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 108 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 109 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 110 | 97C147021CF9000F007C117D /* Info.plist */, 111 | 97C146F11CF9000F007C117D /* Supporting Files */, 112 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 113 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 114 | ); 115 | path = Runner; 116 | sourceTree = ""; 117 | }; 118 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 97C146F21CF9000F007C117D /* main.m */, 122 | ); 123 | name = "Supporting Files"; 124 | sourceTree = ""; 125 | }; 126 | /* End PBXGroup section */ 127 | 128 | /* Begin PBXNativeTarget section */ 129 | 97C146ED1CF9000F007C117D /* Runner */ = { 130 | isa = PBXNativeTarget; 131 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 132 | buildPhases = ( 133 | 9740EEB61CF901F6004384FC /* Run Script */, 134 | 97C146EA1CF9000F007C117D /* Sources */, 135 | 97C146EB1CF9000F007C117D /* Frameworks */, 136 | 97C146EC1CF9000F007C117D /* Resources */, 137 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 138 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 139 | ); 140 | buildRules = ( 141 | ); 142 | dependencies = ( 143 | ); 144 | name = Runner; 145 | productName = Runner; 146 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 147 | productType = "com.apple.product-type.application"; 148 | }; 149 | /* End PBXNativeTarget section */ 150 | 151 | /* Begin PBXProject section */ 152 | 97C146E61CF9000F007C117D /* Project object */ = { 153 | isa = PBXProject; 154 | attributes = { 155 | LastUpgradeCheck = 0910; 156 | ORGANIZATIONNAME = "The Chromium Authors"; 157 | TargetAttributes = { 158 | 97C146ED1CF9000F007C117D = { 159 | CreatedOnToolsVersion = 7.3.1; 160 | }; 161 | }; 162 | }; 163 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 164 | compatibilityVersion = "Xcode 3.2"; 165 | developmentRegion = English; 166 | hasScannedForEncodings = 0; 167 | knownRegions = ( 168 | en, 169 | Base, 170 | ); 171 | mainGroup = 97C146E51CF9000F007C117D; 172 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 173 | projectDirPath = ""; 174 | projectRoot = ""; 175 | targets = ( 176 | 97C146ED1CF9000F007C117D /* Runner */, 177 | ); 178 | }; 179 | /* End PBXProject section */ 180 | 181 | /* Begin PBXResourcesBuildPhase section */ 182 | 97C146EC1CF9000F007C117D /* Resources */ = { 183 | isa = PBXResourcesBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 187 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 188 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 189 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 190 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | }; 194 | /* End PBXResourcesBuildPhase section */ 195 | 196 | /* Begin PBXShellScriptBuildPhase section */ 197 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 198 | isa = PBXShellScriptBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | ); 202 | inputPaths = ( 203 | ); 204 | name = "Thin Binary"; 205 | outputPaths = ( 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | shellPath = /bin/sh; 209 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 210 | }; 211 | 9740EEB61CF901F6004384FC /* Run Script */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | ); 218 | name = "Run Script"; 219 | outputPaths = ( 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | shellPath = /bin/sh; 223 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 224 | }; 225 | /* End PBXShellScriptBuildPhase section */ 226 | 227 | /* Begin PBXSourcesBuildPhase section */ 228 | 97C146EA1CF9000F007C117D /* Sources */ = { 229 | isa = PBXSourcesBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 233 | 97C146F31CF9000F007C117D /* main.m in Sources */, 234 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | /* End PBXSourcesBuildPhase section */ 239 | 240 | /* Begin PBXVariantGroup section */ 241 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 242 | isa = PBXVariantGroup; 243 | children = ( 244 | 97C146FB1CF9000F007C117D /* Base */, 245 | ); 246 | name = Main.storyboard; 247 | sourceTree = ""; 248 | }; 249 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 250 | isa = PBXVariantGroup; 251 | children = ( 252 | 97C147001CF9000F007C117D /* Base */, 253 | ); 254 | name = LaunchScreen.storyboard; 255 | sourceTree = ""; 256 | }; 257 | /* End PBXVariantGroup section */ 258 | 259 | /* Begin XCBuildConfiguration section */ 260 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 261 | isa = XCBuildConfiguration; 262 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | CLANG_ANALYZER_NONNULL = YES; 266 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 267 | CLANG_CXX_LIBRARY = "libc++"; 268 | CLANG_ENABLE_MODULES = YES; 269 | CLANG_ENABLE_OBJC_ARC = YES; 270 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 271 | CLANG_WARN_BOOL_CONVERSION = YES; 272 | CLANG_WARN_COMMA = YES; 273 | CLANG_WARN_CONSTANT_CONVERSION = YES; 274 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 275 | CLANG_WARN_EMPTY_BODY = YES; 276 | CLANG_WARN_ENUM_CONVERSION = YES; 277 | CLANG_WARN_INFINITE_RECURSION = YES; 278 | CLANG_WARN_INT_CONVERSION = YES; 279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 280 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 281 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 282 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 283 | CLANG_WARN_STRICT_PROTOTYPES = YES; 284 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 285 | CLANG_WARN_UNREACHABLE_CODE = YES; 286 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 287 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 288 | COPY_PHASE_STRIP = NO; 289 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 290 | ENABLE_NS_ASSERTIONS = NO; 291 | ENABLE_STRICT_OBJC_MSGSEND = YES; 292 | GCC_C_LANGUAGE_STANDARD = gnu99; 293 | GCC_NO_COMMON_BLOCKS = YES; 294 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 295 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 296 | GCC_WARN_UNDECLARED_SELECTOR = YES; 297 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 298 | GCC_WARN_UNUSED_FUNCTION = YES; 299 | GCC_WARN_UNUSED_VARIABLE = YES; 300 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 301 | MTL_ENABLE_DEBUG_INFO = NO; 302 | SDKROOT = iphoneos; 303 | TARGETED_DEVICE_FAMILY = "1,2"; 304 | VALIDATE_PRODUCT = YES; 305 | }; 306 | name = Profile; 307 | }; 308 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 309 | isa = XCBuildConfiguration; 310 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 311 | buildSettings = { 312 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 313 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 314 | DEVELOPMENT_TEAM = S8QB4VV633; 315 | ENABLE_BITCODE = NO; 316 | FRAMEWORK_SEARCH_PATHS = ( 317 | "$(inherited)", 318 | "$(PROJECT_DIR)/Flutter", 319 | ); 320 | INFOPLIST_FILE = Runner/Info.plist; 321 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 322 | LIBRARY_SEARCH_PATHS = ( 323 | "$(inherited)", 324 | "$(PROJECT_DIR)/Flutter", 325 | ); 326 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterWidgets; 327 | PRODUCT_NAME = "$(TARGET_NAME)"; 328 | VERSIONING_SYSTEM = "apple-generic"; 329 | }; 330 | name = Profile; 331 | }; 332 | 97C147031CF9000F007C117D /* Debug */ = { 333 | isa = XCBuildConfiguration; 334 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 335 | buildSettings = { 336 | ALWAYS_SEARCH_USER_PATHS = NO; 337 | CLANG_ANALYZER_NONNULL = YES; 338 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 339 | CLANG_CXX_LIBRARY = "libc++"; 340 | CLANG_ENABLE_MODULES = YES; 341 | CLANG_ENABLE_OBJC_ARC = YES; 342 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 343 | CLANG_WARN_BOOL_CONVERSION = YES; 344 | CLANG_WARN_COMMA = YES; 345 | CLANG_WARN_CONSTANT_CONVERSION = YES; 346 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 347 | CLANG_WARN_EMPTY_BODY = YES; 348 | CLANG_WARN_ENUM_CONVERSION = YES; 349 | CLANG_WARN_INFINITE_RECURSION = YES; 350 | CLANG_WARN_INT_CONVERSION = YES; 351 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 352 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 353 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 354 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 355 | CLANG_WARN_STRICT_PROTOTYPES = YES; 356 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 357 | CLANG_WARN_UNREACHABLE_CODE = YES; 358 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 359 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 360 | COPY_PHASE_STRIP = NO; 361 | DEBUG_INFORMATION_FORMAT = dwarf; 362 | ENABLE_STRICT_OBJC_MSGSEND = YES; 363 | ENABLE_TESTABILITY = YES; 364 | GCC_C_LANGUAGE_STANDARD = gnu99; 365 | GCC_DYNAMIC_NO_PIC = NO; 366 | GCC_NO_COMMON_BLOCKS = YES; 367 | GCC_OPTIMIZATION_LEVEL = 0; 368 | GCC_PREPROCESSOR_DEFINITIONS = ( 369 | "DEBUG=1", 370 | "$(inherited)", 371 | ); 372 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 373 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 374 | GCC_WARN_UNDECLARED_SELECTOR = YES; 375 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 376 | GCC_WARN_UNUSED_FUNCTION = YES; 377 | GCC_WARN_UNUSED_VARIABLE = YES; 378 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 379 | MTL_ENABLE_DEBUG_INFO = YES; 380 | ONLY_ACTIVE_ARCH = YES; 381 | SDKROOT = iphoneos; 382 | TARGETED_DEVICE_FAMILY = "1,2"; 383 | }; 384 | name = Debug; 385 | }; 386 | 97C147041CF9000F007C117D /* Release */ = { 387 | isa = XCBuildConfiguration; 388 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 389 | buildSettings = { 390 | ALWAYS_SEARCH_USER_PATHS = NO; 391 | CLANG_ANALYZER_NONNULL = YES; 392 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 393 | CLANG_CXX_LIBRARY = "libc++"; 394 | CLANG_ENABLE_MODULES = YES; 395 | CLANG_ENABLE_OBJC_ARC = YES; 396 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 397 | CLANG_WARN_BOOL_CONVERSION = YES; 398 | CLANG_WARN_COMMA = YES; 399 | CLANG_WARN_CONSTANT_CONVERSION = YES; 400 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 401 | CLANG_WARN_EMPTY_BODY = YES; 402 | CLANG_WARN_ENUM_CONVERSION = YES; 403 | CLANG_WARN_INFINITE_RECURSION = YES; 404 | CLANG_WARN_INT_CONVERSION = YES; 405 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 406 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 407 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 408 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 409 | CLANG_WARN_STRICT_PROTOTYPES = YES; 410 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 411 | CLANG_WARN_UNREACHABLE_CODE = YES; 412 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 413 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 414 | COPY_PHASE_STRIP = NO; 415 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 416 | ENABLE_NS_ASSERTIONS = NO; 417 | ENABLE_STRICT_OBJC_MSGSEND = YES; 418 | GCC_C_LANGUAGE_STANDARD = gnu99; 419 | GCC_NO_COMMON_BLOCKS = YES; 420 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 421 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 422 | GCC_WARN_UNDECLARED_SELECTOR = YES; 423 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 424 | GCC_WARN_UNUSED_FUNCTION = YES; 425 | GCC_WARN_UNUSED_VARIABLE = YES; 426 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 427 | MTL_ENABLE_DEBUG_INFO = NO; 428 | SDKROOT = iphoneos; 429 | TARGETED_DEVICE_FAMILY = "1,2"; 430 | VALIDATE_PRODUCT = YES; 431 | }; 432 | name = Release; 433 | }; 434 | 97C147061CF9000F007C117D /* Debug */ = { 435 | isa = XCBuildConfiguration; 436 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 437 | buildSettings = { 438 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 439 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 440 | ENABLE_BITCODE = NO; 441 | FRAMEWORK_SEARCH_PATHS = ( 442 | "$(inherited)", 443 | "$(PROJECT_DIR)/Flutter", 444 | ); 445 | INFOPLIST_FILE = Runner/Info.plist; 446 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 447 | LIBRARY_SEARCH_PATHS = ( 448 | "$(inherited)", 449 | "$(PROJECT_DIR)/Flutter", 450 | ); 451 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterWidgets; 452 | PRODUCT_NAME = "$(TARGET_NAME)"; 453 | VERSIONING_SYSTEM = "apple-generic"; 454 | }; 455 | name = Debug; 456 | }; 457 | 97C147071CF9000F007C117D /* Release */ = { 458 | isa = XCBuildConfiguration; 459 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 460 | buildSettings = { 461 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 462 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 463 | ENABLE_BITCODE = NO; 464 | FRAMEWORK_SEARCH_PATHS = ( 465 | "$(inherited)", 466 | "$(PROJECT_DIR)/Flutter", 467 | ); 468 | INFOPLIST_FILE = Runner/Info.plist; 469 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 470 | LIBRARY_SEARCH_PATHS = ( 471 | "$(inherited)", 472 | "$(PROJECT_DIR)/Flutter", 473 | ); 474 | PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterWidgets; 475 | PRODUCT_NAME = "$(TARGET_NAME)"; 476 | VERSIONING_SYSTEM = "apple-generic"; 477 | }; 478 | name = Release; 479 | }; 480 | /* End XCBuildConfiguration section */ 481 | 482 | /* Begin XCConfigurationList section */ 483 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 484 | isa = XCConfigurationList; 485 | buildConfigurations = ( 486 | 97C147031CF9000F007C117D /* Debug */, 487 | 97C147041CF9000F007C117D /* Release */, 488 | 249021D3217E4FDB00AE95B9 /* Profile */, 489 | ); 490 | defaultConfigurationIsVisible = 0; 491 | defaultConfigurationName = Release; 492 | }; 493 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 494 | isa = XCConfigurationList; 495 | buildConfigurations = ( 496 | 97C147061CF9000F007C117D /* Debug */, 497 | 97C147071CF9000F007C117D /* Release */, 498 | 249021D4217E4FDB00AE95B9 /* Profile */, 499 | ); 500 | defaultConfigurationIsVisible = 0; 501 | defaultConfigurationName = Release; 502 | }; 503 | /* End XCConfigurationList section */ 504 | }; 505 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 506 | } 507 | -------------------------------------------------------------------------------- /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 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Original 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.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/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/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 | flutter_widgets 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/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /lib/animation/animated_bottom_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:fancy_bar/fancy_bar.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class AnimatedBottomBar extends StatefulWidget { 5 | static String tag = 'animatedBottomBar'; 6 | 7 | @override 8 | _AnimatedBottomBarState createState() => _AnimatedBottomBarState(); 9 | } 10 | 11 | class _AnimatedBottomBarState extends State { 12 | int pos = 0; 13 | 14 | void setItem(int _pos) { 15 | setState(() { 16 | pos = _pos; 17 | }); 18 | } 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Scaffold( 23 | appBar: AppBar( 24 | // Here we take the value from the MyHomePage object that was created by 25 | // the App.build method, and use it to set our appbar title. 26 | title: Text(''), 27 | ), 28 | bottomNavigationBar: FancyBottomBar( 29 | type: FancyType.FancyV2, 30 | items: [ 31 | FancyItem( 32 | textColor: Colors.orange, 33 | title: 'Home', 34 | icon: Icon(Icons.home), 35 | ), 36 | FancyItem( 37 | textColor: Colors.red, 38 | title: 'Trending', 39 | icon: Icon(Icons.trending_up), 40 | ), 41 | FancyItem( 42 | textColor: Colors.green, 43 | title: 'Search', 44 | icon: Icon(Icons.search), 45 | ), 46 | FancyItem( 47 | textColor: Colors.brown, 48 | title: 'Settings', 49 | icon: Icon(Icons.settings), 50 | ), 51 | ], 52 | onItemSelected: (index) { 53 | print(index); 54 | }, 55 | ), 56 | body: Center( 57 | child: Column( 58 | mainAxisAlignment: MainAxisAlignment.center, 59 | children: [ 60 | Text( 61 | 'You have pushed the button this many times:', 62 | ), 63 | ], 64 | ), 65 | ), // This trailing comma makes auto-formatting nicer for build methods. 66 | ); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/form_kit/flutter_form.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_widgets/form_kit/toast.dart'; 3 | 4 | class FlutterForm extends StatefulWidget { 5 | FlutterForm({Key key}) : super(key: key); 6 | 7 | _FlutterFormState createState() => _FlutterFormState(); 8 | } 9 | 10 | class _FlutterFormState extends State { 11 | // ScrollController _controller = ScrollController(); 12 | GlobalKey _formKey = GlobalKey(); 13 | 14 | @override 15 | void initState() { 16 | super.initState(); 17 | } 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return Container( 22 | child: Scaffold( 23 | floatingActionButton: FloatingActionButton( 24 | tooltip: 'Hello', 25 | onPressed: (){ 26 | 27 | }, 28 | ), 29 | appBar: AppBar( 30 | brightness: Brightness.dark, 31 | backgroundColor: Colors.blueGrey, 32 | ), 33 | body: SingleChildScrollView( 34 | child: Form( 35 | key: _formKey, 36 | child: Column( 37 | crossAxisAlignment: CrossAxisAlignment.end, 38 | children: [ 39 | Tooltip( 40 | message: 'Hello', 41 | ), 42 | Padding( 43 | padding: EdgeInsets.all(16), 44 | child: TextFormField( 45 | validator: (value) { 46 | return value.isEmpty ? 'Error' : null; 47 | }, 48 | decoration: InputDecoration( 49 | // helperText: 'hrlo', 50 | // errorText: 'hello', 51 | errorStyle: TextStyle(), 52 | isDense: true, 53 | border: OutlineInputBorder()), 54 | ), 55 | ), 56 | Padding( 57 | padding: EdgeInsets.only(left: 16, right: 16), 58 | child: TextFormField( 59 | validator: (value) { 60 | return value.isEmpty ? 'Error' : null; 61 | }, 62 | decoration: InputDecoration( 63 | // helperText: 'hrlo', 64 | // errorText: 'hello', 65 | errorStyle: TextStyle(), 66 | isDense: true, 67 | border: OutlineInputBorder()), 68 | ), 69 | ), 70 | Padding( 71 | padding: EdgeInsets.only(left: 16, right: 16), 72 | child: RaisedButton( 73 | colorBrightness: Brightness.dark, 74 | color: Colors.green, 75 | child: Text('Validate it Man'), 76 | onPressed: () { 77 | Toast.show('helo', context, backgroundColor: Colors.blue, backgroundRadius: 4); 78 | _formKey.currentState.save(); 79 | _formKey.currentState.validate(); 80 | }, 81 | ), 82 | ) 83 | ], 84 | ), 85 | ), 86 | ), 87 | ), 88 | ); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /lib/form_kit/toast.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/widgets.dart'; 5 | 6 | class Toast { 7 | static final int LENGTH_SHORT = 1; 8 | static final int LENGTH_LONG = 2; 9 | static final int BOTTOM = 0; 10 | static final int CENTER = 1; 11 | static final int TOP = 2; 12 | 13 | static void show(String msg, BuildContext context, 14 | {int duration = 3, 15 | int gravity = 0, 16 | Color backgroundColor = const Color(0xAA000000), 17 | Color textColor = Colors.white, 18 | double backgroundRadius = 20, 19 | Border border}) { 20 | ToastView.dismiss(); 21 | ToastView.createView(msg, context, duration, gravity, backgroundColor, 22 | textColor, backgroundRadius, border); 23 | } 24 | } 25 | 26 | class ToastView { 27 | static final ToastView _singleton = new ToastView._internal(); 28 | 29 | factory ToastView() { 30 | return _singleton; 31 | } 32 | 33 | ToastView._internal(); 34 | 35 | static OverlayState overlayState; 36 | static OverlayEntry _overlayEntry; 37 | static bool _isVisible = false; 38 | 39 | static void createView( 40 | String msg, 41 | BuildContext context, 42 | int duration, 43 | int gravity, 44 | Color background, 45 | Color textColor, 46 | double backgroundRadius, 47 | Border border) async { 48 | overlayState = Overlay.of(context); 49 | 50 | // Paint paint = Paint(); 51 | // paint.strokeCap = StrokeCap.square; 52 | // paint.color = background; 53 | 54 | _overlayEntry = new OverlayEntry( 55 | builder: (BuildContext context) => ToastWidget( 56 | widget: Container( 57 | width: MediaQuery.of(context).size.width, 58 | child: Container( 59 | alignment: Alignment.center, 60 | width: MediaQuery.of(context).size.width, 61 | child: Container( 62 | decoration: BoxDecoration( 63 | color: background, 64 | borderRadius: BorderRadius.circular(backgroundRadius), 65 | border: border, 66 | ), 67 | margin: EdgeInsets.symmetric(horizontal: 20), 68 | padding: EdgeInsets.fromLTRB(16, 10, 16, 10), 69 | child: Row( 70 | mainAxisSize: MainAxisSize.min, 71 | children: [ 72 | Icon(Icons.ac_unit, color: Colors.white,), 73 | SizedBox( 74 | width: 16, 75 | ), 76 | Text( 77 | msg, 78 | softWrap: true, 79 | style: TextStyle(fontSize: 16, color: textColor), 80 | ), 81 | ], 82 | ))), 83 | ), 84 | gravity: gravity), 85 | ); 86 | _isVisible = true; 87 | overlayState.insert(_overlayEntry); 88 | await new Future.delayed( 89 | Duration(seconds: duration == null ? Toast.LENGTH_SHORT : duration)); 90 | dismiss(); 91 | } 92 | 93 | static dismiss() async { 94 | if (!_isVisible) { 95 | return; 96 | } 97 | _isVisible = false; 98 | _overlayEntry?.remove(); 99 | } 100 | } 101 | 102 | class ToastWidget extends StatelessWidget { 103 | ToastWidget({ 104 | Key key, 105 | @required this.widget, 106 | @required this.gravity, 107 | }) : super(key: key); 108 | 109 | final Widget widget; 110 | final int gravity; 111 | 112 | @override 113 | Widget build(BuildContext context) { 114 | return new Positioned( 115 | top: gravity == 2 ? 50 : null, 116 | bottom: gravity == 0 ? 50 : null, 117 | child: Material( 118 | color: Colors.transparent, 119 | child: widget, 120 | )); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /lib/grocerry_kit/auth.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AuthPage extends StatefulWidget { 4 | @override 5 | State createState() { 6 | return _AuthPageState(); 7 | } 8 | } 9 | 10 | class _AuthPageState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Scaffold( 14 | appBar: AppBar( 15 | elevation: 0, 16 | backgroundColor: Colors.white, 17 | ), 18 | body: ListView( 19 | children: [ 20 | Container( 21 | height: 490, 22 | decoration: BoxDecoration( 23 | boxShadow: [ 24 | new BoxShadow( 25 | color: Colors.black26, 26 | offset: new Offset(0.0, 2.0), 27 | blurRadius: 25.0, 28 | ) 29 | ], 30 | color: Colors.white, 31 | borderRadius: BorderRadius.only( 32 | bottomLeft: Radius.circular(32), 33 | bottomRight: Radius.circular(32))), 34 | alignment: Alignment.topCenter, 35 | child: Column( 36 | mainAxisAlignment: MainAxisAlignment.start, 37 | crossAxisAlignment: CrossAxisAlignment.start, 38 | mainAxisSize: MainAxisSize.min, 39 | children: [ 40 | Row( 41 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 42 | crossAxisAlignment: CrossAxisAlignment.start, 43 | children: [ 44 | Container( 45 | margin: EdgeInsets.all(16), 46 | child: FlatButton( 47 | onPressed: () {}, 48 | child: Text( 49 | 'Sign In', 50 | style: TextStyle( 51 | fontSize: 20, 52 | color: Colors.grey, 53 | ), 54 | ), 55 | ), 56 | ), 57 | Container( 58 | margin: EdgeInsets.all(16), 59 | child: FlatButton( 60 | onPressed: () {}, 61 | child: Text( 62 | 'Sign Up', 63 | style: TextStyle( 64 | fontSize: 20, 65 | color: Colors.green, 66 | ), 67 | ), 68 | ), 69 | ), 70 | ], 71 | ), 72 | Container( 73 | margin: EdgeInsets.only(left: 16, top: 8), 74 | child: Text( 75 | 'Welcome to keells.', 76 | style: 77 | TextStyle(fontSize: 22, fontWeight: FontWeight.bold), 78 | ), 79 | ), 80 | Container( 81 | margin: EdgeInsets.only(left: 16, top: 8), 82 | child: Text( 83 | 'Let\'s get started', 84 | style: TextStyle( 85 | fontSize: 18, fontWeight: FontWeight.normal), 86 | ), 87 | ), 88 | Padding( 89 | padding: EdgeInsets.only( 90 | left: 16, right: 16, top: 32, bottom: 8), 91 | child: TextField( 92 | style: TextStyle(fontSize: 18), 93 | keyboardType: TextInputType.text, 94 | textCapitalization: TextCapitalization.words, 95 | decoration: InputDecoration( 96 | hintText: 'Name', 97 | enabledBorder: OutlineInputBorder( 98 | borderRadius: BorderRadius.circular(8), 99 | borderSide: BorderSide(color: Colors.grey)), 100 | focusedBorder: OutlineInputBorder( 101 | borderRadius: BorderRadius.circular(8), 102 | borderSide: BorderSide(color: Colors.grey)), 103 | ), 104 | ), 105 | ), 106 | Padding( 107 | padding: 108 | EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 8), 109 | child: TextField( 110 | keyboardType: TextInputType.emailAddress, 111 | style: TextStyle(fontSize: 18), 112 | decoration: InputDecoration( 113 | hintText: 'E-Mail Address', 114 | enabledBorder: OutlineInputBorder( 115 | borderRadius: BorderRadius.circular(8), 116 | borderSide: BorderSide(color: Colors.grey)), 117 | focusedBorder: OutlineInputBorder( 118 | borderRadius: BorderRadius.circular(8), 119 | borderSide: BorderSide(color: Colors.grey)), 120 | ), 121 | ), 122 | ), 123 | Padding( 124 | padding: 125 | EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 8), 126 | child: TextField( 127 | obscureText: true, 128 | style: TextStyle(fontSize: 18), 129 | keyboardType: TextInputType.text, 130 | decoration: InputDecoration( 131 | hintText: 'Password', 132 | enabledBorder: OutlineInputBorder( 133 | borderRadius: BorderRadius.circular(8), 134 | borderSide: BorderSide(color: Colors.grey)), 135 | focusedBorder: OutlineInputBorder( 136 | borderRadius: BorderRadius.circular(8), 137 | borderSide: BorderSide(color: Colors.grey)), 138 | ), 139 | ), 140 | ), 141 | Align( 142 | alignment: Alignment.centerRight, 143 | child: Container( 144 | margin: EdgeInsets.all(16), 145 | decoration: BoxDecoration( 146 | color: Colors.green, shape: BoxShape.circle), 147 | child: IconButton( 148 | color: Colors.white, 149 | onPressed: () { 150 | Navigator.pushNamed(context, '/grocerry/verify'); 151 | }, 152 | icon: Icon(Icons.arrow_forward), 153 | ), 154 | )), 155 | ], 156 | ), 157 | ), 158 | ], 159 | )); 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /lib/grocerry_kit/home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_widgets/utils/cart_icons_icons.dart'; 3 | import 'sub_pages/home_list.dart'; 4 | import 'sub_pages/cart.dart'; 5 | 6 | class HomePage extends StatefulWidget { 7 | @override 8 | State createState() { 9 | return _HomePageState(); 10 | } 11 | } 12 | 13 | class _HomePageState extends State { 14 | List _widgetList = [ 15 | HomeList(), 16 | CartPage(), 17 | HomeList(), 18 | HomeList(), 19 | ]; 20 | 21 | int _index = 0; 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return Scaffold( 26 | appBar: _buildAppBar(), 27 | bottomNavigationBar: BottomNavigationBar( 28 | selectedItemColor: Colors.green, 29 | unselectedItemColor: Colors.black, 30 | type: BottomNavigationBarType.shifting, 31 | currentIndex: _index, 32 | onTap: (index) { 33 | setState(() { 34 | _index = index; 35 | }); 36 | }, 37 | items: [ 38 | BottomNavigationBarItem( 39 | icon: Icon( 40 | CartIcons.home, 41 | ), 42 | label: 'Store', 43 | ), 44 | BottomNavigationBarItem( 45 | icon: Icon( 46 | CartIcons.cart, 47 | ), 48 | label: 'My Cart', 49 | ), 50 | BottomNavigationBarItem( 51 | icon: Icon( 52 | CartIcons.favourites, 53 | ), 54 | label: 'Favourites', 55 | ), 56 | BottomNavigationBarItem( 57 | icon: Icon( 58 | CartIcons.account, 59 | ), 60 | label: 'My Account', 61 | ) 62 | ], 63 | ), 64 | body: _widgetList[_index], 65 | ); 66 | } 67 | } 68 | 69 | Widget _buildAppBar() { 70 | return AppBar( 71 | centerTitle: true, 72 | brightness: Brightness.dark, 73 | elevation: 0, 74 | backgroundColor: Colors.green, 75 | automaticallyImplyLeading: false, 76 | title: Text( 77 | 'Keels', 78 | style: TextStyle(color: Colors.white), 79 | ), 80 | actions: [ 81 | Icon(Icons.search, color: Colors.white), 82 | SizedBox( 83 | width: 10, 84 | ), 85 | Icon(Icons.notifications_none, color: Colors.white), 86 | SizedBox( 87 | width: 10, 88 | ), 89 | ], 90 | ); 91 | } 92 | 93 | // Widget _buildBottomBar(BuildContext con) { 94 | // return BottomNavigationBar( 95 | // // selectedItemColor: Colors.green, 96 | // // unselectedItemColor: Colors.black, 97 | // type: BottomNavigationBarType.fixed, 98 | // currentIndex: 2, 99 | // onTap: (index) {}, 100 | // items: [ 101 | // BottomNavigationBarItem( 102 | // icon: Icon( 103 | // CartIcons.home, 104 | // color: Colors.black, 105 | // ), 106 | // title: Text(' Store ', style: TextStyle())), 107 | // BottomNavigationBarItem( 108 | // icon: Icon( 109 | // CartIcons.cart, 110 | // ), 111 | // title: Text('My Cart', style: TextStyle())), 112 | // BottomNavigationBarItem( 113 | // icon: Icon( 114 | // CartIcons.favourites, 115 | // ), 116 | // title: Text('Favourites', style: TextStyle())), 117 | // BottomNavigationBarItem( 118 | // icon: Icon( 119 | // CartIcons.account, 120 | // ), 121 | // title: Text( 122 | // 'My Account', 123 | // style: TextStyle(), 124 | // )) 125 | // ], 126 | // ); 127 | // } 128 | -------------------------------------------------------------------------------- /lib/grocerry_kit/model/grocery_model.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | FoodModel foodModelFromJson(String str) => FoodModel.fromJson(json.decode(str)); 4 | 5 | String foodModelToJson(FoodModel data) => json.encode(data.toJson()); 6 | 7 | class FoodModel { 8 | List list; 9 | String status; 10 | 11 | FoodModel({ 12 | this.list, 13 | this.status, 14 | }); 15 | 16 | factory FoodModel.fromJson(Map json) => new FoodModel( 17 | list: new List.from(json["list"].map((x) => ListElement.fromJson(x))), 18 | status: json["status"], 19 | ); 20 | 21 | Map toJson() => { 22 | "list": new List.from(list.map((x) => x.toJson())), 23 | "status": status, 24 | }; 25 | } 26 | 27 | class ListElement { 28 | String image; 29 | String name; 30 | int price; 31 | 32 | ListElement({ 33 | this.image, 34 | this.name, 35 | this.price, 36 | }); 37 | 38 | factory ListElement.fromJson(Map json) => new ListElement( 39 | image: json["image"], 40 | name: json["name"], 41 | price: json["price"], 42 | ); 43 | 44 | Map toJson() => { 45 | "image": image, 46 | "name": name, 47 | "price": price, 48 | }; 49 | } 50 | -------------------------------------------------------------------------------- /lib/grocerry_kit/model/product_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Product { 4 | String name; 5 | IconData image; 6 | 7 | Product( 8 | this.name, 9 | this.image, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/grocerry_kit/phone_verify.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter/services.dart'; 3 | 4 | class VerifyPage extends StatefulWidget { 5 | @override 6 | State createState() { 7 | return _VerifyPageState(); 8 | } 9 | } 10 | 11 | class _VerifyPageState extends State { 12 | String string = ''; 13 | String code1 = ''; 14 | String code2 = ''; 15 | String code3 = ''; 16 | String code4 = ''; 17 | bool verify = false; 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return Scaffold( 22 | appBar: AppBar( 23 | brightness: Brightness.light, 24 | title: Text('Verify', style: TextStyle(color: Colors.black)), 25 | iconTheme: IconThemeData(color: Colors.black), 26 | elevation: 0, 27 | backgroundColor: Colors.white, 28 | ), 29 | body: ListView( 30 | // mainAxisAlignment: MainAxisAlignment.spaceBetween, 31 | children: [ 32 | Container( 33 | height: 300, 34 | decoration: BoxDecoration( 35 | boxShadow: [ 36 | new BoxShadow( 37 | color: Colors.black26, 38 | offset: new Offset(0.0, 2.0), 39 | blurRadius: 25.0, 40 | ) 41 | ], 42 | color: Colors.white, 43 | borderRadius: BorderRadius.only( 44 | bottomLeft: Radius.circular(32), 45 | bottomRight: Radius.circular(32))), 46 | alignment: Alignment.topCenter, 47 | child: Column( 48 | mainAxisAlignment: MainAxisAlignment.start, 49 | crossAxisAlignment: CrossAxisAlignment.start, 50 | mainAxisSize: MainAxisSize.min, 51 | children: [ 52 | Container( 53 | alignment: Alignment.centerLeft, 54 | margin: EdgeInsets.only(left: 16, top: 32), 55 | child: Text( 56 | 'Verify your number', 57 | style: 58 | TextStyle(fontSize: 24, fontWeight: FontWeight.bold), 59 | ), 60 | ), 61 | Container( 62 | alignment: Alignment.centerLeft, 63 | margin: EdgeInsets.only(left: 16, top: 8), 64 | child: RichText( 65 | text: TextSpan(children: [ 66 | TextSpan( 67 | text: '4 digit code sent to ', 68 | style: TextStyle(fontSize: 18, color: Colors.black), 69 | ), 70 | TextSpan( 71 | text: '+91 987 654 3210', 72 | style: TextStyle( 73 | fontSize: 20, 74 | color: Colors.green, 75 | fontWeight: FontWeight.bold), 76 | ) 77 | ]), 78 | ), 79 | ), 80 | SizedBox( 81 | height: 32, 82 | ), 83 | Padding( 84 | padding: EdgeInsets.all(16), 85 | child: Row( 86 | crossAxisAlignment: CrossAxisAlignment.center, 87 | mainAxisSize: MainAxisSize.max, 88 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 89 | children: [ 90 | _inputFields(code1), 91 | _inputFields(code2), 92 | _inputFields(code3), 93 | _inputFields(code4), 94 | ], 95 | ), 96 | ), 97 | Row( 98 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 99 | mainAxisSize: MainAxisSize.max, 100 | children: [ 101 | Padding( 102 | padding: EdgeInsets.only(left: 16, right: 16, top: 0), 103 | child: ElevatedButton( 104 | // padding: EdgeInsets.only( 105 | // left: 16, right: 16, top: 8, bottom: 8), 106 | // textColor: Colors.red, 107 | // color: Colors.red, 108 | // borderSide: BorderSide(color: Colors.red), 109 | child: Text( 110 | 'Resend', 111 | style: TextStyle(), 112 | ), 113 | onPressed: () {}, 114 | ), 115 | ), 116 | Align( 117 | alignment: Alignment.centerRight, 118 | child: Container( 119 | margin: EdgeInsets.all(16), 120 | decoration: BoxDecoration( 121 | color: verify ? Colors.green : Colors.grey, 122 | shape: BoxShape.circle, 123 | ), 124 | child: IconButton( 125 | color: Colors.white, 126 | onPressed: () { 127 | Navigator.pushNamed(context, '/grocerry/home'); 128 | }, 129 | icon: Icon(Icons.check), 130 | ), 131 | )), 132 | ], 133 | ) 134 | ], 135 | ), 136 | ), 137 | Container( 138 | padding: EdgeInsets.all(32), 139 | alignment: Alignment.center, 140 | child: Column( 141 | children: [ 142 | ButtonBar( 143 | alignment: MainAxisAlignment.spaceBetween, 144 | children: [ 145 | _createCalcButton('1'), 146 | _createCalcButton('2'), 147 | _createCalcButton('3'), 148 | ], 149 | ), 150 | ButtonBar( 151 | alignment: MainAxisAlignment.spaceBetween, 152 | children: [ 153 | _createCalcButton('4'), 154 | _createCalcButton('5'), 155 | _createCalcButton('6'), 156 | ], 157 | ), 158 | ButtonBar( 159 | alignment: MainAxisAlignment.spaceBetween, 160 | children: [ 161 | _createCalcButton('7'), 162 | _createCalcButton('8'), 163 | _createCalcButton('9'), 164 | ], 165 | ), 166 | ButtonBar( 167 | alignment: MainAxisAlignment.spaceBetween, 168 | children: [ 169 | _createCalcButton(''), 170 | _createCalcButton('0'), 171 | InkWell( 172 | borderRadius: BorderRadius.circular(45), 173 | onTap: () { 174 | deleteCode(); 175 | }, 176 | child: Container( 177 | alignment: Alignment.center, 178 | // decoration: BoxDecoration(shape: BoxShape.circle), 179 | width: 50, 180 | height: 50, 181 | child: Icon(Icons.backspace))) 182 | ], 183 | ), 184 | SizedBox( 185 | height: 14, 186 | ) 187 | ], 188 | ), 189 | ), 190 | ], 191 | )); 192 | } 193 | 194 | Widget _inputFields(String s) { 195 | return Container( 196 | alignment: Alignment.center, 197 | height: 50, 198 | width: 85, 199 | child: Text( 200 | s, 201 | style: TextStyle(fontSize: 28), 202 | ), 203 | decoration: BoxDecoration( 204 | shape: BoxShape.rectangle, 205 | border: Border.all(color: Colors.black26), 206 | borderRadius: BorderRadius.circular(8)), 207 | ); 208 | } 209 | 210 | Widget _createCalcButton(String value) { 211 | return InkWell( 212 | borderRadius: BorderRadius.circular(45), 213 | onTap: () { 214 | updateCode(value); 215 | }, 216 | child: Container( 217 | alignment: Alignment.center, 218 | // decoration: BoxDecoration(shape: BoxShape.circle), 219 | width: 50, 220 | height: 50, 221 | child: Text( 222 | value, 223 | style: TextStyle( 224 | fontSize: 26, 225 | fontWeight: FontWeight.bold, 226 | ), 227 | ), 228 | )); 229 | } 230 | 231 | void updateCode(String value) { 232 | switch (string.length) { 233 | case 0: 234 | { 235 | setState(() { 236 | code1 = value; 237 | }); 238 | break; 239 | } 240 | case 1: 241 | { 242 | setState(() { 243 | code2 = value; 244 | }); 245 | break; 246 | } 247 | case 2: 248 | { 249 | setState(() { 250 | code3 = value; 251 | }); 252 | break; 253 | } 254 | case 3: 255 | { 256 | setState(() { 257 | code4 = value; 258 | }); 259 | break; 260 | } 261 | default: 262 | { 263 | return; 264 | } 265 | } 266 | string += value; 267 | print(string); 268 | if (string.length > 3) { 269 | setState(() { 270 | verify = true; 271 | }); 272 | return; 273 | } else { 274 | return; 275 | } 276 | } 277 | 278 | void deleteCode() { 279 | switch (string.length) { 280 | case 1: 281 | { 282 | setState(() { 283 | code1 = ''; 284 | }); 285 | break; 286 | } 287 | case 2: 288 | { 289 | setState(() { 290 | code2 = ''; 291 | }); 292 | break; 293 | } 294 | case 3: 295 | { 296 | setState(() { 297 | code3 = ''; 298 | }); 299 | break; 300 | } 301 | case 4: 302 | { 303 | setState(() { 304 | code4 = ''; 305 | }); 306 | break; 307 | } 308 | default: 309 | { 310 | return; 311 | } 312 | } 313 | string = string.substring(0, string.length - 1); 314 | if(string.length < 4) { 315 | setState(() { 316 | verify = false; 317 | }); 318 | } 319 | print(string); 320 | } 321 | } 322 | -------------------------------------------------------------------------------- /lib/grocerry_kit/sub_pages/cart.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class CartPage extends StatelessWidget { 5 | @override 6 | Widget build(BuildContext context) { 7 | return Material( 8 | child: Stack( 9 | children: [ 10 | ListView.separated( 11 | itemCount: 5, 12 | separatorBuilder: (context, index) { 13 | return Divider(); 14 | }, 15 | itemBuilder: (context, index){ 16 | return _listItem(); 17 | }, 18 | ), 19 | ], 20 | ), 21 | ); 22 | } 23 | 24 | Widget _listItem() { 25 | return InkWell( 26 | child: Container( 27 | height: 120, 28 | child: Row( 29 | children: [ 30 | Container( 31 | width: 50, 32 | margin: EdgeInsets.all(10), 33 | height: 100, 34 | child: Image.network('src'), 35 | decoration: BoxDecoration( 36 | boxShadow: [ 37 | BoxShadow( 38 | color: Colors.black26, 39 | offset: new Offset(0.0, 2.0), 40 | blurRadius: 25.0, 41 | ) 42 | ] 43 | ), 44 | ), 45 | 46 | 47 | ], 48 | ), 49 | ), 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/grocerry_kit/sub_pages/home_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../model/product_model.dart'; 3 | import 'package:flutter_widgets/utils/cart_icons_icons.dart'; 4 | 5 | class HomeList extends StatelessWidget { 6 | @override 7 | Widget build(BuildContext context) { 8 | return Scaffold( 9 | body: Container( 10 | color: const Color(0xffF4F7FA), 11 | child: ListView( 12 | children: [ 13 | Row( 14 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 15 | children: [ 16 | Padding( 17 | padding: EdgeInsets.only(left: 16, top: 4), 18 | child: Text( 19 | 'All Categories', 20 | style: TextStyle( 21 | fontSize: 18, 22 | fontWeight: FontWeight.bold, 23 | ), 24 | ), 25 | ), 26 | Padding( 27 | padding: EdgeInsets.only(left: 16, top: 4), 28 | child: FlatButton( 29 | onPressed: () {}, 30 | child: Text( 31 | 'View All', 32 | style: TextStyle(color: Colors.green), 33 | ), 34 | ), 35 | ), 36 | ], 37 | ), 38 | _buildCategoryList(), 39 | Row( 40 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 41 | children: [ 42 | Padding( 43 | padding: EdgeInsets.only(left: 16, top: 4), 44 | child: Text( 45 | 'Prime Member Deals', 46 | style: TextStyle( 47 | fontSize: 18, 48 | fontWeight: FontWeight.bold, 49 | ), 50 | ), 51 | ), 52 | Padding( 53 | padding: EdgeInsets.only(left: 16, top: 4), 54 | child: FlatButton( 55 | onPressed: () {}, 56 | child: Text( 57 | 'View All', 58 | style: TextStyle(color: Colors.green), 59 | ), 60 | ), 61 | ), 62 | ], 63 | ), 64 | _buildDealList(), 65 | Row( 66 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 67 | children: [ 68 | Padding( 69 | padding: EdgeInsets.only(left: 16, top: 4), 70 | child: Text( 71 | 'Keells Deals', 72 | style: TextStyle( 73 | fontSize: 18, 74 | fontWeight: FontWeight.bold, 75 | ), 76 | ), 77 | ), 78 | Padding( 79 | padding: EdgeInsets.only(left: 16, top: 4), 80 | child: FlatButton( 81 | onPressed: () {}, 82 | child: Text( 83 | 'View All', 84 | style: TextStyle(color: Colors.green), 85 | ), 86 | ), 87 | ), 88 | ], 89 | ), 90 | _buildDealList() 91 | ], 92 | ), 93 | ), 94 | ); 95 | } 96 | 97 | Widget _buildCategoryList() { 98 | var items = addItems(); 99 | return Container( 100 | height: 150, 101 | alignment: Alignment.centerLeft, 102 | child: ListView.builder( 103 | shrinkWrap: true, 104 | physics: ClampingScrollPhysics(), 105 | scrollDirection: Axis.horizontal, 106 | itemCount: items.length, 107 | itemBuilder: (context, index) { 108 | var data = items[index]; 109 | return Column(children: [ 110 | Container( 111 | margin: EdgeInsets.all(10), 112 | width: 95, 113 | height: 95, 114 | alignment: Alignment.center, 115 | child: Icon( 116 | data.image, 117 | size: 40, 118 | color: Colors.black38, 119 | ), 120 | decoration: BoxDecoration( 121 | shape: BoxShape.circle, 122 | color: Colors.white, 123 | boxShadow: [ 124 | BoxShadow( 125 | color: Colors.black12, 126 | offset: Offset(0, 5), 127 | blurRadius: 15, 128 | ) 129 | ], 130 | ), 131 | ), 132 | Row( 133 | children: [ 134 | Text(data.name), 135 | Icon( 136 | Icons.keyboard_arrow_right, 137 | size: 14, 138 | ) 139 | ], 140 | ) 141 | ]); 142 | }, 143 | ), 144 | ); 145 | } 146 | 147 | Widget _buildDealList() { 148 | var items = addItems(); 149 | return Container( 150 | height: 200, 151 | alignment: Alignment.centerLeft, 152 | child: ListView.builder( 153 | shrinkWrap: true, 154 | physics: ClampingScrollPhysics(), 155 | scrollDirection: Axis.horizontal, 156 | itemCount: items.length, 157 | itemBuilder: (context, index) { 158 | var data = items[index]; 159 | return Column( 160 | mainAxisAlignment: MainAxisAlignment.start, 161 | mainAxisSize: MainAxisSize.min, 162 | children: [ 163 | Container( 164 | margin: EdgeInsets.all(10), 165 | width: 130, 166 | height: 140, 167 | alignment: Alignment.center, 168 | child: Icon( 169 | data.image, 170 | size: 40, 171 | color: Colors.black38, 172 | ), 173 | decoration: BoxDecoration( 174 | shape: BoxShape.rectangle, 175 | borderRadius: BorderRadius.circular(4), 176 | color: Colors.white, 177 | boxShadow: [ 178 | BoxShadow( 179 | color: Colors.black12, 180 | offset: Offset(0, 5), 181 | blurRadius: 15, 182 | ) 183 | ], 184 | ), 185 | ), 186 | Container( 187 | width: 130, 188 | alignment: Alignment.centerLeft, 189 | child: Text( 190 | data.name, 191 | style: TextStyle( 192 | fontSize: 14, 193 | color: Colors.black, 194 | ), 195 | ), 196 | ), 197 | Container( 198 | margin: EdgeInsets.only(top: 4, left: 4), 199 | width: 130, 200 | alignment: Alignment.centerLeft, 201 | child: Text( 202 | 'Rs.320', 203 | style: TextStyle( 204 | fontSize: 14, 205 | color: Colors.black, 206 | fontWeight: FontWeight.bold, 207 | ), 208 | ), 209 | ) 210 | ]); 211 | }, 212 | ), 213 | ); 214 | } 215 | 216 | List addItems() { 217 | var list = List(); 218 | 219 | var data1 = Product('House Hold', CartIcons.house_hold); 220 | list.add(data1); 221 | var data2 = Product('Grocery', CartIcons.grocery); 222 | list.add(data2); 223 | var data3 = Product('Liquor', CartIcons.liquor); 224 | list.add(data3); 225 | var data4 = Product('Breads', CartIcons.bread); 226 | list.add(data4); 227 | 228 | return list; 229 | } 230 | } 231 | -------------------------------------------------------------------------------- /lib/grocerry_kit/welcome.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WelcomePage extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Scaffold( 7 | body: Stack( 8 | children: [ 9 | Align( 10 | alignment: Alignment.bottomCenter, 11 | child: Column( 12 | mainAxisSize: MainAxisSize.min, 13 | children: [ 14 | Text( 15 | 'Welcome!', 16 | style: TextStyle(fontSize: 32, fontWeight: FontWeight.bold), 17 | ), 18 | Container( 19 | margin: EdgeInsets.only(top: 32, bottom: 16), 20 | decoration: BoxDecoration( 21 | color: Colors.green, 22 | shape: BoxShape.rectangle, 23 | borderRadius: BorderRadius.all(Radius.circular(8)), 24 | ), 25 | width: 250, 26 | child: FlatButton( 27 | child: Text('Sign In', 28 | style: TextStyle(fontSize: 20, color: Colors.white)), 29 | onPressed: () { 30 | Navigator.pushNamed(context, '/grocerry/auth'); 31 | }, 32 | ), 33 | ), 34 | Container( 35 | margin: EdgeInsets.only(top: 0, bottom: 16), 36 | decoration: BoxDecoration( 37 | // color: Colors.green, 38 | border: Border.all(color: Colors.green), 39 | // shape: BoxShape.rectangle, 40 | borderRadius: BorderRadius.all(Radius.circular(8)), 41 | ), 42 | width: 250, 43 | child: FlatButton( 44 | child: Text('Sign Up', 45 | style: TextStyle(fontSize: 20, color: Colors.green)), 46 | onPressed: () { 47 | Navigator.pushNamed(context, '/grocerry/auth'); 48 | }, 49 | ), 50 | ), 51 | Row( 52 | mainAxisAlignment: MainAxisAlignment.center, 53 | // crossAxisAlignment: CrossAxisAlignment.stretch, 54 | children: [ 55 | Text( 56 | 'Language : ', 57 | style: TextStyle( 58 | fontSize: 18, fontWeight: FontWeight.normal), 59 | ), 60 | SizedBox( 61 | width: 8, 62 | ), 63 | FlatButton( 64 | onPressed: () { 65 | 66 | }, 67 | child: Text( 68 | 'English', 69 | style: TextStyle( 70 | fontSize: 18, fontWeight: FontWeight.bold), 71 | ), 72 | ), 73 | ], 74 | ), 75 | SizedBox( 76 | height: 50, 77 | ) 78 | ], 79 | ), 80 | ) 81 | ], 82 | ), 83 | ); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_widgets/animation/animated_bottom_bar.dart'; 3 | import 'package:flutter_widgets/note_app/edit_note.dart'; 4 | 5 | import 'grocerry_kit/auth.dart'; 6 | import 'grocerry_kit/home_page.dart'; 7 | import 'grocerry_kit/phone_verify.dart'; 8 | import 'grocerry_kit/sub_pages/cart.dart'; 9 | 10 | void main() => runApp(MyApp()); 11 | 12 | class MyApp extends StatelessWidget { 13 | // This widget is the root of your application. 14 | @override 15 | Widget build(BuildContext context) { 16 | return MaterialApp( 17 | debugShowCheckedModeBanner: false, 18 | title: 'UI Kit', 19 | theme: ThemeData( 20 | brightness: Brightness.light, 21 | primarySwatch: Colors.amber, 22 | ), 23 | routes: { 24 | '/': (context) => AnimatedBottomBar(), 25 | '/grocerry/auth': (context) => AuthPage(), 26 | '/grocerry/verify': (context) => VerifyPage(), 27 | '/grocerry/home': (context) => HomePage(), 28 | '/grocerry/cart': (context) => CartPage(), 29 | AnimatedBottomBar.tag: (context) => AnimatedBottomBar(), 30 | EditNote.tag: (context) => EditNote(), 31 | }, 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/note_app/controller/notes_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_widgets/note_app/dto/notes_dto.dart'; 3 | import 'package:flutter_widgets/note_app/service/notes_service.dart'; 4 | 5 | class NotesController { 6 | NotesService _notesService; 7 | 8 | static final NotesController _singleton = NotesController._internal(); 9 | 10 | factory NotesController() { 11 | return _singleton; 12 | } 13 | 14 | NotesController._internal() { 15 | _notesService = NotesService(); 16 | } 17 | 18 | Future> getNotes() async { 19 | try { 20 | String response = await _notesService.getNotes(); 21 | debugPrint(response); 22 | return notesDtoFromJson(response); 23 | } catch (e) { 24 | throw e; 25 | } 26 | } 27 | 28 | Future deleteNote(String noteID) async { 29 | try { 30 | String response = await _notesService.deleteNote(noteID); 31 | debugPrint(response); 32 | return ''; 33 | } catch (e) { 34 | throw e; 35 | } 36 | } 37 | 38 | Future createNotes(String title, String content) async { 39 | try { 40 | Map map = { 41 | 'title': title, 42 | 'content': content, 43 | }; 44 | String response = await _notesService.createNote(map); 45 | debugPrint(response); 46 | return ''; 47 | } catch (e) { 48 | throw e; 49 | } 50 | } 51 | 52 | Future updateNote(String id, String title, String content) async { 53 | try { 54 | Map map = { 55 | 'title': title, 56 | 'content': content, 57 | }; 58 | String response = await _notesService.updateNote(id, map); 59 | debugPrint(response); 60 | return ''; 61 | } catch (e) { 62 | throw e; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/note_app/dto/notes_dto.dart: -------------------------------------------------------------------------------- 1 | // To parse this JSON data, do 2 | // 3 | // final notesDto = notesDtoFromJson(jsonString); 4 | 5 | import 'dart:convert'; 6 | 7 | List notesDtoFromJson(String str) => 8 | List.from(json.decode(str).map((x) => NotesDto.fromJson(x))); 9 | 10 | String notesDtoToJson(List data) => 11 | json.encode(List.from(data.map((x) => x.toJson()))); 12 | 13 | class NotesDto { 14 | String id; 15 | String title; 16 | String content; 17 | DateTime createdAt; 18 | DateTime updatedAt; 19 | int v; 20 | 21 | NotesDto({ 22 | this.id, 23 | this.title, 24 | this.content, 25 | this.createdAt, 26 | this.updatedAt, 27 | this.v, 28 | }); 29 | 30 | factory NotesDto.fromJson(Map json) => NotesDto( 31 | id: json["_id"] == null ? null : json["_id"], 32 | title: json["title"] == null ? null : json["title"], 33 | content: json["content"] == null ? null : json["content"], 34 | createdAt: json["createdAt"] == null 35 | ? null 36 | : DateTime.parse(json["createdAt"]), 37 | updatedAt: json["updatedAt"] == null 38 | ? null 39 | : DateTime.parse(json["updatedAt"]), 40 | v: json["__v"] == null ? null : json["__v"], 41 | ); 42 | 43 | Map toJson() => { 44 | "_id": id == null ? null : id, 45 | "title": title == null ? null : title, 46 | "content": content == null ? null : content, 47 | "createdAt": createdAt == null ? null : createdAt.toIso8601String(), 48 | "updatedAt": updatedAt == null ? null : updatedAt.toIso8601String(), 49 | "__v": v == null ? null : v, 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /lib/note_app/edit_note.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_widgets/note_app/controller/notes_controller.dart'; 4 | import 'package:flutter_widgets/note_app/dto/notes_dto.dart'; 5 | 6 | class EditNote extends StatefulWidget { 7 | static const tag = 'editNotes'; 8 | 9 | @override 10 | _EditNoteState createState() => _EditNoteState(); 11 | } 12 | 13 | class _EditNoteState extends State { 14 | NotesController _notesController; 15 | bool isLoading = false; 16 | bool isDeleting = false; 17 | EditNoteArgs args; 18 | 19 | TextEditingController _titleController = TextEditingController(); 20 | TextEditingController _contentController = TextEditingController(); 21 | 22 | @override 23 | void initState() { 24 | super.initState(); 25 | _notesController = NotesController(); 26 | Future.delayed(Duration.zero, () { 27 | if (args.isUpdate ?? false) { 28 | _titleController.text = args.note.title; 29 | _contentController.text = args.note.content; 30 | } 31 | }); 32 | } 33 | 34 | @override 35 | Widget build(BuildContext context) { 36 | args = ModalRoute.of(context).settings.arguments; 37 | return Scaffold( 38 | backgroundColor: Colors.white, 39 | appBar: AppBar( 40 | title: Text(''), 41 | backgroundColor: Colors.white, 42 | elevation: 0, 43 | leading: IconButton( 44 | icon: Icon(Icons.close), 45 | onPressed: () => Navigator.pop(context), 46 | ), 47 | actions: args.isUpdate 48 | ? [ 49 | !isDeleting 50 | ? IconButton( 51 | icon: Icon(Icons.delete_outline), 52 | onPressed: () { 53 | setState(() { 54 | isDeleting = true; 55 | }); 56 | _notesController 57 | .deleteNote(args.note.id) 58 | .then((data) { 59 | Navigator.pop(context); 60 | }); 61 | }, 62 | ) 63 | : IconButton( 64 | icon: Container( 65 | child: CircularProgressIndicator(), 66 | width: 24, 67 | height: 24, 68 | ), 69 | onPressed: () {}, 70 | ) 71 | ] 72 | : [], 73 | ), 74 | body: ListView( 75 | children: [ 76 | Container( 77 | padding: 78 | const EdgeInsets.only(left: 16, right: 16, top: 8, bottom: 8), 79 | child: TextField( 80 | controller: _titleController, 81 | maxLines: 5, 82 | minLines: 1, 83 | style: TextStyle( 84 | color: Colors.redAccent, 85 | fontSize: 30, 86 | ), 87 | decoration: InputDecoration.collapsed( 88 | hintText: 'Event Title', 89 | hintStyle: TextStyle( 90 | color: Colors.redAccent, 91 | fontSize: 30, 92 | ), 93 | ), 94 | ), 95 | ), 96 | Container( 97 | padding: const EdgeInsets.only( 98 | left: 16, 99 | right: 16, 100 | ), 101 | child: TextField( 102 | controller: _contentController, 103 | minLines: 1, 104 | maxLines: 100, 105 | style: TextStyle( 106 | fontSize: 18, 107 | ), 108 | decoration: InputDecoration.collapsed( 109 | hintText: 'Description', 110 | hintStyle: TextStyle( 111 | fontSize: 18, 112 | ), 113 | ), 114 | ), 115 | ) 116 | ], 117 | ), 118 | floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, 119 | floatingActionButton: InkWell( 120 | onTap: () { 121 | createNotes(); 122 | }, 123 | child: SafeArea( 124 | child: Container( 125 | alignment: Alignment.center, 126 | decoration: BoxDecoration( 127 | color: Colors.redAccent, 128 | borderRadius: BorderRadius.circular( 129 | 8, 130 | ), 131 | ), 132 | width: 150, 133 | height: kToolbarHeight, 134 | child: isLoading 135 | ? CircularProgressIndicator( 136 | valueColor: AlwaysStoppedAnimation(Colors.white), 137 | ) 138 | : Text( 139 | args.isUpdate ? 'UPDATE' : 'CREATE', 140 | style: TextStyle( 141 | fontSize: 24, 142 | color: Colors.white, 143 | ), 144 | ), 145 | ), 146 | ), 147 | ), 148 | ); 149 | } 150 | 151 | void createNotes() { 152 | FocusScope.of(context).requestFocus(FocusNode()); 153 | 154 | String title = _titleController.text; 155 | String content = _contentController.text; 156 | 157 | if (title.isEmpty || content.isEmpty) { 158 | showCupertinoDialog( 159 | context: context, 160 | builder: (context) { 161 | return CupertinoAlertDialog( 162 | content: Text('Please fill the title and content.'), 163 | actions: [ 164 | CupertinoButton( 165 | child: Text('Close'), 166 | onPressed: () => Navigator.pop(context), 167 | ), 168 | ], 169 | ); 170 | }); 171 | return; 172 | } else { 173 | if (!isLoading) { 174 | setState(() { 175 | isLoading = true; 176 | }); 177 | } 178 | 179 | if (!args.isUpdate) { 180 | _notesController 181 | .createNotes(title, content) 182 | .then((data) {}) 183 | .catchError((error) {}) 184 | .whenComplete(() { 185 | Navigator.pop(context); 186 | }); 187 | } else { 188 | _notesController 189 | .updateNote(args?.note?.id, title, content) 190 | .then((data) {}) 191 | .catchError((error) {}) 192 | .whenComplete(() { 193 | Navigator.pop(context); 194 | }); 195 | } 196 | } 197 | } 198 | } 199 | 200 | class EditNoteArgs { 201 | final bool isUpdate; 202 | final NotesDto note; 203 | 204 | EditNoteArgs(this.isUpdate, this.note); 205 | } 206 | -------------------------------------------------------------------------------- /lib/note_app/note_home.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; 3 | import 'package:flutter_widgets/note_app/controller/notes_controller.dart'; 4 | import 'package:flutter_widgets/note_app/dto/notes_dto.dart'; 5 | import 'package:flutter_widgets/note_app/edit_note.dart'; 6 | 7 | class NoteHome extends StatefulWidget { 8 | @override 9 | _NoteHomeState createState() => _NoteHomeState(); 10 | } 11 | 12 | class _NoteHomeState extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | debugPrint('CALLED'); 16 | return Theme( 17 | child: Scaffold( 18 | appBar: AppBar( 19 | title: Text('My Notes'), 20 | ), 21 | body: FutureBuilder( 22 | future: NotesController().getNotes(), 23 | builder: (context, AsyncSnapshot> snapshot) { 24 | if (snapshot.hasError) { 25 | return Center( 26 | child: Text( 27 | '${snapshot.error.toString()}', 28 | textAlign: TextAlign.center, 29 | ), 30 | ); 31 | } 32 | if (snapshot.hasData) { 33 | return StaggeredGridView.countBuilder( 34 | itemCount: snapshot.data.length, 35 | crossAxisCount: 4, 36 | itemBuilder: (context, index) { 37 | NotesDto note = snapshot.data[index]; 38 | return Card( 39 | child: InkWell( 40 | onLongPress: () { 41 | Navigator.pushNamed( 42 | context, 43 | EditNote.tag, 44 | arguments: EditNoteArgs(true, note), 45 | ); 46 | }, 47 | child: Container( 48 | padding: EdgeInsets.all(8), 49 | child: Column( 50 | crossAxisAlignment: CrossAxisAlignment.start, 51 | children: [ 52 | Padding( 53 | padding: 54 | const EdgeInsets.only(top: 4.0, bottom: 4.0), 55 | child: Text( 56 | note.title, 57 | style: TextStyle(fontSize: 18), 58 | ), 59 | ), 60 | Padding( 61 | padding: 62 | const EdgeInsets.only(top: 4.0, bottom: 4.0), 63 | child: Text( 64 | note.content, 65 | overflow: TextOverflow.ellipsis, 66 | maxLines: 10, 67 | ), 68 | ), 69 | ], 70 | ), 71 | ), 72 | ), 73 | ); 74 | }, 75 | staggeredTileBuilder: (index) => StaggeredTile.fit( 76 | 2, 77 | ), 78 | mainAxisSpacing: 2.0, 79 | crossAxisSpacing: 2.0, 80 | ); 81 | } 82 | return Center( 83 | child: CircularProgressIndicator(), 84 | ); 85 | }, 86 | ), 87 | floatingActionButton: FloatingActionButton( 88 | onPressed: () async { 89 | await Navigator.pushNamed( 90 | context, 91 | EditNote.tag, 92 | arguments: EditNoteArgs(false, null), 93 | ); 94 | }, 95 | child: Icon(Icons.edit), 96 | ), 97 | ), 98 | data: ThemeData( 99 | primaryColor: Colors.redAccent, 100 | floatingActionButtonTheme: FloatingActionButtonThemeData( 101 | backgroundColor: Colors.red, 102 | ), 103 | ), 104 | ); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /lib/note_app/service/notes_service.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:convert'; 3 | import 'dart:io'; 4 | 5 | import 'package:dio/dio.dart'; 6 | import 'package:flutter/material.dart'; 7 | 8 | class NotesService { 9 | Dio _dio; 10 | static const _baseUrl = 'http://localhost:3000'; 11 | 12 | static final NotesService _singleton = NotesService._internal(); 13 | 14 | factory NotesService() { 15 | return _singleton; 16 | } 17 | 18 | NotesService._internal() { 19 | _dio = Dio(); 20 | } 21 | 22 | Future getNotes() async { 23 | Response response; 24 | try { 25 | response = await _dio.get("$_baseUrl/notes"); 26 | debugPrint(response.statusMessage); 27 | 28 | return json.encode(response.data); 29 | } catch (e) { 30 | throw e; 31 | } 32 | } 33 | 34 | Future deleteNote(String noteID) async { 35 | Response response; 36 | try { 37 | response = await _dio.delete("$_baseUrl/notes/$noteID"); 38 | debugPrint(response.statusMessage); 39 | 40 | return json.encode(response.data); 41 | } catch (e) { 42 | throw e; 43 | } 44 | } 45 | 46 | Future updateNote(String noteId, Map map) async { 47 | Response response; 48 | response = await _dio.put("$_baseUrl/notes/$noteId", data: map); 49 | debugPrint(response.statusMessage); 50 | 51 | return response.data.toString(); 52 | } 53 | 54 | Future createNote(Map map) async { 55 | Response response; 56 | response = await _dio.post( 57 | "$_baseUrl/notes", 58 | data: map, 59 | options: Options( 60 | headers: {HttpHeaders.contentTypeHeader: 'application/json'}, 61 | ), 62 | ); 63 | debugPrint(response.statusMessage); 64 | 65 | return response.data.toString(); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /lib/note_app/utility.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/pages/buttons.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ButtonPages extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Scaffold( 7 | appBar: AppBar( 8 | title: Text('Button Example'), 9 | actions: [ 10 | Icon(Icons.new_releases), 11 | Container( 12 | margin: EdgeInsets.all(12), 13 | decoration: BoxDecoration( 14 | color: Colors.white, 15 | shape: BoxShape.circle 16 | ), 17 | padding: EdgeInsets.all(4), 18 | child: Container( 19 | width: 24, 20 | height: 24, 21 | decoration: BoxDecoration( 22 | color: Colors.white, 23 | shape: BoxShape.circle, 24 | image: DecorationImage( 25 | image: NetworkImage( 26 | 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTI5TDjHkXbNGlduL7AEVMwGn4bc-QosNt7IRcp9fBJ4qN6N0pmHg', 27 | ), 28 | fit: BoxFit.cover, 29 | ), 30 | // borderRadius: BorderRadius.circular(45) 31 | ), 32 | ), 33 | ) 34 | ], 35 | ), 36 | body: Container( 37 | width: MediaQuery.of(context).size.width, 38 | child: Column( 39 | crossAxisAlignment: CrossAxisAlignment.center, 40 | mainAxisSize: MainAxisSize.max, 41 | mainAxisAlignment: MainAxisAlignment.center, 42 | children: [ 43 | Text( 44 | 'Icon Buttons', 45 | ), 46 | RaisedButton( 47 | onPressed: () {}, 48 | child: Text('Normal Raised Button'), 49 | ), 50 | RaisedButton( 51 | color: Colors.blueGrey, 52 | onPressed: () {}, 53 | child: Text( 54 | 'Colured Raised Button', 55 | style: TextStyle(color: Colors.white), 56 | ), 57 | ), 58 | RaisedButton( 59 | color: Colors.green, 60 | shape: RoundedRectangleBorder( 61 | borderRadius: BorderRadius.all( 62 | Radius.circular(45), 63 | ), 64 | ), 65 | onPressed: () {}, 66 | child: Text( 67 | 'Rounded Raised Button', 68 | style: TextStyle(color: Colors.white), 69 | ), 70 | ), 71 | RaisedButton( 72 | elevation: 15, 73 | color: Colors.green, 74 | highlightElevation: 30, 75 | onPressed: () {}, 76 | onHighlightChanged: (value) { 77 | print(value); 78 | }, 79 | child: Text( 80 | 'Rounded Raised Button', 81 | style: TextStyle(color: Colors.white), 82 | ), 83 | ), 84 | FlatButton( 85 | onPressed: () {}, 86 | child: Text( 87 | 'Flat Button', 88 | ), 89 | ), 90 | FlatButton( 91 | color: Colors.deepPurple, 92 | onPressed: () {}, 93 | child: Text( 94 | 'Colored Flat Button', 95 | style: TextStyle( 96 | color: Colors.white, 97 | ), 98 | ), 99 | ), 100 | FlatButton( 101 | color: Colors.deepPurple, 102 | onPressed: () {}, 103 | shape: RoundedRectangleBorder( 104 | borderRadius: BorderRadius.all( 105 | Radius.circular(45), 106 | ), 107 | ), 108 | child: Text( 109 | 'Rounded Flat Button', 110 | style: TextStyle( 111 | color: Colors.white, 112 | ), 113 | ), 114 | ), 115 | FlatButton( 116 | splashColor: Colors.deepOrange, 117 | shape: OutlineInputBorder( 118 | borderSide: BorderSide(color: Colors.blue)), 119 | highlightColor: Colors.yellowAccent, 120 | // color: Colors.deepPurple, 121 | onPressed: () {}, 122 | child: Text( 123 | 'Flat Button', 124 | style: TextStyle( 125 | color: Colors.blue, 126 | ), 127 | ), 128 | ), 129 | ElevatedButton( 130 | onPressed: () {}, 131 | // color: Colors.red, 132 | child: Text('data'), 133 | ), 134 | Text( 135 | 'Icon Buttons', 136 | ), 137 | IconButton( 138 | color: Colors.red, 139 | onPressed: () {}, 140 | icon: Icon(Icons.new_releases), 141 | ), 142 | IconButton( 143 | splashColor: Colors.teal, 144 | color: Colors.black, 145 | onPressed: () {}, 146 | icon: Icon(Icons.no_encryption), 147 | ) 148 | ], 149 | ), 150 | ), 151 | ); 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /lib/pages/floatin_tuto.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math; 3 | 4 | class FloatingPage extends StatefulWidget { 5 | @override 6 | State createState() { 7 | return _FloatingPageState(); 8 | } 9 | } 10 | 11 | class _FloatingPageState extends State 12 | with TickerProviderStateMixin { 13 | AnimationController _controller; 14 | 15 | @override 16 | void initState() { 17 | _controller = AnimationController( 18 | vsync: this, 19 | duration: Duration( 20 | milliseconds: 200, 21 | ), 22 | ); 23 | super.initState(); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Scaffold( 29 | appBar: AppBar( 30 | title: Text('Floating Action Button'), 31 | ), 32 | floatingActionButton: Column( 33 | // crossAxisAlignment: CrossAxisAlignment.baseline, 34 | mainAxisAlignment: MainAxisAlignment.center, 35 | mainAxisSize: MainAxisSize.min, 36 | children: [ 37 | ScaleTransition( 38 | scale: CurvedAnimation( 39 | parent: _controller, 40 | curve: Interval(0.0, 1.0, curve: Curves.easeOut)), 41 | child: Container( 42 | margin: EdgeInsets.all(8), 43 | child: FloatingActionButton( 44 | onPressed: null, 45 | backgroundColor: Colors.white, 46 | mini: true, 47 | child: Icon(Icons.phone, color: Colors.blue,), 48 | ), 49 | ), 50 | ), 51 | ScaleTransition( 52 | scale: CurvedAnimation( 53 | parent: _controller, 54 | curve: Interval(0.0, 0.5, curve: Curves.easeOut)), 55 | child: Container( 56 | margin: EdgeInsets.all(8), 57 | child: FloatingActionButton( 58 | onPressed: null, 59 | backgroundColor: Colors.white, 60 | mini: true, 61 | child: Icon(Icons.email, color: Colors.red,), 62 | ), 63 | ), 64 | ), 65 | Container( 66 | margin: EdgeInsets.all(8), 67 | child: FloatingActionButton( 68 | onPressed: () { 69 | if (_controller.isDismissed) { 70 | _controller.forward(); 71 | } else { 72 | _controller.reverse(); 73 | } 74 | }, 75 | backgroundColor: Colors.purple, 76 | child: AnimatedBuilder( 77 | animation: _controller, 78 | builder: (context, widget) { 79 | return Transform( 80 | alignment: FractionalOffset.center, 81 | transform: Matrix4.rotationZ(_controller.value * 1 * math.pi), 82 | child: Icon( _controller.isDismissed? Icons.edit : Icons.close), 83 | ); 84 | })), 85 | ), 86 | ], 87 | ), 88 | ); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /lib/pages/floating_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math; 3 | 4 | class FloatingPage extends StatefulWidget { 5 | @override 6 | State createState() { 7 | return _FloatingPageState(); 8 | } 9 | } 10 | 11 | class _FloatingPageState extends State 12 | with TickerProviderStateMixin { 13 | AnimationController _controller; 14 | 15 | @override 16 | void initState() { 17 | _controller = AnimationController( 18 | vsync: this, 19 | duration: Duration( 20 | milliseconds: 200, 21 | ), 22 | ); 23 | super.initState(); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Scaffold( 29 | appBar: AppBar( 30 | title: Text('Floating Action Button'), 31 | ), 32 | floatingActionButton: Column( 33 | // crossAxisAlignment: CrossAxisAlignment.baseline, 34 | mainAxisAlignment: MainAxisAlignment.end, 35 | mainAxisSize: MainAxisSize.min, 36 | children: [ 37 | ScaleTransition( 38 | scale: CurvedAnimation( 39 | parent: _controller, 40 | curve: Interval(0.0, 1.0, curve: Curves.easeOut)), 41 | child: Row( 42 | mainAxisAlignment: MainAxisAlignment.end, 43 | mainAxisSize: MainAxisSize.min, 44 | children: [ 45 | Text('Inborwrerx'), 46 | Container( 47 | margin: EdgeInsets.all(8), 48 | child: FloatingActionButton( 49 | onPressed: null, 50 | backgroundColor: Colors.white, 51 | mini: true, 52 | child: Icon( 53 | Icons.email, 54 | color: Colors.red, 55 | ), 56 | ), 57 | ), 58 | ], 59 | )), 60 | ScaleTransition( 61 | scale: CurvedAnimation( 62 | parent: _controller, 63 | curve: Interval(0.0, 0.5, curve: Curves.easeOut)), 64 | child: Row( 65 | mainAxisAlignment: MainAxisAlignment.end, 66 | mainAxisSize: MainAxisSize.min, 67 | children: [ 68 | Text('Inborwrerx'), 69 | Container( 70 | margin: EdgeInsets.all(8), 71 | child: FloatingActionButton( 72 | onPressed: null, 73 | backgroundColor: Colors.white, 74 | mini: true, 75 | child: Icon( 76 | Icons.email, 77 | color: Colors.red, 78 | ), 79 | ), 80 | ), 81 | ], 82 | )), 83 | Container( 84 | margin: EdgeInsets.all(8), 85 | child: FloatingActionButton( 86 | onPressed: () { 87 | if (_controller.isDismissed) { 88 | _controller.forward(); 89 | } else { 90 | _controller.reverse(); 91 | } 92 | }, 93 | backgroundColor: Colors.purple, 94 | child: AnimatedBuilder( 95 | animation: _controller, 96 | builder: (context, widget) { 97 | return Transform( 98 | alignment: FractionalOffset.center, 99 | transform: 100 | Matrix4.rotationZ(_controller.value * 1 * math.pi), 101 | child: Icon( 102 | _controller.isDismissed ? Icons.edit : Icons.close), 103 | ); 104 | })), 105 | ), 106 | ], 107 | ), 108 | ); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /lib/pages/snackbar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | void main() => runApp(SnackBarDemo()); 4 | 5 | class SnackBarDemo extends StatelessWidget { 6 | @override 7 | Widget build(BuildContext context) { 8 | return MaterialApp( 9 | title: 'SnackBar Demo', 10 | home: Scaffold( 11 | appBar: AppBar( 12 | title: Text('SnackBar Demo'), 13 | ), 14 | body: SnackBarPage(), 15 | ), 16 | ); 17 | } 18 | } 19 | 20 | class SnackBarPage extends StatelessWidget { 21 | @override 22 | Widget build(BuildContext context) { 23 | return Center( 24 | child: RaisedButton( 25 | onPressed: () { 26 | final snackBar = SnackBar( 27 | content: Text('Yay! A SnackBar!'), 28 | action: SnackBarAction( 29 | label: 'Undo', 30 | onPressed: () { 31 | // Some code to undo the change! 32 | }, 33 | ), 34 | ); 35 | 36 | // Find the Scaffold in the Widget tree and use it to show a SnackBar! 37 | Scaffold.of(context).showSnackBar(snackBar); 38 | }, 39 | child: Text('Show SnackBar'), 40 | ), 41 | ); 42 | } 43 | } -------------------------------------------------------------------------------- /lib/pages/tabs.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class TabsPage extends StatelessWidget { 5 | @override 6 | Widget build(BuildContext context) { 7 | return DefaultTabController( 8 | // initialIndex: 1, 9 | length: 3, 10 | child: Scaffold( 11 | appBar: AppBar( 12 | title: Text('Tab Example'), 13 | bottom: TabBar( 14 | tabs: [ 15 | Text('Image', ), 16 | Icon(Icons.offline_pin), 17 | Text('Text', style: TextStyle( 18 | fontSize: 18, 19 | color: Colors.yellow 20 | ),), 21 | ], 22 | ), 23 | ), 24 | body: TabBarView( 25 | children: [ 26 | Center( 27 | child: Image.network('your image'), 28 | ), 29 | Center( 30 | child: Icon(Icons.youtube_searched_for), 31 | ),Center( 32 | child: Text('Text with style'), 33 | ) 34 | ], 35 | 36 | ) 37 | ), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/utils/cart_icons_icons.dart: -------------------------------------------------------------------------------- 1 | /// Flutter icons CartIcons 2 | /// Copyright (C) 2019 by original authors @ fluttericon.com, fontello.com 3 | /// This font was generated by FlutterIcon.com, which is derived from Fontello. 4 | /// 5 | /// To use this font, place it in your fonts/ directory and include the 6 | /// following in your pubspec.yaml 7 | /// 8 | /// flutter: 9 | /// fonts: 10 | /// - family: CartIcons 11 | /// fonts: 12 | /// - asset: fonts/CartIcons.ttf 13 | /// 14 | /// 15 | /// 16 | import 'package:flutter/widgets.dart'; 17 | 18 | class CartIcons { 19 | CartIcons._(); 20 | 21 | static const _kFontFam = 'CartIcons'; 22 | 23 | static const IconData grocery = const IconData(0xe800, fontFamily: _kFontFam); 24 | static const IconData account = const IconData(0xe808, fontFamily: _kFontFam); 25 | static const IconData bread = const IconData(0xe809, fontFamily: _kFontFam); 26 | static const IconData cart = const IconData(0xe80a, fontFamily: _kFontFam); 27 | static const IconData favourites = const IconData(0xe80b, fontFamily: _kFontFam); 28 | static const IconData home = const IconData(0xe80c, fontFamily: _kFontFam); 29 | static const IconData house_hold = const IconData(0xe80d, fontFamily: _kFontFam); 30 | static const IconData liquor = const IconData(0xe80e, fontFamily: _kFontFam); 31 | static const IconData more = const IconData(0xe80f, fontFamily: _kFontFam); 32 | } 33 | -------------------------------------------------------------------------------- /lib/wallpaper_kit/models/colllection_list_model.dart: -------------------------------------------------------------------------------- 1 | // To parse this JSON data, do 2 | // 3 | // final collectionListModel = collectionListModelFromJson(jsonString); 4 | 5 | import 'dart:convert'; 6 | 7 | List collectionListModelFromJson(String str) => new List.from(json.decode(str).map((x) => CollectionListModel.fromJson(x))); 8 | 9 | String collectionListModelToJson(List data) => json.encode(new List.from(data.map((x) => x.toJson()))); 10 | 11 | class CollectionListModel { 12 | int id; 13 | String title; 14 | String description; 15 | DateTime publishedAt; 16 | DateTime updatedAt; 17 | bool curated; 18 | bool featured; 19 | int totalPhotos; 20 | bool private; 21 | String shareKey; 22 | List tags; 23 | CollectionListModelLinks links; 24 | User user; 25 | CoverPhoto coverPhoto; 26 | List previewPhotos; 27 | 28 | CollectionListModel({ 29 | this.id, 30 | this.title, 31 | this.description, 32 | this.publishedAt, 33 | this.updatedAt, 34 | this.curated, 35 | this.featured, 36 | this.totalPhotos, 37 | this.private, 38 | this.shareKey, 39 | this.tags, 40 | this.links, 41 | this.user, 42 | this.coverPhoto, 43 | this.previewPhotos, 44 | }); 45 | 46 | factory CollectionListModel.fromJson(Map json) => new CollectionListModel( 47 | id: json["id"] == null ? null : json["id"], 48 | title: json["title"] == null ? null : json["title"], 49 | description: json["description"] == null ? null : json["description"], 50 | publishedAt: json["published_at"] == null ? null : DateTime.parse(json["published_at"]), 51 | updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), 52 | curated: json["curated"] == null ? null : json["curated"], 53 | featured: json["featured"] == null ? null : json["featured"], 54 | totalPhotos: json["total_photos"] == null ? null : json["total_photos"], 55 | private: json["private"] == null ? null : json["private"], 56 | shareKey: json["share_key"] == null ? null : json["share_key"], 57 | tags: json["tags"] == null ? null : new List.from(json["tags"].map((x) => Tag.fromJson(x))), 58 | links: json["links"] == null ? null : CollectionListModelLinks.fromJson(json["links"]), 59 | user: json["user"] == null ? null : User.fromJson(json["user"]), 60 | coverPhoto: json["cover_photo"] == null ? null : CoverPhoto.fromJson(json["cover_photo"]), 61 | previewPhotos: json["preview_photos"] == null ? null : new List.from(json["preview_photos"].map((x) => PreviewPhoto.fromJson(x))), 62 | ); 63 | 64 | Map toJson() => { 65 | "id": id == null ? null : id, 66 | "title": title == null ? null : title, 67 | "description": description == null ? null : description, 68 | "published_at": publishedAt == null ? null : publishedAt.toIso8601String(), 69 | "updated_at": updatedAt == null ? null : updatedAt.toIso8601String(), 70 | "curated": curated == null ? null : curated, 71 | "featured": featured == null ? null : featured, 72 | "total_photos": totalPhotos == null ? null : totalPhotos, 73 | "private": private == null ? null : private, 74 | "share_key": shareKey == null ? null : shareKey, 75 | "tags": tags == null ? null : new List.from(tags.map((x) => x.toJson())), 76 | "links": links == null ? null : links.toJson(), 77 | "user": user == null ? null : user.toJson(), 78 | "cover_photo": coverPhoto == null ? null : coverPhoto.toJson(), 79 | "preview_photos": previewPhotos == null ? null : new List.from(previewPhotos.map((x) => x.toJson())), 80 | }; 81 | } 82 | 83 | class CoverPhoto { 84 | String id; 85 | DateTime createdAt; 86 | DateTime updatedAt; 87 | int width; 88 | int height; 89 | String color; 90 | String description; 91 | String altDescription; 92 | Urls urls; 93 | CoverPhotoLinks links; 94 | List categories; 95 | int likes; 96 | bool likedByUser; 97 | List currentUserCollections; 98 | User user; 99 | 100 | CoverPhoto({ 101 | this.id, 102 | this.createdAt, 103 | this.updatedAt, 104 | this.width, 105 | this.height, 106 | this.color, 107 | this.description, 108 | this.altDescription, 109 | this.urls, 110 | this.links, 111 | this.categories, 112 | this.likes, 113 | this.likedByUser, 114 | this.currentUserCollections, 115 | this.user, 116 | }); 117 | 118 | factory CoverPhoto.fromJson(Map json) => new CoverPhoto( 119 | id: json["id"] == null ? null : json["id"], 120 | createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]), 121 | updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), 122 | width: json["width"] == null ? null : json["width"], 123 | height: json["height"] == null ? null : json["height"], 124 | color: json["color"] == null ? null : json["color"], 125 | description: json["description"] == null ? null : json["description"], 126 | altDescription: json["alt_description"] == null ? null : json["alt_description"], 127 | urls: json["urls"] == null ? null : Urls.fromJson(json["urls"]), 128 | links: json["links"] == null ? null : CoverPhotoLinks.fromJson(json["links"]), 129 | categories: json["categories"] == null ? null : new List.from(json["categories"].map((x) => x)), 130 | likes: json["likes"] == null ? null : json["likes"], 131 | likedByUser: json["liked_by_user"] == null ? null : json["liked_by_user"], 132 | currentUserCollections: json["current_user_collections"] == null ? null : new List.from(json["current_user_collections"].map((x) => x)), 133 | user: json["user"] == null ? null : User.fromJson(json["user"]), 134 | ); 135 | 136 | Map toJson() => { 137 | "id": id == null ? null : id, 138 | "created_at": createdAt == null ? null : createdAt.toIso8601String(), 139 | "updated_at": updatedAt == null ? null : updatedAt.toIso8601String(), 140 | "width": width == null ? null : width, 141 | "height": height == null ? null : height, 142 | "color": color == null ? null : color, 143 | "description": description == null ? null : description, 144 | "alt_description": altDescription == null ? null : altDescription, 145 | "urls": urls == null ? null : urls.toJson(), 146 | "links": links == null ? null : links.toJson(), 147 | "categories": categories == null ? null : new List.from(categories.map((x) => x)), 148 | "likes": likes == null ? null : likes, 149 | "liked_by_user": likedByUser == null ? null : likedByUser, 150 | "current_user_collections": currentUserCollections == null ? null : new List.from(currentUserCollections.map((x) => x)), 151 | "user": user == null ? null : user.toJson(), 152 | }; 153 | } 154 | 155 | class CoverPhotoLinks { 156 | String self; 157 | String html; 158 | String download; 159 | String downloadLocation; 160 | 161 | CoverPhotoLinks({ 162 | this.self, 163 | this.html, 164 | this.download, 165 | this.downloadLocation, 166 | }); 167 | 168 | factory CoverPhotoLinks.fromJson(Map json) => new CoverPhotoLinks( 169 | self: json["self"] == null ? null : json["self"], 170 | html: json["html"] == null ? null : json["html"], 171 | download: json["download"] == null ? null : json["download"], 172 | downloadLocation: json["download_location"] == null ? null : json["download_location"], 173 | ); 174 | 175 | Map toJson() => { 176 | "self": self == null ? null : self, 177 | "html": html == null ? null : html, 178 | "download": download == null ? null : download, 179 | "download_location": downloadLocation == null ? null : downloadLocation, 180 | }; 181 | } 182 | 183 | class Urls { 184 | String raw; 185 | String full; 186 | String regular; 187 | String small; 188 | String thumb; 189 | 190 | Urls({ 191 | this.raw, 192 | this.full, 193 | this.regular, 194 | this.small, 195 | this.thumb, 196 | }); 197 | 198 | factory Urls.fromJson(Map json) => new Urls( 199 | raw: json["raw"] == null ? null : json["raw"], 200 | full: json["full"] == null ? null : json["full"], 201 | regular: json["regular"] == null ? null : json["regular"], 202 | small: json["small"] == null ? null : json["small"], 203 | thumb: json["thumb"] == null ? null : json["thumb"], 204 | ); 205 | 206 | Map toJson() => { 207 | "raw": raw == null ? null : raw, 208 | "full": full == null ? null : full, 209 | "regular": regular == null ? null : regular, 210 | "small": small == null ? null : small, 211 | "thumb": thumb == null ? null : thumb, 212 | }; 213 | } 214 | 215 | class User { 216 | String id; 217 | DateTime updatedAt; 218 | String username; 219 | String name; 220 | String firstName; 221 | String lastName; 222 | String twitterUsername; 223 | String portfolioUrl; 224 | String bio; 225 | String location; 226 | UserLinks links; 227 | ProfileImage profileImage; 228 | String instagramUsername; 229 | int totalCollections; 230 | int totalLikes; 231 | int totalPhotos; 232 | bool acceptedTos; 233 | 234 | User({ 235 | this.id, 236 | this.updatedAt, 237 | this.username, 238 | this.name, 239 | this.firstName, 240 | this.lastName, 241 | this.twitterUsername, 242 | this.portfolioUrl, 243 | this.bio, 244 | this.location, 245 | this.links, 246 | this.profileImage, 247 | this.instagramUsername, 248 | this.totalCollections, 249 | this.totalLikes, 250 | this.totalPhotos, 251 | this.acceptedTos, 252 | }); 253 | 254 | factory User.fromJson(Map json) => new User( 255 | id: json["id"] == null ? null : json["id"], 256 | updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), 257 | username: json["username"] == null ? null : json["username"], 258 | name: json["name"] == null ? null : json["name"], 259 | firstName: json["first_name"] == null ? null : json["first_name"], 260 | lastName: json["last_name"] == null ? null : json["last_name"], 261 | twitterUsername: json["twitter_username"] == null ? null : json["twitter_username"], 262 | portfolioUrl: json["portfolio_url"] == null ? null : json["portfolio_url"], 263 | bio: json["bio"] == null ? null : json["bio"], 264 | location: json["location"] == null ? null : json["location"], 265 | links: json["links"] == null ? null : UserLinks.fromJson(json["links"]), 266 | profileImage: json["profile_image"] == null ? null : ProfileImage.fromJson(json["profile_image"]), 267 | instagramUsername: json["instagram_username"] == null ? null : json["instagram_username"], 268 | totalCollections: json["total_collections"] == null ? null : json["total_collections"], 269 | totalLikes: json["total_likes"] == null ? null : json["total_likes"], 270 | totalPhotos: json["total_photos"] == null ? null : json["total_photos"], 271 | acceptedTos: json["accepted_tos"] == null ? null : json["accepted_tos"], 272 | ); 273 | 274 | Map toJson() => { 275 | "id": id == null ? null : id, 276 | "updated_at": updatedAt == null ? null : updatedAt.toIso8601String(), 277 | "username": username == null ? null : username, 278 | "name": name == null ? null : name, 279 | "first_name": firstName == null ? null : firstName, 280 | "last_name": lastName == null ? null : lastName, 281 | "twitter_username": twitterUsername == null ? null : twitterUsername, 282 | "portfolio_url": portfolioUrl == null ? null : portfolioUrl, 283 | "bio": bio == null ? null : bio, 284 | "location": location == null ? null : location, 285 | "links": links == null ? null : links.toJson(), 286 | "profile_image": profileImage == null ? null : profileImage.toJson(), 287 | "instagram_username": instagramUsername == null ? null : instagramUsername, 288 | "total_collections": totalCollections == null ? null : totalCollections, 289 | "total_likes": totalLikes == null ? null : totalLikes, 290 | "total_photos": totalPhotos == null ? null : totalPhotos, 291 | "accepted_tos": acceptedTos == null ? null : acceptedTos, 292 | }; 293 | } 294 | 295 | class UserLinks { 296 | String self; 297 | String html; 298 | String photos; 299 | String likes; 300 | String portfolio; 301 | String following; 302 | String followers; 303 | 304 | UserLinks({ 305 | this.self, 306 | this.html, 307 | this.photos, 308 | this.likes, 309 | this.portfolio, 310 | this.following, 311 | this.followers, 312 | }); 313 | 314 | factory UserLinks.fromJson(Map json) => new UserLinks( 315 | self: json["self"] == null ? null : json["self"], 316 | html: json["html"] == null ? null : json["html"], 317 | photos: json["photos"] == null ? null : json["photos"], 318 | likes: json["likes"] == null ? null : json["likes"], 319 | portfolio: json["portfolio"] == null ? null : json["portfolio"], 320 | following: json["following"] == null ? null : json["following"], 321 | followers: json["followers"] == null ? null : json["followers"], 322 | ); 323 | 324 | Map toJson() => { 325 | "self": self == null ? null : self, 326 | "html": html == null ? null : html, 327 | "photos": photos == null ? null : photos, 328 | "likes": likes == null ? null : likes, 329 | "portfolio": portfolio == null ? null : portfolio, 330 | "following": following == null ? null : following, 331 | "followers": followers == null ? null : followers, 332 | }; 333 | } 334 | 335 | class ProfileImage { 336 | String small; 337 | String medium; 338 | String large; 339 | 340 | ProfileImage({ 341 | this.small, 342 | this.medium, 343 | this.large, 344 | }); 345 | 346 | factory ProfileImage.fromJson(Map json) => new ProfileImage( 347 | small: json["small"] == null ? null : json["small"], 348 | medium: json["medium"] == null ? null : json["medium"], 349 | large: json["large"] == null ? null : json["large"], 350 | ); 351 | 352 | Map toJson() => { 353 | "small": small == null ? null : small, 354 | "medium": medium == null ? null : medium, 355 | "large": large == null ? null : large, 356 | }; 357 | } 358 | 359 | class CollectionListModelLinks { 360 | String self; 361 | String html; 362 | String photos; 363 | String related; 364 | 365 | CollectionListModelLinks({ 366 | this.self, 367 | this.html, 368 | this.photos, 369 | this.related, 370 | }); 371 | 372 | factory CollectionListModelLinks.fromJson(Map json) => new CollectionListModelLinks( 373 | self: json["self"] == null ? null : json["self"], 374 | html: json["html"] == null ? null : json["html"], 375 | photos: json["photos"] == null ? null : json["photos"], 376 | related: json["related"] == null ? null : json["related"], 377 | ); 378 | 379 | Map toJson() => { 380 | "self": self == null ? null : self, 381 | "html": html == null ? null : html, 382 | "photos": photos == null ? null : photos, 383 | "related": related == null ? null : related, 384 | }; 385 | } 386 | 387 | class PreviewPhoto { 388 | String id; 389 | Urls urls; 390 | 391 | PreviewPhoto({ 392 | this.id, 393 | this.urls, 394 | }); 395 | 396 | factory PreviewPhoto.fromJson(Map json) => new PreviewPhoto( 397 | id: json["id"] == null ? null : json["id"], 398 | urls: json["urls"] == null ? null : Urls.fromJson(json["urls"]), 399 | ); 400 | 401 | Map toJson() => { 402 | "id": id == null ? null : id, 403 | "urls": urls == null ? null : urls.toJson(), 404 | }; 405 | } 406 | 407 | class Tag { 408 | String title; 409 | 410 | Tag({ 411 | this.title, 412 | }); 413 | 414 | factory Tag.fromJson(Map json) => new Tag( 415 | title: json["title"] == null ? null : json["title"], 416 | ); 417 | 418 | Map toJson() => { 419 | "title": title == null ? null : title, 420 | }; 421 | } 422 | -------------------------------------------------------------------------------- /lib/wallpaper_kit/models/images_list_model.dart: -------------------------------------------------------------------------------- 1 | // To parse this JSON data, do 2 | // 3 | // final imagesListModel = imagesListModelFromJson(jsonString); 4 | 5 | import 'dart:convert'; 6 | 7 | ImagesListModel imagesListModelFromJson(String str) => ImagesListModel.fromJson(json.decode(str)); 8 | 9 | String imagesListModelToJson(ImagesListModel data) => json.encode(data.toJson()); 10 | 11 | class ImagesListModel { 12 | int total; 13 | int totalPages; 14 | List results; 15 | 16 | ImagesListModel({ 17 | this.total, 18 | this.totalPages, 19 | this.results, 20 | }); 21 | 22 | factory ImagesListModel.fromJson(Map json) => new ImagesListModel( 23 | total: json["total"] == null ? null : json["total"], 24 | totalPages: json["total_pages"] == null ? null : json["total_pages"], 25 | results: json["results"] == null ? null : new List.from(json["results"].map((x) => Result.fromJson(x))), 26 | ); 27 | 28 | Map toJson() => { 29 | "total": total == null ? null : total, 30 | "total_pages": totalPages == null ? null : totalPages, 31 | "results": results == null ? null : new List.from(results.map((x) => x.toJson())), 32 | }; 33 | } 34 | 35 | class Result { 36 | String id; 37 | DateTime createdAt; 38 | DateTime updatedAt; 39 | int width; 40 | int height; 41 | String color; 42 | String description; 43 | String altDescription; 44 | Urls urls; 45 | ResultLinks links; 46 | List categories; 47 | int likes; 48 | bool likedByUser; 49 | List currentUserCollections; 50 | User user; 51 | List tags; 52 | 53 | Result({ 54 | this.id, 55 | this.createdAt, 56 | this.updatedAt, 57 | this.width, 58 | this.height, 59 | this.color, 60 | this.description, 61 | this.altDescription, 62 | this.urls, 63 | this.links, 64 | this.categories, 65 | this.likes, 66 | this.likedByUser, 67 | this.currentUserCollections, 68 | this.user, 69 | this.tags, 70 | }); 71 | 72 | factory Result.fromJson(Map json) => new Result( 73 | id: json["id"] == null ? null : json["id"], 74 | createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]), 75 | updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), 76 | width: json["width"] == null ? null : json["width"], 77 | height: json["height"] == null ? null : json["height"], 78 | color: json["color"] == null ? null : json["color"], 79 | description: json["description"] == null ? null : json["description"], 80 | altDescription: json["alt_description"] == null ? null : json["alt_description"], 81 | urls: json["urls"] == null ? null : Urls.fromJson(json["urls"]), 82 | links: json["links"] == null ? null : ResultLinks.fromJson(json["links"]), 83 | categories: json["categories"] == null ? null : new List.from(json["categories"].map((x) => x)), 84 | likes: json["likes"] == null ? null : json["likes"], 85 | likedByUser: json["liked_by_user"] == null ? null : json["liked_by_user"], 86 | currentUserCollections: json["current_user_collections"] == null ? null : new List.from(json["current_user_collections"].map((x) => x)), 87 | user: json["user"] == null ? null : User.fromJson(json["user"]), 88 | tags: json["tags"] == null ? null : new List.from(json["tags"].map((x) => Tag.fromJson(x))), 89 | ); 90 | 91 | Map toJson() => { 92 | "id": id == null ? null : id, 93 | "created_at": createdAt == null ? null : createdAt.toIso8601String(), 94 | "updated_at": updatedAt == null ? null : updatedAt.toIso8601String(), 95 | "width": width == null ? null : width, 96 | "height": height == null ? null : height, 97 | "color": color == null ? null : color, 98 | "description": description == null ? null : description, 99 | "alt_description": altDescription == null ? null : altDescription, 100 | "urls": urls == null ? null : urls.toJson(), 101 | "links": links == null ? null : links.toJson(), 102 | "categories": categories == null ? null : new List.from(categories.map((x) => x)), 103 | "likes": likes == null ? null : likes, 104 | "liked_by_user": likedByUser == null ? null : likedByUser, 105 | "current_user_collections": currentUserCollections == null ? null : new List.from(currentUserCollections.map((x) => x)), 106 | "user": user == null ? null : user.toJson(), 107 | "tags": tags == null ? null : new List.from(tags.map((x) => x.toJson())), 108 | }; 109 | } 110 | 111 | class ResultLinks { 112 | String self; 113 | String html; 114 | String download; 115 | String downloadLocation; 116 | 117 | ResultLinks({ 118 | this.self, 119 | this.html, 120 | this.download, 121 | this.downloadLocation, 122 | }); 123 | 124 | factory ResultLinks.fromJson(Map json) => new ResultLinks( 125 | self: json["self"] == null ? null : json["self"], 126 | html: json["html"] == null ? null : json["html"], 127 | download: json["download"] == null ? null : json["download"], 128 | downloadLocation: json["download_location"] == null ? null : json["download_location"], 129 | ); 130 | 131 | Map toJson() => { 132 | "self": self == null ? null : self, 133 | "html": html == null ? null : html, 134 | "download": download == null ? null : download, 135 | "download_location": downloadLocation == null ? null : downloadLocation, 136 | }; 137 | } 138 | 139 | class Tag { 140 | String title; 141 | 142 | Tag({ 143 | this.title, 144 | }); 145 | 146 | factory Tag.fromJson(Map json) => new Tag( 147 | title: json["title"] == null ? null : json["title"], 148 | ); 149 | 150 | Map toJson() => { 151 | "title": title == null ? null : title, 152 | }; 153 | } 154 | 155 | class Urls { 156 | String raw; 157 | String full; 158 | String regular; 159 | String small; 160 | String thumb; 161 | 162 | Urls({ 163 | this.raw, 164 | this.full, 165 | this.regular, 166 | this.small, 167 | this.thumb, 168 | }); 169 | 170 | factory Urls.fromJson(Map json) => new Urls( 171 | raw: json["raw"] == null ? null : json["raw"], 172 | full: json["full"] == null ? null : json["full"], 173 | regular: json["regular"] == null ? null : json["regular"], 174 | small: json["small"] == null ? null : json["small"], 175 | thumb: json["thumb"] == null ? null : json["thumb"], 176 | ); 177 | 178 | Map toJson() => { 179 | "raw": raw == null ? null : raw, 180 | "full": full == null ? null : full, 181 | "regular": regular == null ? null : regular, 182 | "small": small == null ? null : small, 183 | "thumb": thumb == null ? null : thumb, 184 | }; 185 | } 186 | 187 | class User { 188 | String id; 189 | DateTime updatedAt; 190 | String username; 191 | String name; 192 | String firstName; 193 | String lastName; 194 | String twitterUsername; 195 | String portfolioUrl; 196 | String bio; 197 | String location; 198 | UserLinks links; 199 | ProfileImage profileImage; 200 | String instagramUsername; 201 | int totalCollections; 202 | int totalLikes; 203 | int totalPhotos; 204 | bool acceptedTos; 205 | 206 | User({ 207 | this.id, 208 | this.updatedAt, 209 | this.username, 210 | this.name, 211 | this.firstName, 212 | this.lastName, 213 | this.twitterUsername, 214 | this.portfolioUrl, 215 | this.bio, 216 | this.location, 217 | this.links, 218 | this.profileImage, 219 | this.instagramUsername, 220 | this.totalCollections, 221 | this.totalLikes, 222 | this.totalPhotos, 223 | this.acceptedTos, 224 | }); 225 | 226 | factory User.fromJson(Map json) => new User( 227 | id: json["id"] == null ? null : json["id"], 228 | updatedAt: json["updated_at"] == null ? null : DateTime.parse(json["updated_at"]), 229 | username: json["username"] == null ? null : json["username"], 230 | name: json["name"] == null ? null : json["name"], 231 | firstName: json["first_name"] == null ? null : json["first_name"], 232 | lastName: json["last_name"] == null ? null : json["last_name"], 233 | twitterUsername: json["twitter_username"] == null ? null : json["twitter_username"], 234 | portfolioUrl: json["portfolio_url"] == null ? null : json["portfolio_url"], 235 | bio: json["bio"] == null ? null : json["bio"], 236 | location: json["location"] == null ? null : json["location"], 237 | links: json["links"] == null ? null : UserLinks.fromJson(json["links"]), 238 | profileImage: json["profile_image"] == null ? null : ProfileImage.fromJson(json["profile_image"]), 239 | instagramUsername: json["instagram_username"] == null ? null : json["instagram_username"], 240 | totalCollections: json["total_collections"] == null ? null : json["total_collections"], 241 | totalLikes: json["total_likes"] == null ? null : json["total_likes"], 242 | totalPhotos: json["total_photos"] == null ? null : json["total_photos"], 243 | acceptedTos: json["accepted_tos"] == null ? null : json["accepted_tos"], 244 | ); 245 | 246 | Map toJson() => { 247 | "id": id == null ? null : id, 248 | "updated_at": updatedAt == null ? null : updatedAt.toIso8601String(), 249 | "username": username == null ? null : username, 250 | "name": name == null ? null : name, 251 | "first_name": firstName == null ? null : firstName, 252 | "last_name": lastName == null ? null : lastName, 253 | "twitter_username": twitterUsername == null ? null : twitterUsername, 254 | "portfolio_url": portfolioUrl == null ? null : portfolioUrl, 255 | "bio": bio == null ? null : bio, 256 | "location": location == null ? null : location, 257 | "links": links == null ? null : links.toJson(), 258 | "profile_image": profileImage == null ? null : profileImage.toJson(), 259 | "instagram_username": instagramUsername == null ? null : instagramUsername, 260 | "total_collections": totalCollections == null ? null : totalCollections, 261 | "total_likes": totalLikes == null ? null : totalLikes, 262 | "total_photos": totalPhotos == null ? null : totalPhotos, 263 | "accepted_tos": acceptedTos == null ? null : acceptedTos, 264 | }; 265 | } 266 | 267 | class UserLinks { 268 | String self; 269 | String html; 270 | String photos; 271 | String likes; 272 | String portfolio; 273 | String following; 274 | String followers; 275 | 276 | UserLinks({ 277 | this.self, 278 | this.html, 279 | this.photos, 280 | this.likes, 281 | this.portfolio, 282 | this.following, 283 | this.followers, 284 | }); 285 | 286 | factory UserLinks.fromJson(Map json) => new UserLinks( 287 | self: json["self"] == null ? null : json["self"], 288 | html: json["html"] == null ? null : json["html"], 289 | photos: json["photos"] == null ? null : json["photos"], 290 | likes: json["likes"] == null ? null : json["likes"], 291 | portfolio: json["portfolio"] == null ? null : json["portfolio"], 292 | following: json["following"] == null ? null : json["following"], 293 | followers: json["followers"] == null ? null : json["followers"], 294 | ); 295 | 296 | Map toJson() => { 297 | "self": self == null ? null : self, 298 | "html": html == null ? null : html, 299 | "photos": photos == null ? null : photos, 300 | "likes": likes == null ? null : likes, 301 | "portfolio": portfolio == null ? null : portfolio, 302 | "following": following == null ? null : following, 303 | "followers": followers == null ? null : followers, 304 | }; 305 | } 306 | 307 | class ProfileImage { 308 | String small; 309 | String medium; 310 | String large; 311 | 312 | ProfileImage({ 313 | this.small, 314 | this.medium, 315 | this.large, 316 | }); 317 | 318 | factory ProfileImage.fromJson(Map json) => new ProfileImage( 319 | small: json["small"] == null ? null : json["small"], 320 | medium: json["medium"] == null ? null : json["medium"], 321 | large: json["large"] == null ? null : json["large"], 322 | ); 323 | 324 | Map toJson() => { 325 | "small": small == null ? null : small, 326 | "medium": medium == null ? null : medium, 327 | "large": large == null ? null : large, 328 | }; 329 | } 330 | -------------------------------------------------------------------------------- /lib/wallpaper_kit/pages/home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_widgets/wallpaper_kit/sub_pages/wallpapers.dart'; 3 | 4 | class WallHomePage extends StatelessWidget { 5 | const WallHomePage({Key key}) : super(key: key); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return Container( 10 | // color: Colors.black, 11 | child: Scaffold( 12 | backgroundColor: Colors.white, 13 | appBar: AppBar( 14 | leading: Image.asset('images/menu_icon.png'), 15 | elevation: 0, 16 | backgroundColor: Colors.transparent, 17 | brightness: Brightness.light, 18 | actions: [ 19 | Container( 20 | padding: 21 | EdgeInsets.only(top: 10, bottom: 10, left: 32, right: 32), 22 | height: 30, 23 | child: Container( 24 | height: 25, 25 | decoration: BoxDecoration( 26 | borderRadius: BorderRadius.circular(45), 27 | color: Color(0x50F02D2D), 28 | ), 29 | child: Row( 30 | children: [ 31 | Padding( 32 | padding: const EdgeInsets.only(left: 24, right: 8), 33 | child: Text( 34 | 'Search', 35 | style: TextStyle( 36 | fontSize: 16, 37 | color: Color(0xFFF02D2D), 38 | ), 39 | ), 40 | ), 41 | Padding( 42 | padding: const EdgeInsets.only(left: 8, right: 16), 43 | child: Icon( 44 | Icons.search, 45 | color: Color(0xFFF02D2D), 46 | ), 47 | ) 48 | ], 49 | ), 50 | ), 51 | ) 52 | ], 53 | ), 54 | 55 | // backgroundColor: Colors.black, 56 | floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, 57 | floatingActionButton: FloatingActionButton( 58 | backgroundColor: Colors.red, 59 | child: Icon(Icons.add), 60 | onPressed: () {}, 61 | ), 62 | bottomNavigationBar: BottomAppBar( 63 | color: Colors.black, 64 | shape: CircularNotchedRectangle(), 65 | child: Container( 66 | color: Colors.black, 67 | // height: 45, 68 | child: Row( 69 | mainAxisAlignment: MainAxisAlignment.spaceAround, 70 | children: [ 71 | InkWell( 72 | onTap: () {}, 73 | child: Container( 74 | padding: EdgeInsets.all(8), 75 | child: Column( 76 | mainAxisSize: MainAxisSize.min, 77 | children: [ 78 | Icon( 79 | Icons.home, 80 | color: Colors.white, 81 | // size: 32, 82 | ), 83 | Padding( 84 | padding: const EdgeInsets.all(8.0), 85 | child: Text( 86 | 'Home', 87 | style: TextStyle(color: Colors.white, fontSize: 11), 88 | ), 89 | ) 90 | ], 91 | ), 92 | // onPressed: () {}, 93 | ), 94 | ), 95 | InkWell( 96 | onTap: () {}, 97 | child: Container( 98 | padding: EdgeInsets.all(8), 99 | child: Column( 100 | mainAxisSize: MainAxisSize.min, 101 | children: [ 102 | Icon( 103 | Icons.favorite, 104 | color: Colors.grey, 105 | // size: 32, 106 | ), 107 | Padding( 108 | padding: const EdgeInsets.all(8.0), 109 | child: Text( 110 | 'Favourites', 111 | style: TextStyle(color: Colors.white, fontSize: 11), 112 | ), 113 | ) 114 | ], 115 | ), 116 | // onPressed: () {}, 117 | ), 118 | ), 119 | InkWell( 120 | onTap: () {}, 121 | child: Container( 122 | padding: EdgeInsets.all(8), 123 | child: Column( 124 | mainAxisSize: MainAxisSize.min, 125 | children: [ 126 | Icon( 127 | Icons.image, 128 | color: Colors.grey, 129 | // size: 32, 130 | ), 131 | Padding( 132 | padding: const EdgeInsets.all(8.0), 133 | child: Text( 134 | 'My Wallpapers', 135 | style: TextStyle(color: Colors.white, fontSize: 11), 136 | ), 137 | ) 138 | ], 139 | ), 140 | // onPressed: () {}, 141 | ), 142 | ), 143 | InkWell( 144 | onTap: () {}, 145 | child: Container( 146 | padding: EdgeInsets.all(8), 147 | child: Column( 148 | mainAxisSize: MainAxisSize.min, 149 | children: [ 150 | Icon( 151 | Icons.more_horiz, 152 | color: Colors.grey, 153 | // size: 32, 154 | ), 155 | Padding( 156 | padding: const EdgeInsets.all(8.0), 157 | child: Text( 158 | 'More', 159 | style: TextStyle(color: Colors.white, fontSize: 11), 160 | ), 161 | ) 162 | ], 163 | ), 164 | // onPressed: () {}, 165 | ), 166 | ), 167 | ], 168 | ), 169 | ), 170 | ), 171 | body: Wallpapers(), 172 | ), 173 | ); 174 | } 175 | } 176 | -------------------------------------------------------------------------------- /lib/wallpaper_kit/services/image_service.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter_widgets/wallpaper_kit/models/colllection_list_model.dart'; 4 | import 'package:flutter_widgets/wallpaper_kit/models/images_list_model.dart'; 5 | import 'package:http/http.dart' as http; 6 | 7 | Future getImages({String type}) async { 8 | final res = await http.get( 9 | 'https://api.unsplash.com//search/photos/?client_id=3b1df5538a261c90edc00b184736b38859226d215482386c9b3fc00c5ec094a2&query=$type'); 10 | 11 | if (res.statusCode == 200) { 12 | print(res.body); 13 | return imagesListModelFromJson(res.body); 14 | } else 15 | return null; 16 | } 17 | 18 | Future> getCollection() async { 19 | final res = await http.get( 20 | 'https://api.unsplash.com/collections/featured?page=1&client_id=3b1df5538a261c90edc00b184736b38859226d215482386c9b3fc00c5ec094a2'); 21 | 22 | if (res.statusCode == 200) { 23 | print(res.body); 24 | return collectionListModelFromJson(res.body); 25 | } else 26 | return null; 27 | } 28 | -------------------------------------------------------------------------------- /lib/wallpaper_kit/sub_pages/wallpapers.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_widgets/wallpaper_kit/models/images_list_model.dart'; 3 | import 'package:flutter_widgets/wallpaper_kit/services/image_service.dart'; 4 | import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; 5 | 6 | class Wallpapers extends StatelessWidget { 7 | const Wallpapers({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | child: Material( 13 | color: Colors.white, 14 | child: ListView( 15 | // shrinkWrap: true, 16 | children: [ 17 | header(), 18 | Padding( 19 | padding: const EdgeInsets.only(left: 16, top: 8, bottom: 8), 20 | child: Text( 21 | 'Free stunning walls for you..', 22 | style: TextStyle( 23 | fontSize: 18, 24 | ), 25 | ), 26 | ), 27 | latestWalls(context), 28 | Padding( 29 | padding: const EdgeInsets.only(left: 16, top: 8, bottom: 8), 30 | child: Text( 31 | 'Travel !', 32 | style: TextStyle( 33 | fontSize: 32, 34 | fontWeight: FontWeight.bold 35 | ), 36 | ), 37 | ), 38 | Padding( 39 | padding: const EdgeInsets.only(left: 16, top: 8, bottom: 8), 40 | child: Text( 41 | 'Featuring travellers from around the world as they explore destinations & adventures.', 42 | style: TextStyle( 43 | fontSize: 16, 44 | fontWeight: FontWeight.w300 45 | ), 46 | ), 47 | ), 48 | gridList(context) 49 | ], 50 | ), 51 | 52 | ), 53 | ); 54 | } 55 | } 56 | 57 | Widget latestWalls(context) { 58 | return Container( 59 | padding: EdgeInsets.only(left: 8), 60 | height: MediaQuery.of(context).size.width * 0.85, 61 | child: FutureBuilder( 62 | future: getImages(type: 'black cars'), 63 | builder: (BuildContext context, AsyncSnapshot snapshot) { 64 | if (snapshot.connectionState == ConnectionState.waiting) 65 | return Center(child: CircularProgressIndicator()); 66 | else if (snapshot.data != null) 67 | return ListView.builder( 68 | itemCount: snapshot.data.results.length, 69 | scrollDirection: Axis.horizontal, 70 | shrinkWrap: true, 71 | itemBuilder: (BuildContext listContext, index) { 72 | Result data = snapshot.data.results[index]; 73 | return Container( 74 | height: MediaQuery.of(context).size.width * 0.75, 75 | width: MediaQuery.of(context).size.width * 0.50, 76 | margin: EdgeInsets.all(8), 77 | decoration: BoxDecoration( 78 | image: DecorationImage( 79 | image: NetworkImage(data.urls.small), 80 | fit: BoxFit.cover, 81 | ), 82 | borderRadius: BorderRadius.circular(8), 83 | ), 84 | ); 85 | }, 86 | ); 87 | else 88 | return Container(); 89 | }, 90 | ), 91 | ); 92 | } 93 | 94 | Widget gridList(context) { 95 | return Container( 96 | // height: 700, 97 | child: FutureBuilder( 98 | future: getImages(type: 'travel'), 99 | builder: (BuildContext context, AsyncSnapshot snapshot) { 100 | if (snapshot.connectionState == ConnectionState.waiting) 101 | return Center(child: CircularProgressIndicator()); 102 | else if (snapshot.data != null) 103 | return StaggeredGridView.countBuilder( 104 | shrinkWrap: true, 105 | physics: NeverScrollableScrollPhysics(), 106 | crossAxisCount: 4, 107 | itemCount: snapshot.data.results.length, 108 | itemBuilder: (BuildContext context, int index) { 109 | Result data = snapshot.data.results[index]; 110 | return Container( 111 | height: MediaQuery.of(context).size.width * 0.75, 112 | width: MediaQuery.of(context).size.width * 0.50, 113 | margin: EdgeInsets.all(8), 114 | decoration: BoxDecoration( 115 | image: DecorationImage( 116 | image: NetworkImage(data.urls.small), 117 | fit: BoxFit.cover, 118 | ), 119 | borderRadius: BorderRadius.circular(8), 120 | ), 121 | ); 122 | }, 123 | staggeredTileBuilder: (int index) => 124 | new StaggeredTile.count(2, index.isEven ? 3 : 1.5), 125 | mainAxisSpacing: 2.0, 126 | crossAxisSpacing: 2.0, 127 | ); 128 | else 129 | return Container(); 130 | }, 131 | ), 132 | ); 133 | } 134 | 135 | Widget header() { 136 | return Container( 137 | height: 50, 138 | child: ListView( 139 | shrinkWrap: true, 140 | scrollDirection: Axis.horizontal, 141 | children: [ 142 | Padding( 143 | padding: const EdgeInsets.only(top: 8.0, left: 16, right: 32), 144 | child: Text('Latest', 145 | style: TextStyle( 146 | fontSize: 30, 147 | fontWeight: FontWeight.bold, 148 | )), 149 | ), 150 | Padding( 151 | padding: const EdgeInsets.only(top: 8.0, left: 32, right: 32), 152 | child: Text('Toplist', 153 | style: TextStyle( 154 | fontSize: 30, 155 | fontWeight: FontWeight.w100, 156 | )), 157 | ), 158 | Padding( 159 | padding: const EdgeInsets.only(top: 8.0, left: 32, right: 32), 160 | child: Text('Random', 161 | style: TextStyle( 162 | fontSize: 30, 163 | fontWeight: FontWeight.w100, 164 | )), 165 | ) 166 | ], 167 | ), 168 | ); 169 | } 170 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_widgets 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # Read more about versioning at semver.org. 10 | version: 1.0.0+1 11 | 12 | environment: 13 | sdk: ">=2.1.0 <3.0.0" 14 | 15 | dependencies: 16 | flutter: 17 | sdk: flutter 18 | http: ^0.12.0+2 19 | flutter_staggered_grid_view: ^0.3.0 20 | fancy_bar: 2.0.0 21 | # toast: ^0.1.4 22 | 23 | # The following adds the Cupertino Icons font to your application. 24 | # Use with the CupertinoIcons class for iOS style icons. 25 | cupertino_icons: ^0.1.2 26 | dio: ^3.0.8 27 | 28 | dev_dependencies: 29 | flutter_test: 30 | sdk: flutter 31 | 32 | 33 | # For information on the generic Dart part of this file, see the 34 | # following page: https://www.dartlang.org/tools/pub/pubspec 35 | 36 | # The following section is specific to Flutter. 37 | flutter: 38 | 39 | # The following line ensures that the Material Icons font is 40 | # included with your application, so that you can use the icons in 41 | # the material Icons class. 42 | uses-material-design: true 43 | 44 | # To add assets to your application, add an assets section, like this: 45 | assets: 46 | - images/menu_icon.png 47 | # - images/a_dot_ham.jpeg 48 | 49 | # An image asset can refer to one or more resolution-specific "variants", see 50 | # https://flutter.io/assets-and-images/#resolution-aware. 51 | 52 | # For details regarding adding assets from package dependencies, see 53 | # https://flutter.io/assets-and-images/#from-packages 54 | 55 | # To add custom fonts to your application, add a fonts section here, 56 | # in this "flutter" section. Each entry in this list should have a 57 | # "family" key with the font family name, and a "fonts" key with a 58 | # list giving the asset and other descriptors for the font. For 59 | # example: 60 | fonts: 61 | - family: CartIcons 62 | fonts: 63 | - asset: fonts/CartIcons.ttf 64 | # - asset: fonts/Schyler-Italic.ttf 65 | # style: italic 66 | # - family: Trajan Pro 67 | # fonts: 68 | # - asset: fonts/TrajanPro.ttf 69 | # - asset: fonts/TrajanPro_Bold.ttf 70 | # weight: 700 71 | # 72 | # For details regarding fonts from package dependencies, 73 | # see https://flutter.io/custom-fonts/#from-packages 74 | -------------------------------------------------------------------------------- /screenshots/Screenshot 2019-04-28 at 12.01.16 AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/screenshots/Screenshot 2019-04-28 at 12.01.16 AM.png -------------------------------------------------------------------------------- /screenshots/Screenshot 2019-04-28 at 12.01.23 AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/screenshots/Screenshot 2019-04-28 at 12.01.23 AM.png -------------------------------------------------------------------------------- /screenshots/Screenshot 2019-04-28 at 12.01.36 AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/screenshots/Screenshot 2019-04-28 at 12.01.36 AM.png -------------------------------------------------------------------------------- /screenshots/Screenshot 2019-04-28 at 12.01.54 AM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/screenshots/Screenshot 2019-04-28 at 12.01.54 AM.png -------------------------------------------------------------------------------- /screenshots/attachment.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/screenshots/attachment.jpg -------------------------------------------------------------------------------- /screenshots/preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leo-elstin/Flutter-UI-Kits/1845a6e0c5b376e1c5f332906ae6c9b4535079c9/screenshots/preview.jpg -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:flutter_widgets/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | --------------------------------------------------------------------------------