├── mobx_learning ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── mobx_learning │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ └── build.gradle ├── ios │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── AppDelegate.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── 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-1024x1024@1x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ └── Runner.xcodeproj │ │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── README.md ├── lib │ ├── src │ │ ├── mobx │ │ │ ├── counter_store │ │ │ │ ├── counter.dart │ │ │ │ └── counter.g.dart │ │ │ └── cats_store │ │ │ │ └── cats_store.dart │ │ ├── pages │ │ │ ├── cat_fact_page.dart │ │ │ ├── counter_page.dart │ │ │ └── cat_facts_page.dart │ │ └── models │ │ │ └── cat_fact.dart │ └── main.dart ├── .metadata ├── test │ └── widget_test.dart └── .gitignore ├── provider_learning ├── ios │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── AppDelegate.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── 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-1024x1024@1x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ └── Runner.xcodeproj │ │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── provider_learning │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ └── build.gradle ├── lib │ ├── src │ │ ├── models │ │ │ ├── counter.dart │ │ │ └── cat_fact.dart │ │ ├── stores │ │ │ ├── counter_store.dart │ │ │ └── cats_store.dart │ │ └── pages │ │ │ ├── counter_page.dart │ │ │ ├── cat_fact_page.dart │ │ │ └── cat_facts_page.dart │ └── main.dart ├── README.md ├── .metadata ├── test │ └── widget_test.dart ├── .gitignore └── pubspec.yaml ├── redux_learning ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── redux_learning │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ └── build.gradle ├── ios │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── AppDelegate.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── 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-1024x1024@1x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ └── Runner.xcodeproj │ │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── lib │ ├── redux │ │ ├── stores │ │ │ ├── counter_state.dart │ │ │ └── cats_facts_state.dart │ │ ├── actions │ │ │ ├── counter_actions.dart │ │ │ └── fat_facts_actions.dart │ │ └── reducers │ │ │ ├── counter_reducer.dart │ │ │ └── cat_facts_reducer.dart │ ├── main.dart │ ├── pages │ │ ├── counter_page.dart │ │ └── cat_fact_page.dart │ └── models │ │ └── cat_fact.dart ├── README.md ├── .metadata └── .gitignore ├── rxvms_learning ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── rxvms_learning │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ └── build.gradle ├── ios │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── AppDelegate.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── 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-1024x1024@1x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ └── Runner.xcodeproj │ │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── README.md ├── .metadata ├── lib │ ├── managers │ │ ├── counter.dart │ │ └── cat_facts_manager.dart │ ├── main.dart │ ├── service_locator.dart │ ├── services │ │ └── cat_facts_service.dart │ ├── pages │ │ ├── counter_page.dart │ │ └── cat_fact_page.dart │ └── models │ │ └── cat_fact.dart ├── test │ └── widget_test.dart └── .gitignore ├── flutter_bloc_learning ├── ios │ ├── Flutter │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── AppDelegate.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── 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-1024x1024@1x.png │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcworkspace │ │ └── contents.xcworkspacedata │ └── Runner.xcodeproj │ │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── android │ ├── gradle.properties │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── flutter_bloc_learning │ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ └── build.gradle ├── lib │ ├── src │ │ ├── bloc │ │ │ ├── events │ │ │ │ ├── counter_events.dart │ │ │ │ └── cat_facts_events.dart │ │ │ ├── blocs │ │ │ │ ├── counter_bloc.dart │ │ │ │ └── cat_facts_bloc.dart │ │ │ └── states │ │ │ │ └── cat_facts_state.dart │ │ ├── pages │ │ │ ├── counter_page.dart │ │ │ └── cat_fact_page.dart │ │ └── models │ │ │ └── cat_fact.dart │ └── main.dart ├── README.md ├── .metadata ├── test │ └── widget_test.dart └── .gitignore └── README.md /mobx_learning/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | -------------------------------------------------------------------------------- /mobx_learning/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobx_learning/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /provider_learning/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /redux_learning/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | -------------------------------------------------------------------------------- /redux_learning/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /redux_learning/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /rxvms_learning/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /provider_learning/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | -------------------------------------------------------------------------------- /provider_learning/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /flutter_bloc_learning/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | 3 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /redux_learning/lib/redux/stores/counter_state.dart: -------------------------------------------------------------------------------- 1 | class CounterState { 2 | int count = 0; 3 | } 4 | -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /redux_learning/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /provider_learning/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/bloc/events/counter_events.dart: -------------------------------------------------------------------------------- 1 | abstract class CounterEvent {} 2 | 3 | class IncrementEvent extends CounterEvent { 4 | int number; 5 | IncrementEvent(this.number); 6 | } 7 | -------------------------------------------------------------------------------- /provider_learning/lib/src/models/counter.dart: -------------------------------------------------------------------------------- 1 | class Counter { 2 | int count = 0; 3 | 4 | void increment() { 5 | count++; 6 | } 7 | 8 | void decrement() { 9 | count--; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/mobx_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /mobx_learning/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /provider_learning/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /redux_learning/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/redux_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/rxvms_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/provider_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RobertBrunhage/flutter_state_management_livestreams/HEAD/flutter_bloc_learning/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /mobx_learning/README.md: -------------------------------------------------------------------------------- 1 | # MobX learning 2 | 3 | This project will contain all the code from the livestream about MobX 4 | 5 | ## For additional information... 6 | 7 | Check out [Livestream Readme](https://github.com/RobertBrunhage/flutter_state_management_livestreams/blob/master/README.md) 8 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/README.md: -------------------------------------------------------------------------------- 1 | # Redux learning 2 | 3 | This project will contain all the code from the livestream about Redux 4 | 5 | ## For additional information... 6 | 7 | Check out [Livestream Readme](https://github.com/RobertBrunhage/flutter_state_management_livestreams/blob/master/README.md) 8 | -------------------------------------------------------------------------------- /rxvms_learning/README.md: -------------------------------------------------------------------------------- 1 | # RxVMS learning 2 | 3 | This project will contain all the code from the livestream about RxVMS 4 | 5 | ## For additional information... 6 | 7 | Check out [Livestream Readme](https://github.com/RobertBrunhage/flutter_state_management_livestreams/blob/master/README.md) 8 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /provider_learning/README.md: -------------------------------------------------------------------------------- 1 | # Provider learning 2 | 3 | This project will contain all the code from the livestream about Provider 4 | 5 | ## For additional information... 6 | 7 | Check out [Livestream Readme](https://github.com/RobertBrunhage/flutter_state_management_livestreams/blob/master/README.md) 8 | -------------------------------------------------------------------------------- /flutter_bloc_learning/README.md: -------------------------------------------------------------------------------- 1 | # Flutter_bloc learning 2 | 3 | This project will contain all the code from the livestream about Flutter_bloc 4 | 5 | ## For additional information... 6 | 7 | Check out [Livestream Readme](https://github.com/RobertBrunhage/flutter_state_management_livestreams/blob/master/README.md) 8 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/mobx/counter_store/counter.dart: -------------------------------------------------------------------------------- 1 | import 'package:mobx/mobx.dart'; 2 | 3 | part 'counter.g.dart'; 4 | 5 | class Counter = _Counter with _$Counter; 6 | 7 | abstract class _Counter with Store { 8 | @observable 9 | int count = 0; 10 | 11 | @action 12 | void increment() { 13 | count++; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /redux_learning/lib/redux/actions/counter_actions.dart: -------------------------------------------------------------------------------- 1 | import 'package:redux_learning/redux/stores/counter_state.dart'; 2 | 3 | class IncrementAction { 4 | int amount; 5 | IncrementAction(this.amount); 6 | 7 | CounterState increment(CounterState prevState, int amount) { 8 | prevState.count += amount; 9 | return prevState; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /mobx_learning/.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: b712a172f9694745f50505c93340883493b505e5 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /provider_learning/.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: b712a172f9694745f50505c93340883493b505e5 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /redux_learning/.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: b712a172f9694745f50505c93340883493b505e5 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /rxvms_learning/.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: 20e59316b8b8474554b38493b8ca888794b0234a 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /flutter_bloc_learning/.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: 20e59316b8b8474554b38493b8ca888794b0234a 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /provider_learning/lib/src/stores/counter_store.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider_learning/src/models/counter.dart'; 3 | 4 | class CounterStore with ChangeNotifier { 5 | Counter _counter = Counter(); 6 | 7 | int get count => _counter.count; 8 | 9 | void increment() { 10 | _counter.increment(); 11 | notifyListeners(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /redux_learning/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter State Management Livestreams 2 | 3 | This repository will contain all my learning projects thought YouTube livestreams. 4 | 5 | - [x] MobX 6 | 7 | - [x] Provider 8 | 9 | - [x] Redux 10 | 11 | - [x] Bloc Library 12 | 13 | - [x] RxVMS 14 | 15 | If there are anything special you would like to be added here, let me know through an issue / pull request or though my social media :) 16 | -------------------------------------------------------------------------------- /mobx_learning/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. -------------------------------------------------------------------------------- /redux_learning/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /provider_learning/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /provider_learning/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /provider_learning/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. -------------------------------------------------------------------------------- /redux_learning/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. -------------------------------------------------------------------------------- /redux_learning/lib/redux/reducers/counter_reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:redux_learning/redux/actions/counter_actions.dart'; 2 | import 'package:redux_learning/redux/stores/counter_state.dart'; 3 | 4 | CounterState counterStateReducer(CounterState prevState, dynamic action) { 5 | if (action is IncrementAction) { 6 | return action.increment(prevState, action.amount); 7 | } 8 | return prevState; 9 | } 10 | -------------------------------------------------------------------------------- /rxvms_learning/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. -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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. -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /redux_learning/lib/redux/stores/cats_facts_state.dart: -------------------------------------------------------------------------------- 1 | import 'package:redux_learning/models/cat_fact.dart'; 2 | 3 | enum LoadingState { none, loading, error } 4 | 5 | class CatFactsState { 6 | List catFacts = []; 7 | int get facts => catFacts.length; 8 | 9 | LoadingState state = LoadingState.loading; 10 | 11 | int factsReadCount = 0; 12 | String get factsRead => factsReadCount.toString(); 13 | } 14 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/java/com/example/mobx_learning/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.mobx_learning; 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 | -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/java/com/example/redux_learning/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.redux_learning; 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 | -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/java/com/example/rxvms_learning/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.rxvms_learning; 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 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/java/com/example/provider_learning/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.provider_learning; 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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/java/com/example/flutter_bloc_learning/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.flutter_bloc_learning; 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 | -------------------------------------------------------------------------------- /rxvms_learning/lib/managers/counter.dart: -------------------------------------------------------------------------------- 1 | import 'package:rx_command/rx_command.dart'; 2 | 3 | // ErrorLens for errors 4 | abstract class CounterManager { 5 | RxCommand addCounter; 6 | } 7 | 8 | class CounterManagerImplementation implements CounterManager { 9 | CounterManagerImplementation() { 10 | addCounter = RxCommand.createSync((count) { 11 | _count += count; 12 | return _count; 13 | }); 14 | } 15 | 16 | int _count = 0; 17 | 18 | @override 19 | RxCommand addCounter; 20 | } 21 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/bloc/blocs/counter_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:flutter_bloc_learning/src/bloc/events/counter_events.dart'; 3 | 4 | class CounterBloc extends Bloc { 5 | @override 6 | int get initialState => 0; 7 | 8 | @override 9 | Stream mapEventToState(CounterEvent event) async* { 10 | if (event is IncrementEvent) { 11 | yield currentState + event.number; 12 | } 13 | } 14 | 15 | void increment(int number) { 16 | this.dispatch(IncrementEvent(number)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:rxvms_learning/pages/cat_facts_page.dart'; 3 | import 'package:rxvms_learning/pages/counter_page.dart'; 4 | import 'package:rxvms_learning/service_locator.dart'; 5 | 6 | void main() { 7 | setUpServiceLocator(); 8 | runApp(MyApp()); 9 | } 10 | 11 | class MyApp extends StatelessWidget { 12 | @override 13 | Widget build(BuildContext context) { 14 | return MaterialApp( 15 | title: 'Flutter Demo', 16 | theme: ThemeData( 17 | primarySwatch: Colors.blue, 18 | ), 19 | home: CatFactsPage(), 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /rxvms_learning/lib/service_locator.dart: -------------------------------------------------------------------------------- 1 | import 'package:get_it/get_it.dart'; 2 | import 'package:rxvms_learning/managers/cat_facts_manager.dart'; 3 | import 'package:rxvms_learning/managers/counter.dart'; 4 | import 'package:rxvms_learning/services/cat_facts_service.dart'; 5 | 6 | GetIt sl = GetIt(); 7 | 8 | void setUpServiceLocator() { 9 | // Registers services 10 | sl.registerLazySingleton(() => CatFactServiceImplementation()); 11 | 12 | // Registers managers 13 | sl.registerLazySingleton(() => CounterManagerImplementation()); 14 | sl.registerLazySingleton(() => CatFactsManagerImplementation()); 15 | } 16 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/bloc/states/cat_facts_state.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_bloc_learning/src/models/cat_fact.dart'; 2 | 3 | enum LoadingState { none, loading, error } 4 | 5 | class CatFactsState { 6 | List catFacts = []; 7 | int get facts => catFacts.length; 8 | 9 | LoadingState state = LoadingState.loading; 10 | 11 | int factsReadCount = 0; 12 | String get factsRead => factsReadCount.toString(); 13 | 14 | CatFactsState.initial(); 15 | CatFactsState(CatFactsState currentState) { 16 | this.catFacts = currentState.catFacts; 17 | this.state = currentState.state; 18 | this.factsReadCount = currentState.factsReadCount; 19 | } 20 | 21 | @override 22 | String toString() { 23 | return 'total facts: $facts'; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /mobx_learning/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:mobx_learning/src/mobx/cats_store/cats_store.dart'; 3 | import 'package:mobx_learning/src/pages/cat_facts_page.dart'; 4 | import 'package:mobx_learning/src/pages/counter_page.dart'; 5 | import 'package:provider/provider.dart'; 6 | 7 | void main() => runApp(MyApp()); 8 | 9 | class MyApp extends StatelessWidget { 10 | @override 11 | Widget build(BuildContext context) { 12 | return Provider( 13 | builder: (_) => CatsStore(), 14 | child: MaterialApp( 15 | debugShowCheckedModeBanner: false, 16 | title: 'Flutter Demo', 17 | theme: ThemeData( 18 | primarySwatch: Colors.blue, 19 | ), 20 | home: CatFactsPage(), 21 | ), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /redux_learning/lib/redux/reducers/cat_facts_reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:redux_learning/redux/actions/fat_facts_actions.dart'; 2 | import 'package:redux_learning/redux/stores/cats_facts_state.dart'; 3 | 4 | CatFactsState catFactsReducer(CatFactsState prevState, dynamic action) { 5 | if (action == FetchCatFactsLoadingAction) { 6 | prevState.state = LoadingState.loading; 7 | return prevState; 8 | } 9 | if (action == FetchCatFactsFailedAction) { 10 | prevState.state = LoadingState.error; 11 | return prevState; 12 | } 13 | if (action is FetchCatFactsSuccessAction) { 14 | prevState.state = LoadingState.none; 15 | prevState.catFacts = action.catFacts; 16 | return prevState; 17 | } 18 | if (action == IncrementFactsReadAction) { 19 | prevState.factsReadCount++; 20 | return prevState; 21 | } 22 | 23 | return prevState; 24 | } 25 | -------------------------------------------------------------------------------- /mobx_learning/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | -------------------------------------------------------------------------------- /provider_learning/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | -------------------------------------------------------------------------------- /redux_learning/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | -------------------------------------------------------------------------------- /rxvms_learning/lib/services/cat_facts_service.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:rxvms_learning/models/cat_fact.dart'; 4 | import 'package:http/http.dart' as http; 5 | 6 | abstract class CatFactService { 7 | Future> fetchCatFacts(); 8 | } 9 | 10 | class CatFactServiceImplementation implements CatFactService { 11 | static const _catFactsUrl = 'https://cat-fact.herokuapp.com/facts'; 12 | 13 | @override 14 | Future> fetchCatFacts() async { 15 | final response = await http.get(_catFactsUrl); 16 | 17 | // status code 200 means that we made a successful get 18 | if (response.statusCode == 200) { 19 | Map decodedItems = json.decode(response.body); 20 | var catFacts = List.from(decodedItems['all']).map((json) => CatFact.fromJson(json)).toList(); 21 | return catFacts; 22 | } else { 23 | throw Exception('Cat API Error'); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | -------------------------------------------------------------------------------- /provider_learning/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider/provider.dart'; 3 | import 'package:provider_learning/src/pages/cat_facts_page.dart'; 4 | //import 'package:provider_learning/src/pages/counter_page.dart'; 5 | import 'package:provider_learning/src/stores/cats_store.dart'; 6 | import 'package:provider_learning/src/stores/counter_store.dart'; 7 | 8 | void main() => runApp(MyApp()); 9 | 10 | class MyApp extends StatelessWidget { 11 | @override 12 | Widget build(BuildContext context) { 13 | return MultiProvider( 14 | providers: [ 15 | ChangeNotifierProvider( 16 | builder: (_) => CounterStore(), 17 | ), 18 | ChangeNotifierProvider( 19 | builder: (_) => CatsStore(), 20 | ), 21 | ], 22 | child: MaterialApp( 23 | debugShowCheckedModeBanner: false, 24 | title: 'Flutter Demo', 25 | theme: ThemeData( 26 | primarySwatch: Colors.blue, 27 | ), 28 | home: CatFactsPage(), 29 | ), 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:flutter_bloc_learning/src/bloc/blocs/cat_facts_bloc.dart'; 4 | import 'package:flutter_bloc_learning/src/bloc/blocs/counter_bloc.dart'; 5 | import 'package:flutter_bloc_learning/src/pages/cat_facts_page.dart'; 6 | import 'package:flutter_bloc_learning/src/pages/counter_page.dart'; 7 | 8 | void main() => runApp(MyApp()); 9 | 10 | class MyApp extends StatelessWidget { 11 | @override 12 | Widget build(BuildContext context) { 13 | final catFactsBloc = CatFactsBloc(); 14 | return MultiBlocProvider( 15 | providers: [ 16 | BlocProvider( 17 | builder: (_) => CounterBloc(), 18 | ), 19 | BlocProvider( 20 | builder: (_) => catFactsBloc, 21 | ), 22 | ], 23 | child: MaterialApp( 24 | debugShowCheckedModeBanner: false, 25 | title: 'Flutter Demo', 26 | theme: ThemeData( 27 | primarySwatch: Colors.blue, 28 | ), 29 | home: CatFactsPage(catFactsBloc: catFactsBloc), 30 | ), 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /mobx_learning/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:mobx_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/lib/managers/cat_facts_manager.dart: -------------------------------------------------------------------------------- 1 | import 'package:rx_command/rx_command.dart'; 2 | import 'package:rxdart/rxdart.dart'; 3 | import 'package:rxvms_learning/models/cat_fact.dart'; 4 | import 'package:rxvms_learning/service_locator.dart'; 5 | import 'package:rxvms_learning/services/cat_facts_service.dart'; 6 | 7 | abstract class CatFactsManager { 8 | RxCommand> getCatFactsCommand; 9 | RxCommand incrementFactsRead; 10 | Observable get factsReadCountAsString; 11 | } 12 | 13 | class CatFactsManagerImplementation implements CatFactsManager { 14 | CatFactsManagerImplementation() { 15 | getCatFactsCommand = RxCommand.createAsyncNoParam>(sl().fetchCatFacts, emitInitialCommandResult: true); 16 | 17 | incrementFactsRead = RxCommand.createSync((_) => ++_factsReadCount, emitLastResult: true); 18 | } 19 | 20 | int _factsReadCount = 0; 21 | 22 | Observable get factsReadCountAsString => incrementFactsRead.map((value) => value.toString()); 23 | 24 | @override 25 | RxCommand> getCatFactsCommand; 26 | 27 | @override 28 | RxCommand incrementFactsRead; 29 | } 30 | -------------------------------------------------------------------------------- /rxvms_learning/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:rxvms_learning/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 | -------------------------------------------------------------------------------- /provider_learning/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:provider_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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_bloc_learning/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 | -------------------------------------------------------------------------------- /provider_learning/lib/src/pages/counter_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider/provider.dart'; 3 | import 'package:provider_learning/src/stores/counter_store.dart'; 4 | 5 | class CounterPage extends StatelessWidget { 6 | @override 7 | Widget build(BuildContext context) { 8 | final _counter = Provider.of(context, listen: false); 9 | return Scaffold( 10 | appBar: AppBar( 11 | title: Text('Provider counter page'), 12 | ), 13 | body: Center( 14 | child: Column( 15 | mainAxisAlignment: MainAxisAlignment.center, 16 | children: [ 17 | Text( 18 | 'You have pushed the button this many times:', 19 | ), 20 | Consumer( 21 | builder: (context, counter, _) { 22 | return Text( 23 | '${counter.count}', 24 | style: Theme.of(context).textTheme.display1, 25 | ); 26 | }, 27 | ), 28 | ], 29 | ), 30 | ), 31 | floatingActionButton: FloatingActionButton( 32 | onPressed: _counter.increment, 33 | tooltip: 'Increment', 34 | child: Icon(Icons.add), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/pages/cat_fact_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:mobx_learning/src/mobx/cats_store/cats_store.dart'; 3 | import 'package:mobx_learning/src/models/cat_fact.dart'; 4 | import 'package:provider/provider.dart'; 5 | 6 | class CatFactPage extends StatelessWidget { 7 | const CatFactPage({ 8 | Key key, 9 | @required this.catFact, 10 | }) : super(key: key); 11 | 12 | final CatFact catFact; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | final _catsStore = Provider.of(context); 17 | 18 | return Scaffold( 19 | appBar: AppBar( 20 | title: Text(catFact.userName), 21 | ), 22 | body: ListView( 23 | padding: const EdgeInsets.all(12), 24 | children: [ 25 | Row( 26 | children: [ 27 | Text('Total amount of posts read: '), 28 | Text(_catsStore.factsRead), 29 | ], 30 | ), 31 | Row( 32 | children: [ 33 | Text('Total amount of posts: '), 34 | Text(_catsStore.facts.toString()), 35 | ], 36 | ), 37 | SizedBox(height: 42), 38 | Text(catFact.text), 39 | ], 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /provider_learning/lib/src/pages/cat_fact_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider/provider.dart'; 3 | import 'package:provider_learning/src/models/cat_fact.dart'; 4 | import 'package:provider_learning/src/stores/cats_store.dart'; 5 | 6 | class CatFactPage extends StatelessWidget { 7 | const CatFactPage({ 8 | Key key, 9 | @required this.catFact, 10 | }) : super(key: key); 11 | 12 | final CatFact catFact; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | final _catsStore = Provider.of(context, listen: false); 17 | 18 | return Scaffold( 19 | appBar: AppBar( 20 | title: Text(catFact.userName), 21 | ), 22 | body: ListView( 23 | padding: const EdgeInsets.all(12), 24 | children: [ 25 | Row( 26 | children: [ 27 | Text('Total amount of posts read: '), 28 | Text(_catsStore.factsRead), 29 | ], 30 | ), 31 | Row( 32 | children: [ 33 | Text('Total amount of posts: '), 34 | Text(_catsStore.facts.toString()), 35 | ], 36 | ), 37 | SizedBox(height: 42), 38 | Text(catFact.text), 39 | ], 40 | ), 41 | ); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/mobx/counter_store/counter.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'counter.dart'; 4 | 5 | // ************************************************************************** 6 | // StoreGenerator 7 | // ************************************************************************** 8 | 9 | // ignore_for_file: non_constant_identifier_names, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars 10 | 11 | mixin _$Counter on _Counter, Store { 12 | final _$countAtom = Atom(name: '_Counter.count'); 13 | 14 | @override 15 | int get count { 16 | _$countAtom.context.enforceReadPolicy(_$countAtom); 17 | _$countAtom.reportObserved(); 18 | return super.count; 19 | } 20 | 21 | @override 22 | set count(int value) { 23 | _$countAtom.context.conditionallyRunInAction(() { 24 | super.count = value; 25 | _$countAtom.reportChanged(); 26 | }, _$countAtom, name: '${_$countAtom.name}_set'); 27 | } 28 | 29 | final _$_CounterActionController = ActionController(name: '_Counter'); 30 | 31 | @override 32 | void increment() { 33 | final _$actionInfo = _$_CounterActionController.startAction(); 34 | try { 35 | return super.increment(); 36 | } finally { 37 | _$_CounterActionController.endAction(_$actionInfo); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/bloc/blocs/cat_facts_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:flutter_bloc_learning/src/bloc/events/cat_facts_events.dart'; 3 | import 'package:flutter_bloc_learning/src/bloc/states/cat_facts_state.dart'; 4 | 5 | class CatFactsBloc extends Bloc { 6 | @override 7 | CatFactsState get initialState => CatFactsState.initial(); 8 | 9 | @override 10 | Stream mapEventToState(CatFactsEvent event) async* { 11 | final newState = CatFactsState(currentState); 12 | if (event is FetchCatFactsLoading) { 13 | newState.state = LoadingState.loading; 14 | yield newState; 15 | } 16 | if (event is FetchCatFactsFailed) { 17 | newState.state = LoadingState.error; 18 | yield newState; 19 | } 20 | if (event is FetchCatFactsSuccess) { 21 | newState.state = LoadingState.none; 22 | newState.catFacts = event.catFacts; 23 | yield newState; 24 | } 25 | if (event is IncrementFactsRead) { 26 | newState.factsReadCount++; 27 | yield newState; 28 | } 29 | } 30 | 31 | @override 32 | void onTransition(Transition transition) { 33 | print(transition); 34 | } 35 | 36 | @override 37 | void onError(Object error, StackTrace stackTrace) { 38 | print('$error, $stackTrace'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/pages/counter_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:flutter_bloc_learning/src/bloc/blocs/counter_bloc.dart'; 4 | import 'package:flutter_bloc_learning/src/bloc/events/counter_events.dart'; 5 | 6 | class CounterPage extends StatelessWidget { 7 | @override 8 | Widget build(BuildContext context) { 9 | final counterBloc = BlocProvider.of(context); 10 | return Scaffold( 11 | appBar: AppBar(), 12 | body: Center( 13 | child: Column( 14 | mainAxisAlignment: MainAxisAlignment.center, 15 | children: [ 16 | Text( 17 | 'You have pushed the button this many times:', 18 | ), 19 | BlocBuilder( 20 | bloc: counterBloc, 21 | builder: (context, number) { 22 | return Text( 23 | '$number', 24 | style: Theme.of(context).textTheme.display1, 25 | ); 26 | }, 27 | ), 28 | ], 29 | ), 30 | ), 31 | floatingActionButton: FloatingActionButton( 32 | onPressed: () => counterBloc.increment(2), 33 | tooltip: 'Increment', 34 | child: Icon(Icons.add), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/pages/counter_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_mobx/flutter_mobx.dart'; 3 | import 'package:mobx_learning/src/mobx/counter_store/counter.dart'; 4 | 5 | class CounterPage extends StatefulWidget { 6 | CounterPage({Key key, this.title}) : super(key: key); 7 | final String title; 8 | 9 | @override 10 | _CounterPageState createState() => _CounterPageState(); 11 | } 12 | 13 | class _CounterPageState extends State { 14 | final _counter = Counter(); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Scaffold( 19 | body: Center( 20 | child: Column( 21 | mainAxisAlignment: MainAxisAlignment.center, 22 | children: [ 23 | Text( 24 | 'You have pushed the button this many times:', 25 | ), 26 | Observer( 27 | builder: (_) { 28 | return Text( 29 | '${_counter.count}', 30 | style: Theme.of(context).textTheme.display1, 31 | ); 32 | }, 33 | ), 34 | ], 35 | ), 36 | ), 37 | floatingActionButton: FloatingActionButton( 38 | onPressed: _counter.increment, 39 | tooltip: 'Increment', 40 | child: Icon(Icons.add), 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /redux_learning/lib/redux/actions/fat_facts_actions.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:redux_learning/models/cat_fact.dart'; 4 | import 'package:redux_learning/redux/stores/cats_facts_state.dart'; 5 | import 'package:redux_thunk/redux_thunk.dart'; 6 | 7 | import 'package:http/http.dart' as http; 8 | 9 | class FetchCatFactsAction { 10 | ThunkAction fetchCats() { 11 | const _catFactsUrl = 'https://cat-fact.herokuapp.com/facts'; 12 | return (store) async { 13 | store.dispatch(FetchCatFactsLoadingAction); 14 | final response = await http.get(_catFactsUrl); 15 | 16 | // status code 200 means that we made a successful get 17 | if (response.statusCode == 200) { 18 | Map decodedItems = json.decode(response.body); 19 | final catFacts = List.from(decodedItems['all']).map((json) => CatFact.fromJson(json)).toList(); 20 | store.dispatch(FetchCatFactsSuccessAction(catFacts)); 21 | } else { 22 | print('failed getting the data'); 23 | store.dispatch(FetchCatFactsFailedAction); 24 | } 25 | }; 26 | } 27 | } 28 | 29 | class FetchCatFactsLoadingAction {} 30 | 31 | class FetchCatFactsFailedAction {} 32 | 33 | class FetchCatFactsSuccessAction { 34 | List catFacts; 35 | 36 | FetchCatFactsSuccessAction(this.catFacts); 37 | } 38 | 39 | class IncrementFactsReadAction {} 40 | -------------------------------------------------------------------------------- /rxvms_learning/lib/pages/counter_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:rxvms_learning/managers/counter.dart'; 3 | import 'package:rxvms_learning/service_locator.dart'; 4 | 5 | class CounterPage extends StatefulWidget { 6 | @override 7 | _CounterPageState createState() => _CounterPageState(); 8 | } 9 | 10 | class _CounterPageState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Scaffold( 14 | appBar: AppBar(), 15 | body: Center( 16 | child: Column( 17 | mainAxisAlignment: MainAxisAlignment.center, 18 | children: [ 19 | Text( 20 | 'You have pushed the button this many times:', 21 | ), 22 | StreamBuilder( 23 | stream: sl().addCounter, 24 | initialData: 0, 25 | builder: (context, snapshot) { 26 | return Text( 27 | '${snapshot.data}', 28 | style: Theme.of(context).textTheme.display1, 29 | ); 30 | }, 31 | ), 32 | ], 33 | ), 34 | ), 35 | floatingActionButton: FloatingActionButton( 36 | onPressed: () => sl().addCounter(10), 37 | tooltip: 'Increment', 38 | child: Icon(Icons.add), 39 | ), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /redux_learning/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_redux/flutter_redux.dart'; 3 | import 'package:redux/redux.dart'; 4 | import 'package:redux_learning/pages/cat_facts_page.dart'; 5 | import 'package:redux_learning/pages/counter_page.dart'; 6 | import 'package:redux_learning/redux/actions/fat_facts_actions.dart'; 7 | import 'package:redux_learning/redux/stores/cats_facts_state.dart'; 8 | import 'package:redux_learning/redux/stores/counter_state.dart'; 9 | import 'package:redux_learning/redux/reducers/cat_facts_reducer.dart'; 10 | import 'package:redux_thunk/redux_thunk.dart'; 11 | 12 | void main() { 13 | final store = Store( 14 | catFactsReducer, 15 | initialState: CatFactsState(), 16 | middleware: [thunkMiddleware], 17 | ); 18 | store.dispatch(FetchCatFactsAction().fetchCats()); 19 | runApp( 20 | MyApp( 21 | store: store, 22 | ), 23 | ); 24 | } 25 | 26 | class MyApp extends StatelessWidget { 27 | const MyApp({ 28 | Key key, 29 | @required this.store, 30 | }) : super(key: key); 31 | final Store store; 32 | 33 | @override 34 | Widget build(BuildContext context) { 35 | return StoreProvider( 36 | store: store, 37 | child: MaterialApp( 38 | debugShowCheckedModeBanner: false, 39 | title: 'Flutter Demo', 40 | theme: ThemeData( 41 | primarySwatch: Colors.blue, 42 | ), 43 | home: CatFactsPage(), 44 | ), 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/mobx/cats_store/cats_store.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:mobx/mobx.dart'; 4 | import 'package:mobx_learning/src/models/cat_fact.dart'; 5 | import 'package:http/http.dart' as http; 6 | 7 | part 'cats_store.g.dart'; 8 | 9 | enum LoadingState { none, loading, error } 10 | 11 | class CatsStore = _CatsStore with _$CatsStore; 12 | 13 | abstract class _CatsStore with Store { 14 | static const _catFactsUrl = 'https://cat-fact.herokuapp.com/facts'; 15 | 16 | _CatsStore() { 17 | fetchCatsFacts(); 18 | } 19 | 20 | @observable 21 | List catFacts = []; 22 | 23 | @observable 24 | LoadingState state = LoadingState.loading; 25 | 26 | @computed 27 | int get facts => catFacts.length; 28 | 29 | @observable 30 | int factsReadCount = 0; 31 | 32 | @computed 33 | String get factsRead => factsReadCount.toString(); 34 | 35 | @action 36 | void incrementFactsRead() { 37 | factsReadCount++; 38 | } 39 | 40 | @action 41 | Future fetchCatsFacts() async { 42 | state = LoadingState.loading; 43 | final response = await http.get(_catFactsUrl); 44 | 45 | // status code 200 means that we made a successful get 46 | if (response.statusCode == 200) { 47 | Map decodedItems = json.decode(response.body); 48 | catFacts = List.from(decodedItems['all']).map((json) => CatFact.fromJson(json)).toList(); 49 | state = LoadingState.none; 50 | } else { 51 | print('failed getting the data'); 52 | state = LoadingState.error; 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /redux_learning/lib/pages/counter_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_redux/flutter_redux.dart'; 3 | import 'package:redux_learning/redux/actions/counter_actions.dart'; 4 | import 'package:redux_learning/redux/stores/counter_state.dart'; 5 | 6 | class CounterPage extends StatelessWidget { 7 | CounterPage({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Scaffold( 12 | appBar: AppBar( 13 | title: Text('Counter Page'), 14 | ), 15 | body: Center( 16 | child: Column( 17 | mainAxisAlignment: MainAxisAlignment.center, 18 | children: [ 19 | Text( 20 | 'You have pushed the button this many times:', 21 | ), 22 | StoreConnector( 23 | converter: (store) => store.state.count, 24 | builder: (context, count) { 25 | return Text( 26 | '$count', 27 | style: Theme.of(context).textTheme.display1, 28 | ); 29 | }, 30 | ), 31 | ], 32 | ), 33 | ), 34 | floatingActionButton: StoreConnector( 35 | converter: (store) { 36 | return () => store.dispatch(IncrementAction(2)); 37 | }, 38 | builder: (context, increment) { 39 | return FloatingActionButton( 40 | onPressed: increment, 41 | tooltip: 'Increment', 42 | child: Icon(Icons.add), 43 | ); 44 | }, 45 | ), 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /provider_learning/lib/src/stores/cats_store.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter/widgets.dart'; 4 | import 'package:provider_learning/src/models/cat_fact.dart'; 5 | import 'package:http/http.dart' as http; 6 | 7 | enum LoadingState { none, loading, error } 8 | 9 | class CatsStore with ChangeNotifier { 10 | static const _catFactsUrl = 'https://cat-fact.herokuapp.com/facts'; 11 | 12 | CatsStore() { 13 | fetchCatsFacts(); 14 | } 15 | 16 | List _catFacts = []; 17 | List get catFacts => _catFacts; 18 | int get facts => _catFacts.length; 19 | 20 | LoadingState _state = LoadingState.loading; 21 | LoadingState get state => _state; 22 | 23 | int _factsReadCount = 0; 24 | int get factsReadCount => _factsReadCount; 25 | String get factsRead => _factsReadCount.toString(); 26 | 27 | void incrementFactsRead() { 28 | _factsReadCount++; 29 | notifyListeners(); 30 | } 31 | 32 | _changeLoadingState(LoadingState state) { 33 | _state = state; 34 | notifyListeners(); 35 | } 36 | 37 | Future fetchCatsFacts() async { 38 | _changeLoadingState(LoadingState.loading); 39 | final response = await http.get(_catFactsUrl); 40 | 41 | // status code 200 means that we made a successful get 42 | if (response.statusCode == 200) { 43 | Map decodedItems = json.decode(response.body); 44 | _catFacts = List.from(decodedItems['all']).map((json) => CatFact.fromJson(json)).toList(); 45 | _changeLoadingState(LoadingState.none); 46 | } else { 47 | print('failed getting the data'); 48 | _changeLoadingState(LoadingState.error); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /redux_learning/lib/pages/cat_fact_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_redux/flutter_redux.dart'; 3 | import 'package:redux_learning/models/cat_fact.dart'; 4 | import 'package:redux_learning/redux/stores/cats_facts_state.dart'; 5 | 6 | class CatFactPage extends StatelessWidget { 7 | const CatFactPage({ 8 | Key key, 9 | @required this.catFact, 10 | }) : super(key: key); 11 | 12 | final CatFact catFact; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text(catFact.userName), 19 | ), 20 | body: ListView( 21 | padding: const EdgeInsets.all(12), 22 | children: [ 23 | Row( 24 | children: [ 25 | Text('Total amount of posts read: '), 26 | StoreConnector( 27 | converter: (store) => store.state.factsRead, 28 | builder: (context, factsRead) { 29 | return Text(factsRead); 30 | }, 31 | ), 32 | ], 33 | ), 34 | Row( 35 | children: [ 36 | Text('Total amount of posts: '), 37 | StoreConnector( 38 | converter: (store) => store.state.facts, 39 | builder: (context, facts) { 40 | return Text(facts.toString()); 41 | }, 42 | ), 43 | ], 44 | ), 45 | SizedBox(height: 42), 46 | Text(catFact.text), 47 | ], 48 | ), 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /mobx_learning/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | mobx_learning 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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /redux_learning/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | redux_learning 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 | -------------------------------------------------------------------------------- /rxvms_learning/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | rxvms_learning 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 | -------------------------------------------------------------------------------- /provider_learning/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | provider_learning 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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | flutter_bloc_learning 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 | -------------------------------------------------------------------------------- /mobx_learning/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/ServiceDefinitions.json 65 | **/ios/Runner/GeneratedPluginRegistrant.* 66 | 67 | # Exceptions to above rules. 68 | !**/ios/**/default.mode1v3 69 | !**/ios/**/default.mode2v3 70 | !**/ios/**/default.pbxuser 71 | !**/ios/**/default.perspectivev3 72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 73 | -------------------------------------------------------------------------------- /redux_learning/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/ServiceDefinitions.json 65 | **/ios/Runner/GeneratedPluginRegistrant.* 66 | 67 | # Exceptions to above rules. 68 | !**/ios/**/default.mode1v3 69 | !**/ios/**/default.mode2v3 70 | !**/ios/**/default.pbxuser 71 | !**/ios/**/default.perspectivev3 72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 73 | -------------------------------------------------------------------------------- /rxvms_learning/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/ServiceDefinitions.json 65 | **/ios/Runner/GeneratedPluginRegistrant.* 66 | 67 | # Exceptions to above rules. 68 | !**/ios/**/default.mode1v3 69 | !**/ios/**/default.mode2v3 70 | !**/ios/**/default.pbxuser 71 | !**/ios/**/default.perspectivev3 72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 73 | -------------------------------------------------------------------------------- /provider_learning/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/ServiceDefinitions.json 65 | **/ios/Runner/GeneratedPluginRegistrant.* 66 | 67 | # Exceptions to above rules. 68 | !**/ios/**/default.mode1v3 69 | !**/ios/**/default.mode2v3 70 | !**/ios/**/default.pbxuser 71 | !**/ios/**/default.perspectivev3 72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 73 | -------------------------------------------------------------------------------- /flutter_bloc_learning/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | 32 | # Android related 33 | **/android/**/gradle-wrapper.jar 34 | **/android/.gradle 35 | **/android/captures/ 36 | **/android/gradlew 37 | **/android/gradlew.bat 38 | **/android/local.properties 39 | **/android/**/GeneratedPluginRegistrant.java 40 | 41 | # iOS/XCode related 42 | **/ios/**/*.mode1v3 43 | **/ios/**/*.mode2v3 44 | **/ios/**/*.moved-aside 45 | **/ios/**/*.pbxuser 46 | **/ios/**/*.perspectivev3 47 | **/ios/**/*sync/ 48 | **/ios/**/.sconsign.dblite 49 | **/ios/**/.tags* 50 | **/ios/**/.vagrant/ 51 | **/ios/**/DerivedData/ 52 | **/ios/**/Icon? 53 | **/ios/**/Pods/ 54 | **/ios/**/.symlinks/ 55 | **/ios/**/profile 56 | **/ios/**/xcuserdata 57 | **/ios/.generated/ 58 | **/ios/Flutter/App.framework 59 | **/ios/Flutter/Flutter.framework 60 | **/ios/Flutter/Generated.xcconfig 61 | **/ios/Flutter/app.flx 62 | **/ios/Flutter/app.zip 63 | **/ios/Flutter/flutter_assets/ 64 | **/ios/ServiceDefinitions.json 65 | **/ios/Runner/GeneratedPluginRegistrant.* 66 | 67 | # Exceptions to above rules. 68 | !**/ios/**/default.mode1v3 69 | !**/ios/**/default.mode2v3 70 | !**/ios/**/default.pbxuser 71 | !**/ios/**/default.perspectivev3 72 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 73 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/pages/cat_fact_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:flutter_bloc_learning/src/bloc/blocs/cat_facts_bloc.dart'; 4 | import 'package:flutter_bloc_learning/src/bloc/states/cat_facts_state.dart'; 5 | import 'package:flutter_bloc_learning/src/models/cat_fact.dart'; 6 | 7 | class CatFactPage extends StatelessWidget { 8 | const CatFactPage({ 9 | Key key, 10 | @required this.catFact, 11 | }) : super(key: key); 12 | 13 | final CatFact catFact; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | final catFactsBloc = BlocProvider.of(context); 18 | return Scaffold( 19 | appBar: AppBar( 20 | title: Text(catFact.userName), 21 | ), 22 | body: ListView( 23 | padding: const EdgeInsets.all(12), 24 | children: [ 25 | Row( 26 | children: [ 27 | Text('Total amount of posts read: '), 28 | BlocBuilder( 29 | bloc: catFactsBloc, 30 | builder: (context, catFactState) { 31 | return Text(catFactState.factsRead); 32 | }, 33 | ), 34 | ], 35 | ), 36 | Row( 37 | children: [ 38 | Text('Total amount of posts: '), 39 | BlocBuilder( 40 | bloc: catFactsBloc, 41 | builder: (context, catFactState) { 42 | return Text(catFactState.facts.toString()); 43 | }, 44 | ), 45 | ], 46 | ), 47 | SizedBox(height: 42), 48 | Text(catFact.text), 49 | ], 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/bloc/events/cat_facts_events.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:flutter_bloc_learning/src/bloc/blocs/cat_facts_bloc.dart'; 4 | import 'package:flutter_bloc_learning/src/models/cat_fact.dart'; 5 | 6 | import 'package:http/http.dart' as http; 7 | 8 | abstract class CatFactsEvent {} 9 | 10 | class FetchCatFacts extends CatFactsEvent { 11 | FetchCatFacts(CatFactsBloc bloc) { 12 | fetch(bloc); 13 | } 14 | 15 | void fetch(CatFactsBloc bloc) async { 16 | const _catFactsUrl = 'https://cat-fact.herokuapp.com/facts'; 17 | bloc.dispatch(FetchCatFactsLoading()); 18 | final response = await http.get(_catFactsUrl); 19 | 20 | // status code 200 means that we made a successful get 21 | if (response.statusCode == 200) { 22 | Map decodedItems = json.decode(response.body); 23 | final catFacts = List.from(decodedItems['all']).map((json) => CatFact.fromJson(json)).toList(); 24 | bloc.dispatch(FetchCatFactsSuccess(catFacts)); 25 | } else { 26 | print('failed getting data'); 27 | bloc.dispatch(FetchCatFactsFailed()); 28 | } 29 | } 30 | } 31 | 32 | class FetchCatFactsLoading extends CatFactsEvent { 33 | @override 34 | String toString() { 35 | return 'FetchCatFactsLoading'; 36 | } 37 | } 38 | 39 | class FetchCatFactsFailed extends CatFactsEvent { 40 | @override 41 | String toString() { 42 | return 'FetchCatFactsFailed'; 43 | } 44 | } 45 | 46 | class FetchCatFactsSuccess extends CatFactsEvent { 47 | List catFacts; 48 | 49 | FetchCatFactsSuccess(this.catFacts); 50 | 51 | @override 52 | String toString() { 53 | return 'FetchCatFactsSuccess'; 54 | } 55 | } 56 | 57 | class IncrementFactsRead extends CatFactsEvent { 58 | @override 59 | String toString() { 60 | return 'IncrementFactsRead'; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /rxvms_learning/lib/pages/cat_fact_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:rxvms_learning/managers/cat_facts_manager.dart'; 3 | import 'package:rxvms_learning/models/cat_fact.dart'; 4 | import 'package:rxvms_learning/service_locator.dart'; 5 | 6 | class CatFactPage extends StatelessWidget { 7 | const CatFactPage({ 8 | Key key, 9 | @required this.catFact, 10 | }) : super(key: key); 11 | 12 | final CatFact catFact; 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text(catFact.userName), 19 | ), 20 | body: ListView( 21 | padding: const EdgeInsets.all(12), 22 | children: [ 23 | Row( 24 | children: [ 25 | Text('Total amount of posts read: '), 26 | StreamBuilder( 27 | stream: sl().factsReadCountAsString, 28 | initialData: sl().incrementFactsRead.lastResult.toString(), 29 | builder: (context, snapshot) { 30 | return Text(snapshot.data); 31 | }, 32 | ), 33 | ], 34 | ), 35 | Row( 36 | children: [ 37 | Text('Total amount of posts: '), 38 | StreamBuilder>( 39 | stream: sl().getCatFactsCommand, 40 | initialData: sl().getCatFactsCommand.lastResult, 41 | builder: (context, snapshot) { 42 | return Text(snapshot.data.length.toString()); 43 | }, 44 | ), 45 | ], 46 | ), 47 | SizedBox(height: 42), 48 | Text(catFact.text), 49 | ], 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /mobx_learning/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /redux_learning/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /rxvms_learning/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /provider_learning/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /flutter_bloc_learning/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/models/cat_fact.dart: -------------------------------------------------------------------------------- 1 | class CatFact { 2 | String sId; 3 | String text; 4 | String type; 5 | User user; 6 | int upvotes; 7 | Null userUpvoted; 8 | 9 | String get userName => user != null ? user.name.first : 'no user'; 10 | 11 | CatFact({this.sId, this.text, this.type, this.user, this.upvotes, this.userUpvoted}); 12 | 13 | CatFact.fromJson(Map json) { 14 | sId = json['_id']; 15 | text = json['text']; 16 | type = json['type']; 17 | user = json['user'] != null ? new User.fromJson(json['user']) : null; 18 | upvotes = json['upvotes']; 19 | userUpvoted = json['userUpvoted']; 20 | } 21 | 22 | Map toJson() { 23 | final Map data = new Map(); 24 | data['_id'] = this.sId; 25 | data['text'] = this.text; 26 | data['type'] = this.type; 27 | if (this.user != null) { 28 | data['user'] = this.user.toJson(); 29 | } 30 | data['upvotes'] = this.upvotes; 31 | data['userUpvoted'] = this.userUpvoted; 32 | return data; 33 | } 34 | } 35 | 36 | class User { 37 | String sId; 38 | Name name; 39 | 40 | User({this.sId, this.name}); 41 | 42 | User.fromJson(Map json) { 43 | sId = json['_id']; 44 | name = json['name'] != null ? new Name.fromJson(json['name']) : null; 45 | } 46 | 47 | Map toJson() { 48 | final Map data = new Map(); 49 | data['_id'] = this.sId; 50 | if (this.name != null) { 51 | data['name'] = this.name.toJson(); 52 | } 53 | return data; 54 | } 55 | } 56 | 57 | class Name { 58 | String first; 59 | String last; 60 | 61 | Name({this.first, this.last}); 62 | 63 | Name.fromJson(Map json) { 64 | first = json['first']; 65 | last = json['last']; 66 | } 67 | 68 | Map toJson() { 69 | final Map data = new Map(); 70 | data['first'] = this.first; 71 | data['last'] = this.last; 72 | return data; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /redux_learning/lib/models/cat_fact.dart: -------------------------------------------------------------------------------- 1 | class CatFact { 2 | String sId; 3 | String text; 4 | String type; 5 | User user; 6 | int upvotes; 7 | Null userUpvoted; 8 | 9 | String get userName => user != null ? user.name.first : 'no user'; 10 | 11 | CatFact({this.sId, this.text, this.type, this.user, this.upvotes, this.userUpvoted}); 12 | 13 | CatFact.fromJson(Map json) { 14 | sId = json['_id']; 15 | text = json['text']; 16 | type = json['type']; 17 | user = json['user'] != null ? new User.fromJson(json['user']) : null; 18 | upvotes = json['upvotes']; 19 | userUpvoted = json['userUpvoted']; 20 | } 21 | 22 | Map toJson() { 23 | final Map data = new Map(); 24 | data['_id'] = this.sId; 25 | data['text'] = this.text; 26 | data['type'] = this.type; 27 | if (this.user != null) { 28 | data['user'] = this.user.toJson(); 29 | } 30 | data['upvotes'] = this.upvotes; 31 | data['userUpvoted'] = this.userUpvoted; 32 | return data; 33 | } 34 | } 35 | 36 | class User { 37 | String sId; 38 | Name name; 39 | 40 | User({this.sId, this.name}); 41 | 42 | User.fromJson(Map json) { 43 | sId = json['_id']; 44 | name = json['name'] != null ? new Name.fromJson(json['name']) : null; 45 | } 46 | 47 | Map toJson() { 48 | final Map data = new Map(); 49 | data['_id'] = this.sId; 50 | if (this.name != null) { 51 | data['name'] = this.name.toJson(); 52 | } 53 | return data; 54 | } 55 | } 56 | 57 | class Name { 58 | String first; 59 | String last; 60 | 61 | Name({this.first, this.last}); 62 | 63 | Name.fromJson(Map json) { 64 | first = json['first']; 65 | last = json['last']; 66 | } 67 | 68 | Map toJson() { 69 | final Map data = new Map(); 70 | data['first'] = this.first; 71 | data['last'] = this.last; 72 | return data; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /rxvms_learning/lib/models/cat_fact.dart: -------------------------------------------------------------------------------- 1 | class CatFact { 2 | String sId; 3 | String text; 4 | String type; 5 | User user; 6 | int upvotes; 7 | Null userUpvoted; 8 | 9 | String get userName => user != null ? user.name.first : 'no user'; 10 | 11 | CatFact({this.sId, this.text, this.type, this.user, this.upvotes, this.userUpvoted}); 12 | 13 | CatFact.fromJson(Map json) { 14 | sId = json['_id']; 15 | text = json['text']; 16 | type = json['type']; 17 | user = json['user'] != null ? new User.fromJson(json['user']) : null; 18 | upvotes = json['upvotes']; 19 | userUpvoted = json['userUpvoted']; 20 | } 21 | 22 | Map toJson() { 23 | final Map data = new Map(); 24 | data['_id'] = this.sId; 25 | data['text'] = this.text; 26 | data['type'] = this.type; 27 | if (this.user != null) { 28 | data['user'] = this.user.toJson(); 29 | } 30 | data['upvotes'] = this.upvotes; 31 | data['userUpvoted'] = this.userUpvoted; 32 | return data; 33 | } 34 | } 35 | 36 | class User { 37 | String sId; 38 | Name name; 39 | 40 | User({this.sId, this.name}); 41 | 42 | User.fromJson(Map json) { 43 | sId = json['_id']; 44 | name = json['name'] != null ? new Name.fromJson(json['name']) : null; 45 | } 46 | 47 | Map toJson() { 48 | final Map data = new Map(); 49 | data['_id'] = this.sId; 50 | if (this.name != null) { 51 | data['name'] = this.name.toJson(); 52 | } 53 | return data; 54 | } 55 | } 56 | 57 | class Name { 58 | String first; 59 | String last; 60 | 61 | Name({this.first, this.last}); 62 | 63 | Name.fromJson(Map json) { 64 | first = json['first']; 65 | last = json['last']; 66 | } 67 | 68 | Map toJson() { 69 | final Map data = new Map(); 70 | data['first'] = this.first; 71 | data['last'] = this.last; 72 | return data; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /provider_learning/lib/src/models/cat_fact.dart: -------------------------------------------------------------------------------- 1 | class CatFact { 2 | String sId; 3 | String text; 4 | String type; 5 | User user; 6 | int upvotes; 7 | Null userUpvoted; 8 | 9 | String get userName => user != null ? user.name.first : 'no user'; 10 | 11 | CatFact({this.sId, this.text, this.type, this.user, this.upvotes, this.userUpvoted}); 12 | 13 | CatFact.fromJson(Map json) { 14 | sId = json['_id']; 15 | text = json['text']; 16 | type = json['type']; 17 | user = json['user'] != null ? new User.fromJson(json['user']) : null; 18 | upvotes = json['upvotes']; 19 | userUpvoted = json['userUpvoted']; 20 | } 21 | 22 | Map toJson() { 23 | final Map data = new Map(); 24 | data['_id'] = this.sId; 25 | data['text'] = this.text; 26 | data['type'] = this.type; 27 | if (this.user != null) { 28 | data['user'] = this.user.toJson(); 29 | } 30 | data['upvotes'] = this.upvotes; 31 | data['userUpvoted'] = this.userUpvoted; 32 | return data; 33 | } 34 | } 35 | 36 | class User { 37 | String sId; 38 | Name name; 39 | 40 | User({this.sId, this.name}); 41 | 42 | User.fromJson(Map json) { 43 | sId = json['_id']; 44 | name = json['name'] != null ? new Name.fromJson(json['name']) : null; 45 | } 46 | 47 | Map toJson() { 48 | final Map data = new Map(); 49 | data['_id'] = this.sId; 50 | if (this.name != null) { 51 | data['name'] = this.name.toJson(); 52 | } 53 | return data; 54 | } 55 | } 56 | 57 | class Name { 58 | String first; 59 | String last; 60 | 61 | Name({this.first, this.last}); 62 | 63 | Name.fromJson(Map json) { 64 | first = json['first']; 65 | last = json['last']; 66 | } 67 | 68 | Map toJson() { 69 | final Map data = new Map(); 70 | data['first'] = this.first; 71 | data['last'] = this.last; 72 | return data; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /flutter_bloc_learning/lib/src/models/cat_fact.dart: -------------------------------------------------------------------------------- 1 | class CatFact { 2 | String sId; 3 | String text; 4 | String type; 5 | User user; 6 | int upvotes; 7 | Null userUpvoted; 8 | 9 | String get userName => user != null ? user.name.first : 'no user'; 10 | 11 | CatFact({this.sId, this.text, this.type, this.user, this.upvotes, this.userUpvoted}); 12 | 13 | CatFact.fromJson(Map json) { 14 | sId = json['_id']; 15 | text = json['text']; 16 | type = json['type']; 17 | user = json['user'] != null ? new User.fromJson(json['user']) : null; 18 | upvotes = json['upvotes']; 19 | userUpvoted = json['userUpvoted']; 20 | } 21 | 22 | Map toJson() { 23 | final Map data = new Map(); 24 | data['_id'] = this.sId; 25 | data['text'] = this.text; 26 | data['type'] = this.type; 27 | if (this.user != null) { 28 | data['user'] = this.user.toJson(); 29 | } 30 | data['upvotes'] = this.upvotes; 31 | data['userUpvoted'] = this.userUpvoted; 32 | return data; 33 | } 34 | } 35 | 36 | class User { 37 | String sId; 38 | Name name; 39 | 40 | User({this.sId, this.name}); 41 | 42 | User.fromJson(Map json) { 43 | sId = json['_id']; 44 | name = json['name'] != null ? new Name.fromJson(json['name']) : null; 45 | } 46 | 47 | Map toJson() { 48 | final Map data = new Map(); 49 | data['_id'] = this.sId; 50 | if (this.name != null) { 51 | data['name'] = this.name.toJson(); 52 | } 53 | return data; 54 | } 55 | } 56 | 57 | class Name { 58 | String first; 59 | String last; 60 | 61 | Name({this.first, this.last}); 62 | 63 | Name.fromJson(Map json) { 64 | first = json['first']; 65 | last = json['last']; 66 | } 67 | 68 | Map toJson() { 69 | final Map data = new Map(); 70 | data['first'] = this.first; 71 | data['last'] = this.last; 72 | return data; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /mobx_learning/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 28 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.mobx_learning" 37 | minSdkVersion 16 38 | targetSdkVersion 28 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 | -------------------------------------------------------------------------------- /redux_learning/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 28 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.redux_learning" 37 | minSdkVersion 16 38 | targetSdkVersion 28 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 | -------------------------------------------------------------------------------- /rxvms_learning/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 28 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.rxvms_learning" 37 | minSdkVersion 16 38 | targetSdkVersion 28 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 | -------------------------------------------------------------------------------- /provider_learning/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 28 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.provider_learning" 37 | minSdkVersion 16 38 | targetSdkVersion 28 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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 28 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.flutter_bloc_learning" 37 | minSdkVersion 16 38 | targetSdkVersion 28 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 | -------------------------------------------------------------------------------- /mobx_learning/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 | -------------------------------------------------------------------------------- /redux_learning/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 | -------------------------------------------------------------------------------- /rxvms_learning/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 | -------------------------------------------------------------------------------- /provider_learning/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 | -------------------------------------------------------------------------------- /flutter_bloc_learning/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 | -------------------------------------------------------------------------------- /mobx_learning/lib/src/pages/cat_facts_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_mobx/flutter_mobx.dart'; 3 | import 'package:mobx_learning/src/mobx/cats_store/cats_store.dart'; 4 | import 'package:mobx_learning/src/models/cat_fact.dart'; 5 | import 'package:mobx_learning/src/pages/cat_fact_page.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | class CatFactsPage extends StatelessWidget { 9 | @override 10 | Widget build(BuildContext context) { 11 | final _catsStore = Provider.of(context); 12 | 13 | return Scaffold( 14 | appBar: AppBar( 15 | title: Text('Cat facts app'), 16 | actions: [ 17 | Container( 18 | margin: const EdgeInsets.only(right: 16), 19 | alignment: Alignment.center, 20 | child: Observer( 21 | builder: (_) { 22 | return Text( 23 | 'posts read: ${_catsStore.factsRead}', 24 | style: Theme.of(context).primaryTextTheme.title, 25 | ); 26 | }, 27 | ), 28 | ), 29 | ], 30 | ), 31 | body: Observer( 32 | builder: (context) { 33 | if (_catsStore.state == LoadingState.loading) 34 | return Center(child: CircularProgressIndicator()); 35 | else if (_catsStore.state == LoadingState.none) 36 | return ListView.builder( 37 | itemCount: _catsStore.catFacts.length, 38 | itemBuilder: (context, index) { 39 | final catFact = _catsStore.catFacts[index]; 40 | return CatFactsTile(catFact: catFact); 41 | }, 42 | ); 43 | else 44 | return Center(child: Text('There was an error')); 45 | }, 46 | ), 47 | floatingActionButton: FloatingActionButton( 48 | onPressed: _catsStore.fetchCatsFacts, 49 | ), 50 | ); 51 | } 52 | } 53 | 54 | class CatFactsTile extends StatelessWidget { 55 | const CatFactsTile({ 56 | Key key, 57 | @required this.catFact, 58 | }) : super(key: key); 59 | 60 | final CatFact catFact; 61 | 62 | @override 63 | Widget build(BuildContext context) { 64 | final _catsStore = Provider.of(context); 65 | return ListTile( 66 | onTap: () { 67 | _catsStore.incrementFactsRead(); 68 | Navigator.of(context).push( 69 | MaterialPageRoute( 70 | builder: (context) => CatFactPage(catFact: catFact), 71 | ), 72 | ); 73 | }, 74 | title: Text(catFact.userName), 75 | subtitle: Text(catFact.text), 76 | ); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /provider_learning/lib/src/pages/cat_facts_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:provider/provider.dart'; 3 | import 'package:provider_learning/src/models/cat_fact.dart'; 4 | import 'package:provider_learning/src/pages/cat_fact_page.dart'; 5 | import 'package:provider_learning/src/stores/cats_store.dart'; 6 | 7 | class CatFactsPage extends StatelessWidget { 8 | @override 9 | Widget build(BuildContext context) { 10 | final _catsStore = Provider.of(context, listen: false); 11 | 12 | return Scaffold( 13 | appBar: AppBar( 14 | title: Text('Cat facts app'), 15 | actions: [ 16 | Container( 17 | margin: const EdgeInsets.only(right: 16), 18 | alignment: Alignment.center, 19 | child: Consumer( 20 | builder: (context, catsStore, _) { 21 | return Text( 22 | 'posts read: ${_catsStore.factsRead}', 23 | style: Theme.of(context).primaryTextTheme.title, 24 | ); 25 | }, 26 | ), 27 | ), 28 | ], 29 | ), 30 | body: Consumer( 31 | builder: (context, catsStore, _) { 32 | if (_catsStore.state == LoadingState.loading) 33 | return Center(child: CircularProgressIndicator()); 34 | else if (_catsStore.state == LoadingState.none) 35 | return ListView.builder( 36 | itemCount: _catsStore.catFacts.length, 37 | itemBuilder: (context, index) { 38 | final catFact = _catsStore.catFacts[index]; 39 | return CatFactsTile(catFact: catFact); 40 | }, 41 | ); 42 | else 43 | return Center(child: Text('There was an error')); 44 | }, 45 | ), 46 | floatingActionButton: FloatingActionButton( 47 | onPressed: _catsStore.fetchCatsFacts, 48 | ), 49 | ); 50 | } 51 | } 52 | 53 | class CatFactsTile extends StatelessWidget { 54 | const CatFactsTile({ 55 | Key key, 56 | @required this.catFact, 57 | }) : super(key: key); 58 | 59 | final CatFact catFact; 60 | 61 | @override 62 | Widget build(BuildContext context) { 63 | final _catsStore = Provider.of(context, listen: false); 64 | return ListTile( 65 | onTap: () { 66 | _catsStore.incrementFactsRead(); 67 | Navigator.of(context).push( 68 | MaterialPageRoute( 69 | builder: (context) => CatFactPage(catFact: catFact), 70 | ), 71 | ); 72 | }, 73 | title: Text(catFact.userName), 74 | subtitle: Text(catFact.text), 75 | ); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /provider_learning/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: provider_learning 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 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | version: 1.0.0+1 15 | 16 | environment: 17 | sdk: ">=2.1.0 <3.0.0" 18 | 19 | dependencies: 20 | flutter: 21 | sdk: flutter 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 | provider: ^3.0.0+1 27 | http: ^0.12.0+2 28 | 29 | dev_dependencies: 30 | flutter_test: 31 | sdk: flutter 32 | 33 | 34 | # For information on the generic Dart part of this file, see the 35 | # following page: https://dart.dev/tools/pub/pubspec 36 | 37 | # The following section is specific to Flutter. 38 | flutter: 39 | 40 | # The following line ensures that the Material Icons font is 41 | # included with your application, so that you can use the icons in 42 | # the material Icons class. 43 | uses-material-design: true 44 | 45 | # To add assets to your application, add an assets section, like this: 46 | # assets: 47 | # - images/a_dot_burr.jpeg 48 | # - images/a_dot_ham.jpeg 49 | 50 | # An image asset can refer to one or more resolution-specific "variants", see 51 | # https://flutter.dev/assets-and-images/#resolution-aware. 52 | 53 | # For details regarding adding assets from package dependencies, see 54 | # https://flutter.dev/assets-and-images/#from-packages 55 | 56 | # To add custom fonts to your application, add a fonts section here, 57 | # in this "flutter" section. Each entry in this list should have a 58 | # "family" key with the font family name, and a "fonts" key with a 59 | # list giving the asset and other descriptors for the font. For 60 | # example: 61 | # fonts: 62 | # - family: Schyler 63 | # fonts: 64 | # - asset: fonts/Schyler-Regular.ttf 65 | # - asset: fonts/Schyler-Italic.ttf 66 | # style: italic 67 | # - family: Trajan Pro 68 | # fonts: 69 | # - asset: fonts/TrajanPro.ttf 70 | # - asset: fonts/TrajanPro_Bold.ttf 71 | # weight: 700 72 | # 73 | # For details regarding fonts from package dependencies, 74 | # see https://flutter.dev/custom-fonts/#from-packages 75 | --------------------------------------------------------------------------------