Showing preview only (3,302K chars total). Download the full file or copy to clipboard to get everything.
Repository: brianegan/flutter_architecture_samples
Branch: main
Commit: d898d1329e04
Files: 1543
Total size: 2.9 MB
Directory structure:
gitextract_dwwl6a94/
├── .fvmrc
├── .github/
│ ├── actions/
│ │ ├── dart_analysis_and_tests/
│ │ │ └── action.yml
│ │ └── flutter_analysis_test_build/
│ │ └── action.yml
│ └── workflows/
│ └── analyze_test_build.yml
├── .gitignore
├── CNAME
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── app_spec.md
├── bloc_flutter/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── bloc_flutter_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── anonymous_user_repository.dart
│ │ ├── app.dart
│ │ ├── dependency_injection.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── loading.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ ├── todo_list.dart
│ │ └── todos_bloc_provider.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ └── home_screen_test.mocks.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── bloc_library/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── bloc_library/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── settings.gradle
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── ephemeral/
│ │ │ ├── flutter_lldb_helper.py
│ │ │ └── flutter_lldbinit
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── app.dart
│ │ ├── bloc_library_keys.dart
│ │ ├── blocs/
│ │ │ ├── blocs.dart
│ │ │ ├── filtered_todos/
│ │ │ │ ├── filtered_todos.dart
│ │ │ │ ├── filtered_todos_bloc.dart
│ │ │ │ ├── filtered_todos_event.dart
│ │ │ │ └── filtered_todos_state.dart
│ │ │ ├── simple_bloc_observer.dart
│ │ │ ├── stats/
│ │ │ │ ├── stats.dart
│ │ │ │ ├── stats_bloc.dart
│ │ │ │ ├── stats_event.dart
│ │ │ │ └── stats_state.dart
│ │ │ ├── tab/
│ │ │ │ ├── tab.dart
│ │ │ │ ├── tab_bloc.dart
│ │ │ │ └── tab_event.dart
│ │ │ └── todos/
│ │ │ ├── todos.dart
│ │ │ ├── todos_bloc.dart
│ │ │ ├── todos_event.dart
│ │ │ └── todos_state.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models/
│ │ │ ├── app_tab.dart
│ │ │ ├── extra_action.dart
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── details_screen.dart
│ │ │ ├── home_screen.dart
│ │ │ └── screens.dart
│ │ └── widgets/
│ │ ├── delete_todo_snack_bar.dart
│ │ ├── extra_actions.dart
│ │ ├── filter_button.dart
│ │ ├── filtered_todos.dart
│ │ ├── loading_indicator.dart
│ │ ├── stats.dart
│ │ ├── tab_selector.dart
│ │ ├── todo_item.dart
│ │ └── widgets.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── all_tests.dart
│ │ ├── blocs/
│ │ │ ├── filtered_todos_bloc_test.dart
│ │ │ ├── filtered_todos_event_test.dart
│ │ │ ├── simple_bloc_observer_test.dart
│ │ │ ├── stats_bloc_test.dart
│ │ │ ├── stats_event_test.dart
│ │ │ ├── tab_bloc_test.dart
│ │ │ ├── tab_event_test.dart
│ │ │ ├── todos_bloc_test.dart
│ │ │ ├── todos_event_test.dart
│ │ │ └── todos_state_test.dart
│ │ ├── localization_test.dart
│ │ ├── models/
│ │ │ └── todo_test.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen_test.dart
│ │ │ ├── details_screen_test.dart
│ │ │ └── home_screen_test.dart
│ │ └── widgets/
│ │ ├── delete_todo_snack_bar_test.dart
│ │ ├── extra_actions_test.dart
│ │ ├── filter_button_test.dart
│ │ ├── filtered_todos_test.dart
│ │ ├── loading_indicator_test.dart
│ │ ├── stats_tab_test.dart
│ │ ├── tab_selector_test.dart
│ │ └── todo_item_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── blocs/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib/
│ │ ├── blocs.dart
│ │ └── src/
│ │ ├── models/
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── stats_bloc.dart
│ │ ├── todo_bloc.dart
│ │ ├── todos_interactor.dart
│ │ ├── todos_list_bloc.dart
│ │ ├── user_bloc.dart
│ │ └── uuid.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── stats_bloc_test.dart
│ ├── stats_bloc_test.mocks.dart
│ ├── todo_bloc_test.dart
│ ├── todo_bloc_test.mocks.dart
│ ├── todos_bloc_test.dart
│ ├── todos_bloc_test.mocks.dart
│ ├── todos_interactor_test.dart
│ └── todos_interactor_test.mocks.dart
├── change_notifier_provider/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── change_notifier_provider_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ └── todo_list_model.dart
│ ├── line_count.md
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ ├── mock_repository.dart
│ │ └── todo_list_model_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── code-of-conduct.md
├── freezed_provider_value_notifier/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── freezed_provider_value_notifier/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ ├── todo_list_model.dart
│ │ ├── todo_list_model.freezed.dart
│ │ └── value_notifier_provider.dart
│ ├── line_count.md
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── app_state_test.dart
│ │ ├── home_screen_test.dart
│ │ └── mock_repository.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── index.html
├── inherited_widget/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── inherited_widget_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── app.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ ├── state_container.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ └── todo_list.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ └── app_state_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── integration_tests/
│ ├── .gitignore
│ ├── README.md
│ ├── lib/
│ │ ├── integration_tests.dart
│ │ └── page_objects/
│ │ ├── elements/
│ │ │ ├── extra_actions_element.dart
│ │ │ ├── filters_element.dart
│ │ │ ├── stats_element.dart
│ │ │ ├── test_element.dart
│ │ │ ├── todo_item_element.dart
│ │ │ └── todo_list_element.dart
│ │ ├── page_objects.dart
│ │ ├── screens/
│ │ │ ├── add_test_screen.dart
│ │ │ ├── details_test_screen.dart
│ │ │ ├── edit_test_screen.dart
│ │ │ ├── home_test_screen.dart
│ │ │ └── test_screen.dart
│ │ └── utils.dart
│ └── pubspec.yaml
├── line_count.md
├── mobx/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── mobx_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models/
│ │ │ ├── todo.dart
│ │ │ ├── todo.g.dart
│ │ │ └── todo_codec.dart
│ │ └── stores/
│ │ ├── todo_store.dart
│ │ └── todo_store.g.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ ├── mock_repository.dart
│ │ └── todo_store_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── mvi_base/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib/
│ │ ├── mvi_base.dart
│ │ └── src/
│ │ ├── models/
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ ├── user.dart
│ │ │ └── visibility_filter.dart
│ │ ├── mvi_core.dart
│ │ ├── mvi_stats.dart
│ │ ├── mvi_todo.dart
│ │ ├── mvi_todos_list.dart
│ │ ├── todo_list_interactor.dart
│ │ ├── user_interactor.dart
│ │ └── uuid.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── mvi_stats_test.dart
│ ├── mvi_stats_test.mocks.dart
│ ├── mvi_todo_test.dart
│ ├── mvi_todo_test.mocks.dart
│ ├── mvi_todos_list_test.dart
│ ├── mvi_todos_list_test.mocks.dart
│ ├── todos_interactor_test.dart
│ ├── todos_interactor_test.mocks.dart
│ ├── user_interactor_test.dart
│ └── user_interactor_test.mocks.dart
├── mvi_flutter/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── mvi_flutter_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── anonymous_user_repository.dart
│ │ ├── dependency_injection.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── mvi_app.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── loading.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ └── todo_list.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ └── detail_screen_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── redux/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── redux_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── actions/
│ │ │ └── actions.dart
│ │ ├── app.dart
│ │ ├── containers/
│ │ │ ├── active_tab.dart
│ │ │ ├── add_todo.dart
│ │ │ ├── app_loading.dart
│ │ │ ├── edit_todo.dart
│ │ │ ├── extra_actions_container.dart
│ │ │ ├── filter_selector.dart
│ │ │ ├── filtered_todos.dart
│ │ │ ├── stats.dart
│ │ │ ├── tab_selector.dart
│ │ │ └── todo_details.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── middleware/
│ │ │ └── store_todos_middleware.dart
│ │ ├── models/
│ │ │ ├── app_state.dart
│ │ │ ├── app_tab.dart
│ │ │ ├── extra_action.dart
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── presentation/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── details_screen.dart
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── loading_indicator.dart
│ │ │ ├── stats_counter.dart
│ │ │ ├── todo_item.dart
│ │ │ ├── todo_list.dart
│ │ │ └── typedefs.dart
│ │ ├── reducers/
│ │ │ ├── app_state_reducer.dart
│ │ │ ├── loading_reducer.dart
│ │ │ ├── tabs_reducer.dart
│ │ │ ├── todos_reducer.dart
│ │ │ └── visibility_reducer.dart
│ │ └── selectors/
│ │ └── selectors.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── all_tests.dart
│ │ ├── middleware_test.dart
│ │ ├── middleware_test.mocks.dart
│ │ ├── reducer_test.dart
│ │ └── selectors_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── scoped_model/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── scoped_model_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── app.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ ├── todo_list_model.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ ├── todo_list.dart
│ │ └── typedefs.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ └── app_state_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── scripts/
│ ├── line_counter.sh
│ └── update_flutter.sh
├── signals/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── signals_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── todo.dart
│ │ ├── todo_codec.dart
│ │ └── todo_list_controller.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── todo_list_controller_test.dart
│ │ └── todo_list_controller_test.mocks.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── simple_bloc_flutter/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── simple_bloc_flutter_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── anonymous_user_repository.dart
│ │ ├── app.dart
│ │ ├── dependency_injection.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── loading.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ ├── todo_list.dart
│ │ └── todos_bloc_provider.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ └── home_screen_test.mocks.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── simple_blocs/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib/
│ │ ├── simple_blocs.dart
│ │ └── src/
│ │ ├── models/
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── stats_bloc.dart
│ │ ├── todo_bloc.dart
│ │ ├── todos_interactor.dart
│ │ ├── todos_list_bloc.dart
│ │ ├── user_bloc.dart
│ │ └── uuid.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── stats_bloc_test.dart
│ ├── stats_bloc_test.mocks.dart
│ ├── todo_bloc_test.dart
│ ├── todo_bloc_test.mocks.dart
│ ├── todos_bloc_test.dart
│ ├── todos_bloc_test.mocks.dart
│ ├── todos_interactor_test.dart
│ └── todos_interactor_test.mocks.dart
├── todos_app_core/
│ ├── README.md
│ ├── lib/
│ │ ├── src/
│ │ │ ├── keys.dart
│ │ │ ├── localization.dart
│ │ │ ├── localizations/
│ │ │ │ ├── messages_all.dart
│ │ │ │ └── messages_en.dart
│ │ │ ├── optional.dart
│ │ │ ├── routes.dart
│ │ │ ├── theme.dart
│ │ │ └── uuid.dart
│ │ └── todos_app_core.dart
│ └── pubspec.yaml
├── todos_repository_core/
│ ├── .gitignore
│ ├── README.md
│ ├── lib/
│ │ ├── src/
│ │ │ ├── reactive_repository.dart
│ │ │ ├── todo_entity.dart
│ │ │ ├── todos_repository.dart
│ │ │ ├── user_entity.dart
│ │ │ └── user_repository.dart
│ │ └── todos_repository_core.dart
│ └── pubspec.yaml
├── todos_repository_local_storage/
│ ├── .gitignore
│ ├── README.md
│ ├── lib/
│ │ ├── src/
│ │ │ ├── file_storage.dart
│ │ │ ├── key_value_storage.dart
│ │ │ ├── reactive_repository.dart
│ │ │ ├── repository.dart
│ │ │ └── web_client.dart
│ │ └── todos_repository_local_storage.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── all_tests.dart
│ ├── file_storage_test.dart
│ ├── key_value_storage_test.dart
│ ├── key_value_storage_test.mocks.dart
│ ├── reactive_repository_test.dart
│ ├── reactive_repository_test.mocks.dart
│ ├── repository_test.dart
│ └── repository_test.mocks.dart
└── vanilla/
├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── vanilla/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── values/
│ │ │ │ └── styles.xml
│ │ │ └── values-night/
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle.kts
├── integration_test/
│ └── app_test.dart
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ └── RunnerTests/
│ └── RunnerTests.swift
├── lib/
│ ├── app.dart
│ ├── localization.dart
│ ├── main.dart
│ ├── models.dart
│ ├── screens/
│ │ ├── add_edit_screen.dart
│ │ ├── detail_screen.dart
│ │ └── home_screen.dart
│ └── widgets/
│ ├── extra_actions_button.dart
│ ├── filter_button.dart
│ ├── stats_counter.dart
│ ├── todo_item.dart
│ ├── todo_list.dart
│ └── typedefs.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── RunnerTests/
│ └── RunnerTests.swift
├── pubspec.yaml
├── test/
│ └── app_state_test.dart
├── test_driver/
│ └── integration_test.dart
├── web/
│ ├── index.html
│ └── manifest.json
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .fvmrc
================================================
{
"flutter": "3.35.2"
}
================================================
FILE: .github/actions/dart_analysis_and_tests/action.yml
================================================
name: "Validate"
description: "Runs lint, format, and test on an app"
inputs:
working-directory:
description: "Directory to run validation in"
required: true
runs:
using: "composite"
steps:
- name: Set up flutter
uses: kuhnroyal/flutter-fvm-config-action/setup@v3
- name: Get dependencies
shell: bash
run: dart pub get
working-directory: ${{ inputs.working-directory }}
- name: Check dart formatting
shell: bash
run: dart format -o none --set-exit-if-changed .
working-directory: ${{ inputs.working-directory }}
- name: Check dart analysis
shell: bash
run: dart analyze --fatal-infos --fatal-warnings .
working-directory: ${{ inputs.working-directory }}
- name: Run unit tests and prepare coverage
shell: bash
run: |
dart pub global activate coverage
dart run test --coverage=coverage
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib
# Extract directory name for artifact naming
echo "DIR_NAME=$(basename "${{ inputs.working-directory }}")" >> $GITHUB_ENV
working-directory: ${{ inputs.working-directory }}
- name: Upload coverage artifact
uses: actions/upload-artifact@v4
with:
name: coverage-lcov-${{ env.DIR_NAME }}
path: ${{ inputs.working-directory }}/coverage/lcov.info
================================================
FILE: .github/actions/flutter_analysis_test_build/action.yml
================================================
name: "Validate"
description: "Runs lint, format, and test on an app"
inputs:
working-directory:
description: "Directory to run validation in"
required: true
run-integration-tests:
description: "Run integration tests"
required: false
default: "true"
deploy-to-netlify:
description: "Deploy to Netlify"
required: true
default: "false"
netlify-auth-token:
description: "Netlify auth token"
required: true
netlify-site-id:
description: "Netlify site id"
required: true
runs:
using: "composite"
steps:
- name: Set up flutter
uses: kuhnroyal/flutter-fvm-config-action/setup@v3
- name: Get dependencies
shell: bash
run: flutter pub get
working-directory: ${{ inputs.working-directory }}
- name: Check dart formatting
shell: bash
run: dart format -o none --set-exit-if-changed .
working-directory: ${{ inputs.working-directory }}
- name: Check dart analysis
shell: bash
run: dart analyze --fatal-infos --fatal-warnings .
working-directory: ${{ inputs.working-directory }}
- name: Run unit tests and prepare coverage
shell: bash
if: '[ -d "${{ inputs.working-directory }}/test" ]'
run: |
flutter test --coverage
# Extract directory name for artifact naming
echo "DIR_NAME=$(basename "${{ inputs.working-directory }}")" >> $GITHUB_ENV
working-directory: ${{ inputs.working-directory }}
- name: Upload coverage artifact
uses: actions/upload-artifact@v4
with:
name: coverage-lcov-${{ env.DIR_NAME }}
path: ${{ inputs.working-directory }}/coverage/lcov.info
- name: Run linux integration tests
if: ${{ inputs.run-integration-tests != 'false' }}
shell: bash
run: |
sudo apt-get update
sudo apt-get install \
clang \
cmake \
git \
ninja-build \
pkg-config \
libgtk-3-dev \
liblzma-dev \
libstdc++-12-dev \
libglu1-mesa \
xvfb
export DISPLAY=:99 # Set display for Xvfb
xvfb-run -a flutter test integration_test/app_test.dart -d linux
working-directory: ${{ inputs.working-directory }}
- name: Build web app
if: ${{ inputs.deploy-to-netlify != 'false' }}
shell: bash
run: |
flutter build web --wasm
working-directory: ${{ inputs.working-directory }}
- name: Deploy to Netlify
if: ${{ inputs.deploy-to-netlify != 'false' }}
uses: nwtgck/actions-netlify@v3.0
with:
publish-dir: ${{ inputs.working-directory }}/build/web
production-deploy: true
deploy-message: "Deploy from GitHub Actions"
env:
NETLIFY_AUTH_TOKEN: ${{ inputs.netlify-auth-token }}
NETLIFY_SITE_ID: ${{ inputs.netlify-site-id }}
================================================
FILE: .github/workflows/analyze_test_build.yml
================================================
name: Static Analysis, Run Tests and Build Web Apps
on:
pull_request:
push:
branches:
- main
jobs:
bloc_flutter:
name: bloc_flutter
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./bloc_flutter
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.BLOC_FLUTTER_NETLIFY_SITE_ID }}
bloc_library:
name: bloc_library
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./bloc_library
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.BLOC_LIBRARY_NETLIFY_SITE_ID }}
blocs:
name: blocs
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/dart_analysis_and_tests
with:
working-directory: ./blocs
change_notifier_provider:
name: change_notifier_provider
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./change_notifier_provider
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.CHANGE_NOTIFIER_PROVIDER_NETLIFY_SITE_ID }}
freezed_provider_value_notifier:
name: freezed_provider_value_notifier
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./freezed_provider_value_notifier
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.FREEZED_PROVIDER_VALUE_NOTIFIER_NETLIFY_SITE_ID }}
inherited_widget:
name: inherited_widget
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./inherited_widget
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.INHERITED_WIDGET_NETLIFY_SITE_ID }}
mobx:
name: mobx
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./mobx
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.MOBX_NETLIFY_SITE_ID }}
mvi_base:
name: mvi_base
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/dart_analysis_and_tests
with:
working-directory: ./mvi_base
mvi_flutter:
name: mvi_flutter
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./mvi_flutter
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.MVI_NETLIFY_SITE_ID }}
redux:
name: redux
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./redux
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.REDUX_NETLIFY_SITE_ID }}
scoped_model:
name: scoped_model
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./scoped_model
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.SCOPED_MODEL_NETLIFY_SITE_IT }}
signals:
name: signals
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./signals
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.SIGNALS_NETLIFY_SITE_ID }}
simple_bloc_flutter:
name: simple_bloc_flutter
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./simple_bloc_flutter
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.SIMPLE_BLOC_NETLIFY_SITE_ID }}
simple_blocs:
name: simple_blocs
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/dart_analysis_and_tests
with:
working-directory: ./simple_blocs
todos_repository_local_storage:
name: todos_repository_local_storage
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./todos_repository_local_storage
run-integration-tests: false
vanilla:
name: vanilla
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Static Analysis, Run Tests, and Build web app
uses: ./.github/actions/flutter_analysis_test_build
with:
working-directory: ./vanilla
deploy-to-netlify: ${{ github.ref_name == 'main' }}
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
netlify-site-id: ${{ secrets.VANILLA_NETLIFY_SITE_ID }}
combine_and_upload_coverage:
name: Combine and Upload Coverage
runs-on: ubuntu-latest
needs:
- bloc_flutter
- bloc_library
- blocs
- change_notifier_provider
- freezed_provider_value_notifier
- inherited_widget
- mobx
- mvi_base
- mvi_flutter
- redux
- scoped_model
- signals
- simple_bloc_flutter
- simple_blocs
- todos_repository_local_storage
- vanilla
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download coverage artifacts
uses: actions/download-artifact@v4
with:
path: .
- name: Combine coverage files
run: |
combineCoverage() {
local artifact_dir=$1
local repo_dir=$2
# Extract the package directory path from the artifact name
# coverage-lcov-vanilla -> ./vanilla
local package_name=$(basename "$artifact_dir")
local package_dir="./${package_name#coverage-lcov-}"
escapedPath="$(echo $package_dir | sed 's/\//\\\//g')"
if [[ -d "$artifact_dir" ]]; then
# Find the lcov.info file in the artifact directory
for lcov_file in "$artifact_dir"/*.info; do
if [[ -f "$lcov_file" ]]; then
echo "Combining coverage from $package_dir"
# combine line coverage info from package tests to a common file
sed "s/^SF:lib/SF:$escapedPath\/lib/g" "$lcov_file" >> "$repo_dir/lcov.info"
break
fi
done
fi
}
# Initialize the combined coverage file
touch lcov.info
# Combine coverage from all downloaded artifacts
for artifact_dir in coverage-lcov-*/; do
if [[ -d "$artifact_dir" ]]; then
combineCoverage "$artifact_dir" "."
fi
done
echo "Combined coverage file created:"
ls -la lcov.info
echo "First few lines of combined coverage:"
head -10 lcov.info
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: ./lcov.info
disable_search: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .gitignore
================================================
# Files and directories created by pub
.packages
.pub/
build/
# Remove the following pattern if you wish to check in your lock file
pubspec.lock
# Directory created by dartdoc
doc/api/
.idea
*.iml
/intl_en.arb
.DS_Store
# coverage
coverage/
lcov.info
# tests
.flutter-plugins
# Files generated by dart tools
.dart_tool
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.pub-cache/
/build/
# Android related
**/*/android/**/gradle-wrapper.jar
**/*/android/.gradle
**/*/android/captures/
**/*/android/gradlew
**/*/android/gradlew.bat
**/*/android/local.properties
**/*/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/*/ios/**/*.mode1v3
**/*/ios/**/*.mode2v3
**/*/ios/**/*.moved-aside
**/*/ios/**/*.pbxuser
**/*/ios/**/*.perspectivev3
**/*/ios/**/*sync/
**/*/ios/**/.sconsign.dblite
**/*/ios/**/.tags*
**/*/ios/**/.vagrant/
**/*/ios/**/DerivedData/
**/*/ios/**/Icon?
**/*/ios/**/Pods/
**/*/ios/**/.symlinks/
**/*/ios/**/profile
**/*/ios/**/xcuserdata
**/*/ios/.generated/
**/*/ios/Flutter/App.framework
**/*/ios/Flutter/Flutter.framework
**/*/ios/Flutter/Generated.xcconfig
**/*/ios/Flutter/app.flx
**/*/ios/Flutter/app.zip
**/*/ios/Flutter/flutter_assets/
**/*/ios/Flutter/flutter_export_environment.sh
**/*/ios/ServiceDefinitions.json
**/*/ios/Runner/GeneratedPluginRegistrant.*
**/.flutter-plugins-dependencies
# Exceptions to above rules.
!**/*/ios/**/default.mode1v3
!**/*/ios/**/default.mode2v3
!**/*/ios/**/default.pbxuser
!**/*/ios/**/default.perspectivev3
**/*/generated_plugin_registrant.dart
.vscode/
# FVM Version Cache
.fvm/
.cursor/
================================================
FILE: CNAME
================================================
fluttersamples.com
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Contributions are very welcome in many forms :)
## Issues
If you find a problem with any of the examples, please [file an issue on Github](https://github.com/brianegan/flutter_architecture_samples/issues).
## Merge Requests / New Apps
If you would like to fix a bug or make an improvement, please [file a pull request](https://github.com/brianegan/flutter_architecture_samples/pulls) explaining your changes!
For larger changes, such as a including a new app, please submit an Issue before you
begin or submit a "Work In Progress" Merge request that gives an overview of the changes you'd
like to make and the reasoning behind it!
### Code Hygiene
* Ensure your updates follow the app spec
* Ensure your code is properly formatted with `dartfmt`
* Please ensure tests are up to date
* Verify `dartanalyzer` isn't throwing any warning or errors/
================================================
FILE: LICENSE
================================================
Copyright (c) 2017, Flutter Architecture Sample Authors.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the <organization> nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: README.md
================================================
# flutter_architecture_samples
[](https://github.com/brianegan/flutter_architecture_samples/actions/workflows/analyze_test_build.ymll)
[](https://codecov.io/gh/brianegan/flutter_architecture_samples)
<img align="right" src="assets/todo-list.png" alt="List of Todos Screen">
[TodoMVC](http://todomvc.com) for Flutter!
Flutter provides a lot of flexibility in deciding how to organize and architect
your apps. While this freedom is very valuable, it can also lead to apps with
large classes, inconsistent naming schemes, as well as mismatching or missing
architectures. These types of issues can make testing, maintaining and extending
your apps difficult.
The Flutter Architecture Samples project demonstrates strategies to help solve
or avoid these common problems. This project implements the same app using
different architectural concepts and tools.
You can use the samples in this project as a learning reference, as a roughly
apples-to-apples comparison of different approaches, or as a starting point for
creating your own apps. The focus of this project is on demonstrating how to
structure your code, design your architecture, and the eventual impact of
adopting these patterns on testing and maintaining your app. You can use the
techniques demonstrated here in many different ways to build apps. Your own
particular priorities will impact how you implement the concepts in these
projects, so you should not consider these samples to be canonical examples. To
ensure the focus is kept on the aims described above, the app uses a simple UI.
### Current Samples
- [Vanilla Lifting State Up Example](vanilla) ([Web Demo](https://fas-vanilla.netlify.app)) - Uses the tools Flutter provides out of the box to manage app state.
- [InheritedWidget Example](inherited_widget) ([Web Demo](https://fas-inherited-widget.netlify.app)) - Uses an InheritedWidget to pass app state down the widget hierarchy.
- [Change Notifier + Provider Example](change_notifier_provider) ([Web Demo](https://fas-change-notifier-provider.netlify.app)) - Uses the [ChangeNotifier](https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package now recommended by the Flutter team.
- [Freezed + Provider + Value Notifier](freezed_provider_value_notifier) ([Web Demo](https://fas-freezed-provider-value-notifier.netlify.app)) - Uses the [ValueNotifier](https://api.flutter.dev/flutter/foundation/ValueNotifier-class.html) class from Flutter with [provider](https://pub.dev/packages/provider) package.
- [BLoC Example](bloc_flutter) ([Web Demo](https://fas-bloc-flutter.netlify.app/)) - An implementation of the original [BLoC pattern](https://www.youtube.com/watch?v=PLHln7wHgPE&list=PLOU2XLYxmsIIJr3vjxggY7yGcGO7i9BK5&index=13) described by Paolo Soares at DartConf 2018, which uses Sinks for Inputs and Streams for Outputs
- [Bloc Library Example](bloc_library) ([Web Demo](https://fas-bloc-library.netlify.app)) - Uses the [bloc](https://pub.dartlang.org/packages/bloc) and [flutter_bloc](https://pub.dartlang.org/packages/flutter_bloc) libraries to manage app state and update Widgets.
- [MobX Example](mobx) ([Web Demo](https://fas-mobx.netlify.app)) - Uses the [MobX](https://pub.dev/packages/mobx) library to manage app state and update widgets using `Observables`, `Actions` and `Reactions`.
- [Redux Example](redux) ([Web Demo](https://fas-redux.netlify.app)) - Uses the [Redux](https://pub.dartlang.org/packages/redux) library to manage app state and update Widgets
- ["Simple" BLoC Example](simple_bloc_flutter) ([Web Demo](https://fas-simple-bloc.netlify.app/)) - Similar to the BLoC pattern, but uses Functions for Inputs and Streams for Outputs. Results in far less code compared to original BLoC pattern if code sharing with AngularDart apps isn't an important use case for your app.
- [Signals Example](signals) ([Web Demo](https://fas-signals.netlify.app)) - Uses the [Signals](https://pub.dev/packages/signals) package by [Rody Davis](https://pub.dev/publishers/rodydavis.com/packages).
- [MVI Example](mvi_flutter) ([Web Demo](https://fas-mvi.netlify.app)) - Uses the concepts from [Cycle.JS](https://cycle.js.org/) and applies them to Flutter.
- [scoped_model Example](scoped_model) ([Web Demo](https://fas-scoped-model.netlify.app)) - Uses the [scoped_model](https://pub.dartlang.org/packages/scoped_model) library to hold app state and notify Widgets of Updates
### Supporting Code
- [integration_tests](integration_tests) - Demonstrates how to write
selenium-style integration (aka end to end) tests using the Page Object Model.
This test suite is run against all samples.
- [todos_repository_core](todos_repository_core) - Defines the core abstract
classes for loading and saving data so that storage can be implemented in
various ways, such as file storage or firebase for mobile projects, or
window.localStorage for web projects.
- [todos_repository_local_storage](todos_repository_local_storage) - Implements
the todos repository using the file system, window.localStorage, and
SharedPreferences as the data source.
### Running the samples
```
cd <sample_directory>
flutter run
```
### Why a todo app?
The app in this project aims to be as simple as possible while still showcasing
different design decisions and testing scenarios. For more information, see the
[app's specification](app_spec.md).
### Be excellent to each other
This Repo is meant as a discussion platform for various architectures. Let us
debate these ideas vigorously, but let us be excellent to each other in the
process!
While healthy debate and contributions are very welcome, trolls are not. Read
the [code of conduct](code-of-conduct.md) for detailed information.
### Contributing
Feel free to join in the discussion, file issues, and we'd love to have more
samples added! Please read the [CONTRIBUTING](CONTRIBUTING.md) file for guidance
:)
### License
All code in this repo is MIT licensed.
## Attribution
All of these ideas and even some of the language are directly influenced by two
projects:
- [TodoMVC](http://todomvc.com) - A Todo App implemented in various JS frameworks
- [Android Architecture Blueprints](https://github.com/googlesamples/android-architecture) - A similar concept, but for Android! The UI and app spec was highly inspired by their example.
## Contributors
- [Brian Egan](https://github.com/brianegan)
- [Maurice McCabe](https://github.com/mmcc007)
- [David Marne](https://github.com/davidmarne)
- [Pascal Welsch](https://github.com/passsy)
- [Larry King](https://github.com/kinggolf)
- [Frank Harper](https://github.com/franklinharper)
- [Pavel Shilyagov](https://github.com/p69)
- [Leo Cavalcante](https://github.com/leocavalcante)
- [Greg Perry](https://github.com/AndriousSolutions)
- [Felix Angelov](https://github.com/felangel)
- [Francesco Mineo](https://github.com/frideosapps)
- [Pavan Podila](https://github.com/pavanpodila)
- [Kushagra Saxena](https://github.com/kush3107)
- [Shakib Hossain](https://github.com/shakib609)
- [Mellati Fatah](https://github.com/GIfatahTH)
I'd like to thank all of the folks who have helped write new samples, improve
the current implementations, and added documentation! You're amazing! :)
================================================
FILE: app_spec.md
================================================
# Application Specification
We have created this short spec to help you create consistent todo apps. Consistency is key to form an "apples to apples" comparison between different approaches.
## Reference Application
The [vanilla](vanilla/) implementation should be used as the reference app and as a base when implementing a new todo app. Before implementing your own, we recommend that you interact with some of the other apps to see how they're built and how they behave. If something is unclear or could be improved, [let us know](https://github.com/brianegan/flutter_architecture_samples/issues).
Your app should look and behave exactly like the template and the other examples.
## README
All examples must include a README describing the general implementation, any frameworks used, and the build process if required. Please check the [vanilla](vanilla/) implementation for an example.
## Code
- Format your code with `dartfmt`
- Use the `.analysis_options.yaml` from the vanilla implementation and ensure there are no analysis errors
- Use the Theme and Widgets provided by the base package for the visual look, unless it makes sense to demonstrate an alternative practice.
- Your app should work on all platforms
- Your app should contain tests
- Your app must pass the integration tests
## User Interface
### Home Screen
The home contains two Tabs: the List of Todos and Stats about the Todos.
### List of Todos

- Shows a loading screen until the Todos have been loaded from file storage or the web
- Displays the list of Todos entered by the User
- User can add a new todo by tapping the "+" button. This will take the user to a new Screen.
- User can tap on each todo to Enter the Todo Details Screen
- User can tap on the checkbox for each todo to mark it as complete / incomplete
- User can delete any todo by swiping it away. When this happens, a SnackBar must be displayed with the Title of the Todo and a button to Undo this action. When the Undo button is clicked, the removed item should be appended to the end of the Todo List.
- User can Filter the list of Todos using the Filter Icon in the top-right
- User can Mark All todos completed or Clear all completed todos using the Overflow menu on the top right
### Add todo

- The task is entered into the `TextField` at the top of the screen. The task `TextField` should be focused when the "Add New Todo" screen opens. In order to add a new todo, the task field must not be empty. Make sure to `.trim()` the input and then check that it's not empty before creating a new todo. If the task contains no text, show an error.
- A Note `TextField` must exist to store notes related to the todo.
- Pressing the "+" button closes the "Add New Todo" screen and appends the new todo to the List of Todos.
- Pressing the Back Button will close the screen without creating a new todo
### Todo Details Screen

- User can see the Task and the complete text of the note.
- User can tap the Checkbox to mark the todo as complete / incomplete. This update must be reflected on the main Todos screen when the user navigates back.
- User can "Edit" the todo by tapping the "Edit" button. This will take the user to "Edit Screen".
- User can Delete the Todo by tapping the Icon in the top-right of the screen. When the button is tapped, the details Screen should be closed and the user should be presented with the List of Todos. A SnackBar must be displayed with the Title of the Todo that was just removed and a button to Undo this action. When the Undo button is clicked, the removed item should be appended to the end of the Todo List.
### Edit Todo Screen

- The task is shown in an editable `TextField` at the top of the screen. The task `TextField` should NOT be focused when the "Edit New Todo" screen opens. In order to make changes to the todo, the task field must not be empty. Make sure to `.trim()` the input and then check that it's not empty before updating the todo. If the task contains no text, show an error.
- The note is shown in an editable `TextField` below the task.
- Pressing the "✓" button closes the "Edit Todo Screen" and returns the User to the "Todo Details Screen." Any changes made in the Edit Screen should be reflected on the Details screen.
- Pressing the Back button will close the screen without making changes to the todo.
### Filter Todos

- User can filter to show All Todos (Active and Complete)
- User can filter to show ONLY active todos
- User can filter to show ONLY completed todos
- Current Selection should be highlighted
### Overflow Menu

- If all or some todos are incomplete, the "mark all" button should read "Mark all complete". When pressed, it should ensure all todos in the list are marked as complete.
- If all the todos are marked as complete, the "mark all" button should read "Mark all incomplete". When pressed, it should ensure all todos in the list are marked as incomplete.
- User can Removes completed todos when clicked. Should be hidden when there are no completed todos.
### Stats Screen

- Shows the number of Completed todos
- Shows the number of active todos
- Filter Menu in the top right should be hidden on this tab
- Using overflow menu to mark all as complete / incomplete or clear completed todos should cause the stats to update.
## Data Sources
There are three levels of data persistence:
- In-memory cache - Fast
- Disk (File, SQLiteDb) - Slow
- Network - Very slow (Mocked out)
Synchronization between layers is hard and depends on the case so it's out of the scope for the samples. The chosen sync implementation is very simple:
- In every get operation:
- Return in-memory cache if available, or
- return info from disk
- return info from network
- Every write/delete operation will simply:
- Update cache
- Update local
- Update remote
Note that after the first request to the network, it's never hit again. In addition, in these examples, it's totally fine to use a Mock web service as a demonstration without the complication of setting up / talking to a real service.
## Testing
### Unit / Widget tests
Please include tests with your app! How easy it is to test an architecture is an important consideration when choosing which approach will work best for your project or team.
You do not need to write an exhaustive suite of Widget tests, but if the architecture lends itself to easy widget testing, please include a demonstration!
### Integration Tests
All samples should pass the integration test suite. Please see the `integration_tests` folder for more information, and check out the `test_driver` folder in an existing example as a reference.
## Routing
- App must have 2 named routes:
- `/` - Takes you to the main tabs screen
- `/addTodo` - Takes you to the add todo screen
To get to the Details and Edit screens, you can either use a named route or push a new Route directly with the Navigator.
================================================
FILE: bloc_flutter/.gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.packages
.pub-cache/
.pub/
/build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
================================================
FILE: bloc_flutter/.metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "05db9689081f091050f01aed79f04dce0c750154"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
- platform: android
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
- platform: ios
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
- platform: linux
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
- platform: macos
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
- platform: web
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
- platform: windows
create_revision: 05db9689081f091050f01aed79f04dce0c750154
base_revision: 05db9689081f091050f01aed79f04dce0c750154
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
================================================
FILE: bloc_flutter/README.md
================================================
# bloc_flutter
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
================================================
FILE: bloc_flutter/analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
analyzer:
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at https://dart.dev/lints.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
================================================
FILE: bloc_flutter/android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
.cxx/
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
key.properties
**/*.keystore
**/*.jks
================================================
FILE: bloc_flutter/android/app/build.gradle.kts
================================================
plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "com.example.bloc_flutter_sample"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "com.example.bloc_flutter_sample"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig = signingConfigs.getByName("debug")
}
}
}
flutter {
source = "../.."
}
================================================
FILE: bloc_flutter/android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: bloc_flutter/android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="bloc_flutter_sample"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
</manifest>
================================================
FILE: bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter_sample/MainActivity.kt
================================================
package com.example.bloc_flutter_sample
import io.flutter.embedding.android.FlutterActivity
class MainActivity : FlutterActivity()
================================================
FILE: bloc_flutter/android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
================================================
FILE: bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
================================================
FILE: bloc_flutter/android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: bloc_flutter/android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: bloc_flutter/android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: bloc_flutter/android/build.gradle.kts
================================================
allprojects {
repositories {
google()
mavenCentral()
}
}
val newBuildDir: Directory =
rootProject.layout.buildDirectory
.dir("../../build")
.get()
rootProject.layout.buildDirectory.value(newBuildDir)
subprojects {
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
project.layout.buildDirectory.value(newSubprojectBuildDir)
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
================================================
FILE: bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
================================================
FILE: bloc_flutter/android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
================================================
FILE: bloc_flutter/android/settings.gradle.kts
================================================
pluginManagement {
val flutterSdkPath =
run {
val properties = java.util.Properties()
file("local.properties").inputStream().use { properties.load(it) }
val flutterSdkPath = properties.getProperty("flutter.sdk")
require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
flutterSdkPath
}
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.9.1" apply false
id("org.jetbrains.kotlin.android") version "2.1.0" apply false
}
include(":app")
================================================
FILE: bloc_flutter/integration_test/app_test.dart
================================================
import 'package:bloc_flutter_sample/anonymous_user_repository.dart';
import 'package:bloc_flutter_sample/app.dart';
import 'package:blocs/blocs.dart';
import 'package:integration_tests/integration_tests.dart' as integration_tests;
import 'package:shared_preferences/shared_preferences.dart';
import 'package:todos_repository_local_storage/todos_repository_local_storage.dart';
void main() {
integration_tests.run(
appBuilder: () async {
return BlocApp(
todosInteractor: TodosInteractor(
ReactiveLocalStorageRepository(
repository: LocalStorageRepository(
localStorage: KeyValueStorage(
'bloc_flutter_test_${DateTime.now().toIso8601String()}',
await SharedPreferences.getInstance(),
),
),
),
),
userRepository: AnonymousUserRepository(),
);
},
);
}
================================================
FILE: bloc_flutter/ios/.gitignore
================================================
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3
================================================
FILE: bloc_flutter/ios/Flutter/AppFrameworkInfo.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>13.0</string>
</dict>
</plist>
================================================
FILE: bloc_flutter/ios/Flutter/Debug.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
================================================
FILE: bloc_flutter/ios/Flutter/Release.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
================================================
FILE: bloc_flutter/ios/Podfile
================================================
# Uncomment this line to define a global platform for your project
# platform :ios, '13.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
================================================
FILE: bloc_flutter/ios/Runner/AppDelegate.swift
================================================
import Flutter
import UIKit
@main
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
================================================
FILE: bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: bloc_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: bloc_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
================================================
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
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.
================================================
FILE: bloc_flutter/ios/Runner/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>
================================================
FILE: bloc_flutter/ios/Runner/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
================================================
FILE: bloc_flutter/ios/Runner/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Bloc Flutter Sample</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>bloc_flutter_sample</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>
================================================
FILE: bloc_flutter/ios/Runner/Runner-Bridging-Header.h
================================================
#import "GeneratedPluginRegistrant.h"
================================================
FILE: bloc_flutter/ios/Runner.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 97C146E61CF9000F007C117D /* Project object */;
proxyType = 1;
remoteGlobalIDString = 97C146ED1CF9000F007C117D;
remoteInfo = Runner;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
331C8082294A63A400263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
331C807B294A618700263BE5 /* RunnerTests.swift */,
);
path = RunnerTests;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
331C8080294A63A400263BE5 /* RunnerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */,
);
buildRules = (
);
dependencies = (
331C8086294A63A400263BE5 /* PBXTargetDependency */,
);
name = RunnerTests;
productName = RunnerTests;
productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
CreatedOnToolsVersion = 14.0;
TestTargetID = 97C146ED1CF9000F007C117D;
};
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
LastSwiftMigration = 1100;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
331C8080294A63A400263BE5 /* RunnerTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
331C807F294A63A400263BE5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
331C807D294A63A400263BE5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 97C146ED1CF9000F007C117D /* Runner */;
targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 8W92H589V9;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Debug;
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Release;
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 8W92H589V9;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 8W92H589V9;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
331C8088294A63A400263BE5 /* Debug */,
331C8089294A63A400263BE5 /* Release */,
331C808A294A63A400263BE5 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
================================================
FILE: bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
================================================
FILE: bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
================================================
FILE: bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1510"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "331C8080294A63A400263BE5"
BuildableName = "RunnerTests.xctest"
BlueprintName = "RunnerTests"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: bloc_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
================================================
FILE: bloc_flutter/ios/RunnerTests/RunnerTests.swift
================================================
import Flutter
import UIKit
import XCTest
class RunnerTests: XCTestCase {
func testExample() {
// If you add code to the Runner application, consider adding tests here.
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
}
}
================================================
FILE: bloc_flutter/lib/anonymous_user_repository.dart
================================================
import 'package:todos_repository_core/todos_repository_core.dart';
class AnonymousUserRepository implements UserRepository {
@override
Future<UserEntity> login() async =>
UserEntity(id: 'anonymous', displayName: '', photoUrl: '');
}
================================================
FILE: bloc_flutter/lib/app.dart
================================================
import 'package:bloc_flutter_sample/dependency_injection.dart';
import 'package:bloc_flutter_sample/localization.dart';
import 'package:bloc_flutter_sample/screens/add_edit_screen.dart';
import 'package:bloc_flutter_sample/screens/home_screen.dart';
import 'package:bloc_flutter_sample/widgets/todos_bloc_provider.dart';
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
import 'package:todos_repository_core/todos_repository_core.dart';
class BlocApp extends StatelessWidget {
final TodosInteractor todosInteractor;
final UserRepository userRepository;
const BlocApp({
super.key,
required this.todosInteractor,
required this.userRepository,
});
@override
Widget build(BuildContext context) {
return Injector(
todosInteractor: todosInteractor,
userRepository: userRepository,
child: TodosBlocProvider(
bloc: TodosListBloc(todosInteractor),
child: MaterialApp(
onGenerateTitle: (context) => BlocLocalizations.of(context).appTitle,
theme: ArchSampleTheme.lightTheme,
darkTheme: ArchSampleTheme.darkTheme,
localizationsDelegates: [
ArchSampleLocalizationsDelegate(),
BlocLocalizationsDelegate(),
],
routes: {
ArchSampleRoutes.home: (context) {
return HomeScreen(
userRepository: Injector.of(context).userRepository,
);
},
ArchSampleRoutes.addTodo: (context) {
return AddEditScreen(
addTodo: TodosBlocProvider.of(context).addTodo.add,
);
},
},
),
),
);
}
}
================================================
FILE: bloc_flutter/lib/dependency_injection.dart
================================================
import 'package:blocs/blocs.dart';
import 'package:flutter/widgets.dart';
import 'package:todos_repository_core/todos_repository_core.dart';
class Injector extends InheritedWidget {
final TodosInteractor todosInteractor;
final UserRepository userRepository;
const Injector({
super.key,
required this.todosInteractor,
required this.userRepository,
required super.child,
});
static Injector of(BuildContext context) =>
context.dependOnInheritedWidgetOfExactType<Injector>()!;
@override
bool updateShouldNotify(Injector oldWidget) =>
todosInteractor != oldWidget.todosInteractor ||
userRepository != oldWidget.userRepository;
}
================================================
FILE: bloc_flutter/lib/localization.dart
================================================
import 'dart:async';
import 'package:flutter/material.dart';
class BlocLocalizations {
static BlocLocalizations of(BuildContext context) {
return Localizations.of<BlocLocalizations>(context, BlocLocalizations)!;
}
String get appTitle => 'Bloc Example';
}
class BlocLocalizationsDelegate
extends LocalizationsDelegate<BlocLocalizations> {
@override
Future<BlocLocalizations> load(Locale locale) =>
Future(() => BlocLocalizations());
@override
bool shouldReload(BlocLocalizationsDelegate old) => false;
@override
bool isSupported(Locale locale) =>
locale.languageCode.toLowerCase().contains('en');
}
================================================
FILE: bloc_flutter/lib/main.dart
================================================
import 'dart:async';
import 'package:bloc_flutter_sample/anonymous_user_repository.dart';
import 'package:bloc_flutter_sample/app.dart';
import 'package:blocs/blocs.dart';
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:todos_repository_local_storage/todos_repository_local_storage.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(
BlocApp(
todosInteractor: TodosInteractor(
ReactiveLocalStorageRepository(
repository: LocalStorageRepository(
localStorage: KeyValueStorage(
'bloc_todos',
await SharedPreferences.getInstance(),
),
),
),
),
userRepository: AnonymousUserRepository(),
),
);
}
================================================
FILE: bloc_flutter/lib/screens/add_edit_screen.dart
================================================
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class AddEditScreen extends StatefulWidget {
final Todo? todo;
final void Function(Todo)? addTodo;
final void Function(Todo)? updateTodo;
const AddEditScreen({
super.key = ArchSampleKeys.addTodoScreen,
this.todo,
this.addTodo,
this.updateTodo,
});
@override
AddEditScreenState createState() => AddEditScreenState();
}
class AddEditScreenState extends State<AddEditScreen> {
static final GlobalKey<FormState> formKey = GlobalKey<FormState>();
late String _task;
late String _note;
@override
Widget build(BuildContext context) {
final isEditing = widget.todo != null;
return Scaffold(
appBar: AppBar(
title: Text(
isEditing
? ArchSampleLocalizations.of(context).editTodo
: ArchSampleLocalizations.of(context).addTodo,
),
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: Form(
key: formKey,
autovalidateMode: AutovalidateMode.always,
canPop: true,
child: ListView(
children: [
TextFormField(
initialValue: isEditing ? widget.todo!.task : '',
key: ArchSampleKeys.taskField,
autofocus: isEditing ? false : true,
style: Theme.of(context).textTheme.headlineSmall,
decoration: InputDecoration(
hintText: ArchSampleLocalizations.of(context).newTodoHint,
),
validator: (val) => val != null && val.trim().isEmpty
? ArchSampleLocalizations.of(context).emptyTodoError
: null,
onSaved: (value) => _task = value ?? '',
),
TextFormField(
initialValue: isEditing ? widget.todo!.note : '',
key: ArchSampleKeys.noteField,
maxLines: 10,
style: Theme.of(context).textTheme.titleMedium,
decoration: InputDecoration(
hintText: ArchSampleLocalizations.of(context).notesHint,
),
onSaved: (value) => _note = value ?? '',
),
],
),
),
),
floatingActionButton: FloatingActionButton(
key: isEditing
? ArchSampleKeys.saveTodoFab
: ArchSampleKeys.saveNewTodo,
tooltip: isEditing
? ArchSampleLocalizations.of(context).saveChanges
: ArchSampleLocalizations.of(context).addTodo,
child: Icon(isEditing ? Icons.check : Icons.add),
onPressed: () {
final form = formKey.currentState;
if (form!.validate()) {
form.save();
if (isEditing) {
widget.updateTodo!(
widget.todo!.copyWith(task: _task, note: _note),
);
} else {
widget.addTodo!(Todo(_task, note: _note));
}
Navigator.pop(context);
}
},
),
);
}
}
================================================
FILE: bloc_flutter/lib/screens/detail_screen.dart
================================================
import 'package:bloc_flutter_sample/screens/add_edit_screen.dart';
import 'package:bloc_flutter_sample/widgets/loading.dart';
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class DetailScreen extends StatefulWidget {
final String todoId;
final TodoBloc Function() initBloc;
const DetailScreen({
super.key = ArchSampleKeys.todoDetailsScreen,
required this.todoId,
required this.initBloc,
});
@override
DetailScreenState createState() {
return DetailScreenState();
}
}
class DetailScreenState extends State<DetailScreen> {
late TodoBloc todoBloc;
@override
void initState() {
super.initState();
todoBloc = widget.initBloc();
}
@override
void dispose() {
todoBloc.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return StreamBuilder<Todo>(
stream: todoBloc.todo(widget.todoId),
builder: (context, snapshot) {
if (!snapshot.hasData) return LoadingSpinner();
final todo = snapshot.data!;
return Scaffold(
appBar: AppBar(
title: Text(ArchSampleLocalizations.of(context).todoDetails),
actions: [
IconButton(
key: ArchSampleKeys.deleteTodoButton,
tooltip: ArchSampleLocalizations.of(context).deleteTodo,
icon: Icon(Icons.delete),
onPressed: () {
todoBloc.deleteTodo.add(todo.id);
Navigator.pop(context, todo);
},
),
],
),
body: Padding(
padding: EdgeInsets.all(16.0),
child: ListView(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(right: 8.0),
child: Checkbox(
value: todo.complete,
key: ArchSampleKeys.detailsTodoItemCheckbox,
onChanged: (complete) {
todoBloc.updateTodo.add(
todo.copyWith(complete: !todo.complete),
);
},
),
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(top: 8.0, bottom: 16.0),
child: Text(
todo.task,
key: ArchSampleKeys.detailsTodoItemTask,
style: Theme.of(context).textTheme.headlineSmall,
),
),
Text(
todo.note,
key: ArchSampleKeys.detailsTodoItemNote,
style: Theme.of(context).textTheme.titleMedium,
),
],
),
),
],
),
],
),
),
floatingActionButton: FloatingActionButton(
tooltip: ArchSampleLocalizations.of(context).editTodo,
key: ArchSampleKeys.editTodoFab,
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (context) {
return AddEditScreen(
todo: todo,
updateTodo: todoBloc.updateTodo.add,
key: ArchSampleKeys.editTodoScreen,
);
},
),
);
},
child: Icon(Icons.edit),
),
);
},
);
}
}
================================================
FILE: bloc_flutter/lib/screens/home_screen.dart
================================================
import 'dart:async';
import 'package:bloc_flutter_sample/dependency_injection.dart';
import 'package:bloc_flutter_sample/localization.dart';
import 'package:bloc_flutter_sample/widgets/extra_actions_button.dart';
import 'package:bloc_flutter_sample/widgets/filter_button.dart';
import 'package:bloc_flutter_sample/widgets/loading.dart';
import 'package:bloc_flutter_sample/widgets/stats_counter.dart';
import 'package:bloc_flutter_sample/widgets/todo_list.dart';
import 'package:bloc_flutter_sample/widgets/todos_bloc_provider.dart';
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';
import 'package:todos_app_core/todos_app_core.dart';
import 'package:todos_repository_core/todos_repository_core.dart';
enum AppTab { todos, stats }
class HomeScreen extends StatefulWidget {
final UserRepository userRepository;
const HomeScreen({
super.key = ArchSampleKeys.homeScreen,
required this.userRepository,
});
@override
State<StatefulWidget> createState() {
return HomeScreenState();
}
}
class HomeScreenState extends State<HomeScreen> {
late UserBloc usersBloc;
late StreamController<AppTab> tabController;
@override
void initState() {
super.initState();
usersBloc = UserBloc(widget.userRepository);
tabController = StreamController<AppTab>();
}
@override
void dispose() {
tabController.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
final todosBloc = TodosBlocProvider.of(context);
return StreamBuilder<UserEntity>(
stream: usersBloc.login(),
builder: (context, userSnapshot) {
return StreamBuilder<AppTab>(
initialData: AppTab.todos,
stream: tabController.stream,
builder: (context, activeTabSnapshot) {
return Scaffold(
appBar: AppBar(
title: Text(BlocLocalizations.of(context).appTitle),
actions: _buildActions(
todosBloc,
activeTabSnapshot,
userSnapshot.hasData,
),
),
body: userSnapshot.hasData
? activeTabSnapshot.data == AppTab.todos
? TodoList()
: StatsCounter(
buildBloc: () =>
StatsBloc(Injector.of(context).todosInteractor),
)
: LoadingSpinner(key: ArchSampleKeys.todosLoading),
floatingActionButton: FloatingActionButton(
key: ArchSampleKeys.addTodoFab,
onPressed: () {
Navigator.pushNamed(context, ArchSampleRoutes.addTodo);
},
tooltip: ArchSampleLocalizations.of(context).addTodo,
child: Icon(Icons.add),
),
bottomNavigationBar: BottomNavigationBar(
key: ArchSampleKeys.tabs,
currentIndex: AppTab.values.indexOf(activeTabSnapshot.data!),
onTap: (index) {
tabController.add(AppTab.values[index]);
},
items: AppTab.values.map((tab) {
return BottomNavigationBarItem(
icon: Icon(
tab == AppTab.todos ? Icons.list : Icons.show_chart,
key: tab == AppTab.stats
? ArchSampleKeys.statsTab
: ArchSampleKeys.todoTab,
),
label: tab == AppTab.stats
? ArchSampleLocalizations.of(context).stats
: ArchSampleLocalizations.of(context).todos,
);
}).toList(),
),
);
},
);
},
);
}
List<Widget> _buildActions(
TodosListBloc todosBloc,
AsyncSnapshot<AppTab> activeTabSnapshot,
bool hasData,
) {
if (!hasData) return [];
return [
StreamBuilder<VisibilityFilter>(
stream: todosBloc.activeFilter,
builder: (context, snapshot) {
return FilterButton(
isActive: activeTabSnapshot.data == AppTab.todos,
activeFilter: snapshot.data ?? VisibilityFilter.all,
onSelected: todosBloc.updateFilter.add,
);
},
),
StreamBuilder<ExtraActionsButtonViewModel>(
stream: Rx.combineLatest2(
todosBloc.allComplete,
todosBloc.hasCompletedTodos,
(allComplete, hasCompletedTodos) {
return ExtraActionsButtonViewModel(allComplete, hasCompletedTodos);
},
),
builder: (context, snapshot) {
return ExtraActionsButton(
allComplete: snapshot.data?.allComplete ?? false,
hasCompletedTodos: snapshot.data?.hasCompletedTodos ?? false,
onSelected: (action) {
if (action == ExtraAction.toggleAllComplete) {
todosBloc.toggleAll.add(null);
} else if (action == ExtraAction.clearCompleted) {
todosBloc.clearCompleted.add(null);
}
},
);
},
),
];
}
}
================================================
FILE: bloc_flutter/lib/widgets/extra_actions_button.dart
================================================
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class ExtraActionsButton extends StatelessWidget {
final PopupMenuItemSelected<ExtraAction> onSelected;
final bool allComplete;
final bool hasCompletedTodos;
const ExtraActionsButton({
super.key = ArchSampleKeys.extraActionsButton,
required this.onSelected,
this.allComplete = false,
this.hasCompletedTodos = true,
});
@override
Widget build(BuildContext context) {
return PopupMenuButton<ExtraAction>(
onSelected: onSelected,
itemBuilder: (BuildContext context) {
return <PopupMenuItem<ExtraAction>>[
PopupMenuItem<ExtraAction>(
key: ArchSampleKeys.toggleAll,
value: ExtraAction.toggleAllComplete,
child: Text(
allComplete
? ArchSampleLocalizations.of(context).markAllIncomplete
: ArchSampleLocalizations.of(context).markAllComplete,
),
),
PopupMenuItem<ExtraAction>(
key: ArchSampleKeys.clearCompleted,
value: ExtraAction.clearCompleted,
child: Text(ArchSampleLocalizations.of(context).clearCompleted),
),
];
},
);
}
}
class ExtraActionsButtonViewModel {
final bool allComplete;
final bool hasCompletedTodos;
ExtraActionsButtonViewModel(this.allComplete, this.hasCompletedTodos);
}
enum ExtraAction { toggleAllComplete, clearCompleted }
================================================
FILE: bloc_flutter/lib/widgets/filter_button.dart
================================================
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class FilterButton extends StatelessWidget {
final PopupMenuItemSelected<VisibilityFilter> onSelected;
final VisibilityFilter activeFilter;
final bool isActive;
const FilterButton({
super.key = ArchSampleKeys.filterButton,
required this.onSelected,
required this.activeFilter,
required this.isActive,
});
@override
Widget build(BuildContext context) {
final defaultStyle = Theme.of(context).textTheme.bodyMedium!;
final activeStyle = defaultStyle.copyWith(
color: Theme.of(context).colorScheme.secondary,
);
final button = _Button(
onSelected: onSelected,
activeFilter: activeFilter,
activeStyle: activeStyle,
defaultStyle: defaultStyle,
);
return AnimatedOpacity(
opacity: isActive ? 1.0 : 0.0,
duration: Duration(milliseconds: 150),
child: isActive ? button : IgnorePointer(child: button),
);
}
}
class _Button extends StatelessWidget {
const _Button({
required this.onSelected,
required this.activeFilter,
required this.activeStyle,
required this.defaultStyle,
});
final PopupMenuItemSelected<VisibilityFilter> onSelected;
final VisibilityFilter activeFilter;
final TextStyle activeStyle;
final TextStyle defaultStyle;
@override
Widget build(BuildContext context) {
return PopupMenuButton<VisibilityFilter>(
tooltip: ArchSampleLocalizations.of(context).filterTodos,
onSelected: onSelected,
itemBuilder: (BuildContext context) {
return <PopupMenuItem<VisibilityFilter>>[
PopupMenuItem<VisibilityFilter>(
key: ArchSampleKeys.allFilter,
value: VisibilityFilter.all,
child: Text(
ArchSampleLocalizations.of(context).showAll,
style: activeFilter == VisibilityFilter.all
? activeStyle
: defaultStyle,
),
),
PopupMenuItem<VisibilityFilter>(
key: ArchSampleKeys.activeFilter,
value: VisibilityFilter.active,
child: Text(
ArchSampleLocalizations.of(context).showActive,
style: activeFilter == VisibilityFilter.active
? activeStyle
: defaultStyle,
),
),
PopupMenuItem<VisibilityFilter>(
key: ArchSampleKeys.completedFilter,
value: VisibilityFilter.completed,
child: Text(
ArchSampleLocalizations.of(context).showCompleted,
style: activeFilter == VisibilityFilter.completed
? activeStyle
: defaultStyle,
),
),
];
},
icon: Icon(Icons.filter_list),
);
}
}
================================================
FILE: bloc_flutter/lib/widgets/loading.dart
================================================
import 'package:flutter/material.dart';
class LoadingSpinner extends StatelessWidget {
const LoadingSpinner({super.key});
@override
Widget build(BuildContext context) {
return Center(child: CircularProgressIndicator());
}
}
================================================
FILE: bloc_flutter/lib/widgets/stats_counter.dart
================================================
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class StatsCounter extends StatefulWidget {
final StatsBloc Function() buildBloc;
const StatsCounter({
super.key = ArchSampleKeys.statsCounter,
required this.buildBloc,
});
@override
StatsCounterState createState() {
return StatsCounterState();
}
}
class StatsCounterState extends State<StatsCounter> {
late StatsBloc bloc;
@override
void initState() {
super.initState();
bloc = widget.buildBloc();
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Text(
ArchSampleLocalizations.of(context).completedTodos,
style: Theme.of(context).textTheme.titleLarge,
),
),
Padding(
padding: EdgeInsets.only(bottom: 24.0),
child: StreamBuilder<int>(
stream: bloc.numComplete,
builder: (context, snapshot) => Text(
'${snapshot.data ?? 0}',
key: ArchSampleKeys.statsNumCompleted,
style: Theme.of(context).textTheme.titleMedium,
),
),
),
Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Text(
ArchSampleLocalizations.of(context).activeTodos,
style: Theme.of(context).textTheme.titleLarge,
),
),
Padding(
padding: EdgeInsets.only(bottom: 24.0),
child: StreamBuilder<int>(
stream: bloc.numActive,
builder: (context, snapshot) {
return Text(
'${snapshot.data ?? 0}',
key: ArchSampleKeys.statsNumActive,
style: Theme.of(context).textTheme.titleMedium,
);
},
),
),
],
),
);
}
}
================================================
FILE: bloc_flutter/lib/widgets/todo_item.dart
================================================
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class TodoItem extends StatelessWidget {
final DismissDirectionCallback onDismissed;
final GestureTapCallback onTap;
final ValueChanged<bool?> onCheckboxChanged;
final Todo todo;
const TodoItem({
super.key,
required this.onDismissed,
required this.onTap,
required this.onCheckboxChanged,
required this.todo,
});
@override
Widget build(BuildContext context) {
return Dismissible(
key: ArchSampleKeys.todoItem(todo.id),
onDismissed: onDismissed,
child: ListTile(
onTap: onTap,
leading: Checkbox(
key: ArchSampleKeys.todoItemCheckbox(todo.id),
value: todo.complete,
onChanged: onCheckboxChanged,
),
title: Text(
todo.task,
key: ArchSampleKeys.todoItemTask(todo.id),
style: Theme.of(context).textTheme.titleLarge,
),
subtitle: Text(
todo.note,
key: ArchSampleKeys.todoItemNote(todo.id),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.titleMedium,
),
),
);
}
}
================================================
FILE: bloc_flutter/lib/widgets/todo_list.dart
================================================
import 'package:bloc_flutter_sample/dependency_injection.dart';
import 'package:bloc_flutter_sample/screens/detail_screen.dart';
import 'package:bloc_flutter_sample/widgets/loading.dart';
import 'package:bloc_flutter_sample/widgets/todo_item.dart';
import 'package:bloc_flutter_sample/widgets/todos_bloc_provider.dart';
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
import 'package:todos_app_core/todos_app_core.dart';
class TodoList extends StatelessWidget {
const TodoList({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<List<Todo>>(
stream: TodosBlocProvider.of(context).visibleTodos,
builder: (context, snapshot) => snapshot.hasData
? _buildList(snapshot.data!)
: LoadingSpinner(key: ArchSampleKeys.todosLoading),
);
}
ListView _buildList(List<Todo> todos) {
return ListView.builder(
key: ArchSampleKeys.todoList,
itemCount: todos.length,
itemBuilder: (BuildContext context, int index) {
final todo = todos[index];
return TodoItem(
todo: todo,
onDismissed: (direction) {
_removeTodo(context, todo);
},
onTap: () {
Navigator.of(context)
.push(
MaterialPageRoute<Todo?>(
builder: (_) {
return DetailScreen(
todoId: todo.id,
initBloc: () =>
TodoBloc(Injector.of(context).todosInteractor),
);
},
),
)
.then((todo) {
if (todo is Todo && context.mounted) {
_showUndoSnackbar(context, todo);
}
});
},
onCheckboxChanged: (complete) {
TodosBlocProvider.of(
context,
).updateTodo.add(todo.copyWith(complete: !todo.complete));
},
);
},
);
}
void _removeTodo(BuildContext context, Todo todo) {
TodosBlocProvider.of(context).deleteTodo.add(todo.id);
_showUndoSnackbar(context, todo);
}
void _showUndoSnackbar(BuildContext context, Todo todo) {
final snackBar = SnackBar(
key: ArchSampleKeys.snackbar,
duration: Duration(seconds: 2),
content: Text(
ArchSampleLocalizations.of(context).todoDeleted(todo.task),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
action: SnackBarAction(
key: ArchSampleKeys.snackbarAction(todo.id),
label: ArchSampleLocalizations.of(context).undo,
onPressed: () {
TodosBlocProvider.of(context).addTodo.add(todo);
},
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
}
================================================
FILE: bloc_flutter/lib/widgets/todos_bloc_provider.dart
================================================
import 'package:blocs/blocs.dart';
import 'package:flutter/material.dart';
class TodosBlocProvider extends StatefulWidget {
final Widget child;
final TodosListBloc bloc;
const TodosBlocProvider({super.key, required this.child, required this.bloc});
@override
TodosBlocProviderState createState() => TodosBlocProviderState();
static TodosListBloc of(BuildContext context) {
return context
.dependOnInheritedWidgetOfExactType<_TodosBlocProvider>()!
.bloc;
}
}
class TodosBlocProviderState extends State<TodosBlocProvider> {
@override
Widget build(BuildContext context) {
return _TodosBlocProvider(bloc: widget.bloc, child: widget.child);
}
@override
void dispose() {
widget.bloc.close();
super.dispose();
}
}
class _TodosBlocProvider extends InheritedWidget {
final TodosListBloc bloc;
const _TodosBlocProvider({required this.bloc, required super.child});
@override
bool updateShouldNotify(_TodosBlocProvider old) => bloc != old.bloc;
}
================================================
FILE: bloc_flutter/linux/.gitignore
================================================
flutter/ephemeral
================================================
FILE: bloc_flutter/linux/CMakeLists.txt
================================================
# Project-level configuration.
cmake_minimum_required(VERSION 3.13)
project(runner LANGUAGES CXX)
# The name of the executable created for the application. Change this to change
# the on-disk name of your application.
set(BINARY_NAME "bloc_flutter_sample")
# The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
set(APPLICATION_ID "com.example.bloc_flutter_sample")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.
cmake_policy(SET CMP0063 NEW)
# Load bundled libraries from the lib/ directory relative to the binary.
set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
# Root filesystem for cross-building.
if(FLUTTER_TARGET_PLATFORM_SYSROOT)
set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endif()
# Define build configuration options.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE "Debug" CACHE
STRING "Flutter build mode" FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Profile" "Release")
endif()
# Compilation settings that should be applied to most targets.
#
# Be cautious about adding new options here, as plugins use this function by
# default. In most cases, you should add new options to specific targets instead
# of modifying this function.
function(APPLY_STANDARD_SETTINGS TARGET)
target_compile_features(${TARGET} PUBLIC cxx_std_14)
target_compile_options(${TARGET} PRIVATE -Wall -Werror)
target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
endfunction()
# Flutter library and tool build rules.
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
add_subdirectory(${FLUTTER_MANAGED_DIR})
# System-level dependencies.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
# Application build; see runner/CMakeLists.txt.
add_subdirectory("runner")
# Run the Flutter tool portions of the build. This must not be removed.
add_dependencies(${BINARY_NAME} flutter_assemble)
# Only the install-generated bundle's copy of the executable will launch
# correctly, since the resources must in the right relative locations. To avoid
# people trying to run the unbundled copy, put it in a subdirectory instead of
# the default top-level location.
set_target_properties(${BINARY_NAME}
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
)
# Generated plugin build rules, which manage building the plugins and adding
# them to the application.
include(flutter/generated_plugins.cmake)
# === Installation ===
# By default, "installing" just makes a relocatable bundle in the build
# directory.
set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
endif()
# Start with a clean build bundle directory every time.
install(CODE "
file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
" COMPONENT Runtime)
set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
COMPONENT Runtime)
install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
COMPONENT Runtime)
install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
install(FILES "${bundled_library}"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endforeach(bundled_library)
# Copy the native assets provided by the build.dart from all packages.
set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/")
install(DIRECTORY "${NATIVE_ASSETS_DIR}"
DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
# Fully re-copy the assets directory on each build to avoid having stale files
# from a previous install.
set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
install(CODE "
file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
" COMPONENT Runtime)
install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
# Install the AOT library on non-Debug builds only.
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
COMPONENT Runtime)
endif()
================================================
FILE: bloc_flutter/linux/flutter/CMakeLists.txt
================================================
# This file controls Flutter-level build steps. It should not be edited.
cmake_minimum_required(VERSION 3.10)
set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
# Configuration provided via flutter tool.
include(${EPHEMERAL_DIR}/generated_config.cmake)
# TODO: Move the rest of this into files in ephemeral. See
# https://github.com/flutter/flutter/issues/57146.
# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
# which isn't available in 3.10.
function(list_prepend LIST_NAME PREFIX)
set(NEW_LIST "")
foreach(element ${${LIST_NAME}})
list(APPEND NEW_LIST "${PREFIX}${element}")
endforeach(element)
set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
endfunction()
# === Flutter Library ===
# System-level dependencies.
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
# Published to parent scope for install step.
set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
list(APPEND FLUTTER_LIBRARY_HEADERS
"fl_basic_message_channel.h"
"fl_binary_codec.h"
"fl_binary_messenger.h"
"fl_dart_project.h"
"fl_engine.h"
"fl_json_message_codec.h"
"fl_json_method_codec.h"
"fl_message_codec.h"
"fl_method_call.h"
"fl_method_channel.h"
"fl_method_codec.h"
"fl_method_response.h"
"fl_plugin_registrar.h"
"fl_plugin_registry.h"
"fl_standard_message_codec.h"
"fl_standard_method_codec.h"
"fl_string_codec.h"
"fl_value.h"
"fl_view.h"
"flutter_linux.h"
)
list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
add_library(flutter INTERFACE)
target_include_directories(flutter INTERFACE
"${EPHEMERAL_DIR}"
)
target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
target_link_libraries(flutter INTERFACE
PkgConfig::GTK
PkgConfig::GLIB
PkgConfig::GIO
)
add_dependencies(flutter flutter_assemble)
# === Flutter tool backend ===
# _phony_ is a non-existent file to force this command to run every time,
# since currently there's no way to get a full input/output list from the
# flutter tool.
add_custom_command(
OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
${CMAKE_CURRENT_BINARY_DIR}/_phony_
COMMAND ${CMAKE_COMMAND} -E env
${FLUTTER_TOOL_ENVIRONMENT}
"${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
VERBATIM
)
add_custom_target(flutter_assemble DEPENDS
"${FLUTTER_LIBRARY}"
${FLUTTER_LIBRARY_HEADERS}
)
================================================
FILE: bloc_flutter/linux/flutter/generated_plugin_registrant.cc
================================================
//
// Generated file. Do not edit.
//
// clang-format off
#include "generated_plugin_registrant.h"
void fl_register_plugins(FlPluginRegistry* registry) {
}
================================================
FILE: bloc_flutter/linux/flutter/generated_plugin_registrant.h
================================================
//
// Generated file. Do not edit.
//
// clang-format off
#ifndef GENERATED_PLUGIN_REGISTRANT_
#define GENERATED_PLUGIN_REGISTRANT_
#include <flutter_linux/flutter_linux.h>
// Registers Flutter plugins.
void fl_register_plugins(FlPluginRegistry* registry);
#endif // GENERATED_PLUGIN_REGISTRANT_
================================================
FILE: bloc_flutter/linux/flutter/generated_plugins.cmake
================================================
#
# Generated file, do not edit.
#
list(APPEND FLUTTER_PLUGIN_LIST
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
)
set(PLUGIN_BUNDLED_LIBRARIES)
foreach(plugin ${FLUTTER_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
endforeach(plugin)
foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
endforeach(ffi_plugin)
================================================
FILE: bloc_flutter/linux/runner/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.13)
project(runner LANGUAGES CXX)
# Define the application target. To change its name, change BINARY_NAME in the
# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
# work.
#
# Any new source files that you add to the application should be added here.
add_executable(${BINARY_NAME}
"main.cc"
"my_application.cc"
"${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
)
# Apply the standard set of build settings. This can be removed for applications
# that need different build settings.
apply_standard_settings(${BINARY_NAME})
# Add preprocessor definitions for the application ID.
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
# Add dependency libraries. Add any application-specific dependencies here.
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
================================================
FILE: bloc_flutter/linux/runner/main.cc
================================================
#include "my_application.h"
int main(int argc, char** argv) {
g_autoptr(MyApplication) app = my_application_new();
return g_application_run(G_APPLICATION(app), argc, argv);
}
================================================
FILE: bloc_flutter/linux/runner/my_application.cc
================================================
#include "my_application.h"
#include <flutter_linux/flutter_linux.h>
#ifdef GDK_WINDOWING_X11
#include <gdk/gdkx.h>
#endif
#include "flutter/generated_plugin_registrant.h"
struct _MyApplication {
GtkApplication parent_instance;
char** dart_entrypoint_arguments;
};
G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
// Called when first Flutter frame received.
static void first_frame_cb(MyApplication* self, FlView *view)
{
gtk_widget_show(gtk_widget_get_toplevel(GTK_WIDGET(view)));
}
// Implements GApplication::activate.
static void my_application_activate(GApplication* application) {
MyApplication* self = MY_APPLICATION(application);
GtkWindow* window =
GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
// Use a header bar when running in GNOME as this is the common style used
// by applications and is the setup most users will be using (e.g. Ubuntu
// desktop).
// If running on X and not using GNOME then just use a traditional title bar
// in case the window manager does more exotic layout, e.g. tiling.
// If running on Wayland assume the header bar will work (may need changing
// if future cases occur).
gboolean use_header_bar = TRUE;
#ifdef GDK_WINDOWING_X11
GdkScreen* screen = gtk_window_get_screen(window);
if (GDK_IS_X11_SCREEN(screen)) {
const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
use_header_bar = FALSE;
}
}
#endif
if (use_header_bar) {
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
gtk_widget_show(GTK_WIDGET(header_bar));
gtk_header_bar_set_title(header_bar, "bloc_flutter_sample");
gtk_header_bar_set_show_close_button(header_bar, TRUE);
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
} else {
gtk_window_set_title(window, "bloc_flutter_sample");
}
gtk_window_set_default_size(window, 1280, 720);
g_autoptr(FlDartProject) project = fl_dart_project_new();
fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
FlView* view = fl_view_new(project);
GdkRGBA background_color;
// Background defaults to black, override it here if necessary, e.g. #00000000 for transparent.
gdk_rgba_parse(&background_color, "#000000");
fl_view_set_background_color(view, &background_color);
gtk_widget_show(GTK_WIDGET(view));
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
// Show the window when Flutter renders.
// Requires the view to be realized so we can start rendering.
g_signal_connect_swapped(view, "first-frame", G_CALLBACK(first_frame_cb), self);
gtk_widget_realize(GTK_WIDGET(view));
fl_register_plugins(FL_PLUGIN_REGISTRY(view));
gtk_widget_grab_focus(GTK_WIDGET(view));
}
// Implements GApplication::local_command_line.
static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
MyApplication* self = MY_APPLICATION(application);
// Strip out the first argument as it is the binary name.
self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
g_autoptr(GError) error = nullptr;
if (!g_application_register(application, nullptr, &error)) {
g_warning("Failed to register: %s", error->message);
*exit_status = 1;
return TRUE;
}
g_application_activate(application);
*exit_status = 0;
return TRUE;
}
// Implements GApplication::startup.
static void my_application_startup(GApplication* application) {
//MyApplication* self = MY_APPLICATION(object);
// Perform any actions required at application startup.
G_APPLICATION_CLASS(my_application_parent_class)->startup(application);
}
// Implements GApplication::shutdown.
static void my_application_shutdown(GApplication* application) {
//MyApplication* self = MY_APPLICATION(object);
// Perform any actions required at application shutdown.
G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application);
}
// Implements GObject::dispose.
static void my_application_dispose(GObject* object) {
MyApplication* self = MY_APPLICATION(object);
g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
}
static void my_application_class_init(MyApplicationClass* klass) {
G_APPLICATION_CLASS(klass)->activate = my_application_activate;
G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
G_APPLICATION_CLASS(klass)->startup = my_application_startup;
G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown;
G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
}
static void my_application_init(MyApplication* self) {}
MyApplication* my_application_new() {
// Set the program name to the application ID, which helps various systems
// like GTK and desktop environments map this running application to its
// corresponding .desktop file. This ensures better integration by allowing
// the application to be recognized beyond its binary name.
g_set_prgname(APPLICATION_ID);
return MY_APPLICATION(g_object_new(my_application_get_type(),
"application-id", APPLICATION_ID,
"flags", G_APPLICATION_NON_UNIQUE,
nullptr));
}
================================================
FILE: bloc_flutter/linux/runner/my_application.h
================================================
#ifndef FLUTTER_MY_APPLICATION_H_
#define FLUTTER_MY_APPLICATION_H_
#include <gtk/gtk.h>
G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
GtkApplication)
/**
* my_application_new:
*
* Creates a new Flutter-based application.
*
* Returns: a new #MyApplication.
*/
MyApplication* my_application_new();
#endif // FLUTTER_MY_APPLICATION_H_
================================================
FILE: bloc_flutter/macos/.gitignore
================================================
# Flutter-related
**/Flutter/ephemeral/
**/Pods/
# Xcode-related
**/dgph
**/xcuserdata/
================================================
FILE: bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
================================================
FILE: bloc_flutter/macos/Flutter/Flutter-Release.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "ephemeral/Flutter-Generated.xcconfig"
================================================
FILE: bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift
================================================
//
// Generated file. Do not edit.
//
import FlutterMacOS
import Foundation
import path_provider_foundation
import shared_preferences_foundation
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
}
================================================
FILE: bloc_flutter/macos/Podfile
================================================
platform :osx, '10.15'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_macos_podfile_setup
target 'Runner' do
use_frameworks!
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
target 'RunnerTests' do
inherit! :search_paths
end
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_macos_build_settings(target)
end
end
================================================
FILE: bloc_flutter/macos/Runner/AppDelegate.swift
================================================
import Cocoa
import FlutterMacOS
@main
class AppDelegate: FlutterAppDelegate {
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
return true
}
}
================================================
FILE: bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "app_icon_16.png",
"scale" : "1x"
},
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "app_icon_32.png",
"scale" : "2x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "app_icon_32.png",
"scale" : "1x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "app_icon_64.png",
"scale" : "2x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "app_icon_128.png",
"scale" : "1x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "app_icon_256.png",
"scale" : "2x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "app_icon_256.png",
"scale" : "1x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "app_icon_512.png",
"scale" : "2x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "app_icon_512.png",
"scale" : "1x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "app_icon_1024.png",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: bloc_flutter/macos/Runner/Base.lproj/MainMenu.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target">
<connections>
<outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/>
<outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
</connections>
</customObject>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
<items>
<menuItem title="APP_NAME" id="1Xt-HY-uBw">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr">
<items>
<menuItem title="About APP_NAME" id="5kV-Vb-QxS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
<menuItem title="Services" id="NMo-om-nkz">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
<menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN">
<connections>
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
</connections>
</menuItem>
<menuItem title="Show All" id="Kd2-mp-pUS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
<menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi">
<connections>
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="5QF-Oa-p0T">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
<items>
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
<connections>
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
<connections>
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
<connections>
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
<connections>
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
<connections>
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
</connections>
</menuItem>
<menuItem title="Delete" id="pa3-QI-u2k">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
<connections>
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
<menuItem title="Find" id="4EN-yA-p0u">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Find" id="1b7-l0-nxx">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
<connections>
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
<connections>
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
<connections>
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
<connections>
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
<connections>
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
<connections>
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="9ic-FL-obx">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
<items>
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
</connections>
</menuItem>
<menuItem title="Smart Links" id="cwL-P1-jid">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
</connections>
</menuItem>
<menuItem title="Data Detectors" id="tRr-pd-1PS">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="2oI-Rn-ZJC">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
<items>
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="xrE-MZ-jX0">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
<items>
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="H8h-7b-M4v">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="View" id="HyV-fh-RgO">
<items>
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
<connections>
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="aUF-d1-5bR">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
<items>
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
<connections>
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
</connections>
</menuItem>
<menuItem title="Zoom" id="R4o-n2-Eq4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="EPT-qC-fAb">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/>
</menuItem>
</items>
<point key="canvasLocation" x="142" y="-258"/>
</menu>
<window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="335" y="390" width="800" height="600"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
<autoresizingMask key="autoresizingMask"/>
</view>
</window>
</objects>
</document>
================================================
FILE: bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig
================================================
// Application-level settings for the Runner target.
//
// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
// future. If not, the values below would default to using the project name when this becomes a
// 'flutter create' template.
// The application's name. By default this is also the title of the Flutter window.
PRODUCT_NAME = bloc_flutter_sample
// The application's bundle identifier
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample
// The copyright displayed in application information
PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved.
================================================
FILE: bloc_flutter/macos/Runner/Configs/Debug.xcconfig
================================================
#include "../../Flutter/Flutter-Debug.xcconfig"
#include "Warnings.xcconfig"
================================================
FILE: bloc_flutter/macos/Runner/Configs/Release.xcconfig
================================================
#include "../../Flutter/Flutter-Release.xcconfig"
#include "Warnings.xcconfig"
================================================
FILE: bloc_flutter/macos/Runner/Configs/Warnings.xcconfig
================================================
WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
GCC_WARN_UNDECLARED_SELECTOR = YES
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
CLANG_WARN_PRAGMA_PACK = YES
CLANG_WARN_STRICT_PROTOTYPES = YES
CLANG_WARN_COMMA = YES
GCC_WARN_STRICT_SELECTOR_MATCH = YES
CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
GCC_WARN_SHADOW = YES
CLANG_WARN_UNREACHABLE_CODE = YES
================================================
FILE: bloc_flutter/macos/Runner/DebugProfile.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>
================================================
FILE: bloc_flutter/macos/Runner/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>
<string>$(PRODUCT_COPYRIGHT)</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
================================================
FILE: bloc_flutter/macos/Runner/MainFlutterWindow.swift
================================================
import Cocoa
import FlutterMacOS
class MainFlutterWindow: NSWindow {
override func awakeFromNib() {
let flutterViewController = FlutterViewController()
let windowFrame = self.frame
self.contentViewController = flutterViewController
self.setFrame(windowFrame, display: true)
RegisterGeneratedPlugins(registry: flutterViewController)
super.awakeFromNib()
}
}
================================================
FILE: bloc_flutter/macos/Runner/Release.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
================================================
FILE: bloc_flutter/macos/Runner.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXAggregateTarget section */
33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
isa = PBXAggregateTarget;
buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
buildPhases = (
33CC111E2044C6BF0003C045 /* ShellScript */,
);
dependencies = (
);
name = "Flutter Assemble";
productName = FLX;
};
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 33CC10EC2044A3C60003C045;
remoteInfo = Runner;
};
33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 33CC111A2044C6BA0003C045;
remoteInfo = FLX;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
33CC110E2044A8840003C045 /* Bundle Framework */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Bundle Framework";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "bloc_flutter_sample.app"; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; };
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; };
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
331C80D2294CF70F00263BE5 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
33CC10EA2044A3C60003C045 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
331C80D6294CF71000263BE5 /* RunnerTests */ = {
isa = PBXGroup;
children = (
331C80D7294CF71000263BE5 /* RunnerTests.swift */,
);
path = RunnerTests;
sourceTree = "<group>";
};
33BA886A226E78AF003329D5 /* Configs */ = {
isa = PBXGroup;
children = (
33E5194F232828860026EE4D /* AppInfo.xcconfig */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
);
path = Configs;
sourceTree = "<group>";
};
33CC10E42044A3C60003C045 = {
isa = PBXGroup;
children = (
33FAB671232836740065AC1E /* Runner */,
33CEB47122A05771004F2AC0 /* Flutter */,
331C80D6294CF71000263BE5 /* RunnerTests */,
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
);
sourceTree = "<group>";
};
33CC10EE2044A3C60003C045 /* Products */ = {
isa = PBXGroup;
children = (
33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */,
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
33CC11242044D66E0003C045 /* Resources */ = {
isa = PBXGroup;
children = (
33CC10F22044A3C60003C045 /* Assets.xcassets */,
33CC10F42044A3C60003C045 /* MainMenu.xib */,
33CC10F72044A3C60003C045 /* Info.plist */,
);
name = Resources;
path = ..;
sourceTree = "<group>";
};
33CEB47122A05771004F2AC0 /* Flutter */ = {
isa = PBXGroup;
children = (
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
);
path = Flutter;
sourceTree = "<group>";
};
33FAB671232836740065AC1E /* Runner */ = {
isa = PBXGroup;
children = (
33CC10F02044A3C60003C045 /* AppDelegate.swift */,
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
33E51913231747F40026EE4D /* DebugProfile.entitlements */,
33E51914231749380026EE4D /* Release.entitlements */,
33CC11242044D66E0003C045 /* Resources */,
33BA886A226E78AF003329D5 /* Configs */,
);
path = Runner;
sourceTree = "<group>";
};
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
isa = PBXGroup;
children = (
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
331C80D4294CF70F00263BE5 /* RunnerTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
331C80D1294CF70F00263BE5 /* Sources */,
331C80D2294CF70F00263BE5 /* Frameworks */,
331C80D3294CF70F00263BE5 /* Resources */,
);
buildRules = (
);
dependencies = (
331C80DA294CF71000263BE5 /* PBXTargetDependency */,
);
name = RunnerTests;
productName = RunnerTests;
productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
33CC10EC2044A3C60003C045 /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
);
buildRules = (
);
dependencies = (
33CC11202044C79F0003C045 /* PBXTargetDependency */,
);
name = Runner;
productName = Runner;
productReference = 33CC10ED2044A3C60003C045 /* bloc_flutter_sample.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
33CC10E52044A3C60003C045 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C80D4294CF70F00263BE5 = {
CreatedOnToolsVersion = 14.0;
TestTargetID = 33CC10EC2044A3C60003C045;
};
33CC10EC2044A3C60003C045 = {
CreatedOnToolsVersion = 9.2;
LastSwiftMigration = 1100;
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.Sandbox = {
enabled = 1;
};
};
};
33CC111A2044C6BA0003C045 = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Manual;
};
};
};
buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 33CC10E42044A3C60003C045;
productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
33CC10EC2044A3C60003C045 /* Runner */,
331C80D4294CF70F00263BE5 /* RunnerTests */,
33CC111A2044C6BA0003C045 /* Flutter Assemble */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
331C80D3294CF70F00263BE5 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
33CC10EB2044A3C60003C045 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
};
33CC111E2044C6BF0003C045 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
Flutter/ephemeral/FlutterInputs.xcfilelist,
);
inputPaths = (
Flutter/ephemeral/tripwire,
);
outputFileListPaths = (
Flutter/ephemeral/FlutterOutputs.xcfilelist,
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
331C80D1294CF70F00263BE5 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
33CC10E92044A3C60003C045 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 33CC10EC2044A3C60003C045 /* Runner */;
targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;
};
33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
33CC10F52044A3C60003C045 /* Base */,
);
name = MainMenu.xib;
path = Runner;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
331C80DB294CF71000263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_flutter_sample";
};
name = Debug;
};
331C80DC294CF71000263BE5 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_flutter_sample";
};
name = Release;
};
331C80DD294CF71000263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.example.blocFlutterSample.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/bloc_flutter_sample.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/bloc_flutter_sample";
};
name = Profile;
};
338D0CE9231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Profile;
};
338D0CEA231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
name = Profile;
};
338D0CEB231458BD00FA5F75 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Manual;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Profile;
};
33CC10F92044A3C60003C045 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES
gitextract_dwwl6a94/
├── .fvmrc
├── .github/
│ ├── actions/
│ │ ├── dart_analysis_and_tests/
│ │ │ └── action.yml
│ │ └── flutter_analysis_test_build/
│ │ └── action.yml
│ └── workflows/
│ └── analyze_test_build.yml
├── .gitignore
├── CNAME
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── app_spec.md
├── bloc_flutter/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── bloc_flutter_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── anonymous_user_repository.dart
│ │ ├── app.dart
│ │ ├── dependency_injection.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── loading.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ ├── todo_list.dart
│ │ └── todos_bloc_provider.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ └── home_screen_test.mocks.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── bloc_library/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── bloc_library/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ ├── settings.gradle
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── ephemeral/
│ │ │ ├── flutter_lldb_helper.py
│ │ │ └── flutter_lldbinit
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── app.dart
│ │ ├── bloc_library_keys.dart
│ │ ├── blocs/
│ │ │ ├── blocs.dart
│ │ │ ├── filtered_todos/
│ │ │ │ ├── filtered_todos.dart
│ │ │ │ ├── filtered_todos_bloc.dart
│ │ │ │ ├── filtered_todos_event.dart
│ │ │ │ └── filtered_todos_state.dart
│ │ │ ├── simple_bloc_observer.dart
│ │ │ ├── stats/
│ │ │ │ ├── stats.dart
│ │ │ │ ├── stats_bloc.dart
│ │ │ │ ├── stats_event.dart
│ │ │ │ └── stats_state.dart
│ │ │ ├── tab/
│ │ │ │ ├── tab.dart
│ │ │ │ ├── tab_bloc.dart
│ │ │ │ └── tab_event.dart
│ │ │ └── todos/
│ │ │ ├── todos.dart
│ │ │ ├── todos_bloc.dart
│ │ │ ├── todos_event.dart
│ │ │ └── todos_state.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models/
│ │ │ ├── app_tab.dart
│ │ │ ├── extra_action.dart
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── details_screen.dart
│ │ │ ├── home_screen.dart
│ │ │ └── screens.dart
│ │ └── widgets/
│ │ ├── delete_todo_snack_bar.dart
│ │ ├── extra_actions.dart
│ │ ├── filter_button.dart
│ │ ├── filtered_todos.dart
│ │ ├── loading_indicator.dart
│ │ ├── stats.dart
│ │ ├── tab_selector.dart
│ │ ├── todo_item.dart
│ │ └── widgets.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── all_tests.dart
│ │ ├── blocs/
│ │ │ ├── filtered_todos_bloc_test.dart
│ │ │ ├── filtered_todos_event_test.dart
│ │ │ ├── simple_bloc_observer_test.dart
│ │ │ ├── stats_bloc_test.dart
│ │ │ ├── stats_event_test.dart
│ │ │ ├── tab_bloc_test.dart
│ │ │ ├── tab_event_test.dart
│ │ │ ├── todos_bloc_test.dart
│ │ │ ├── todos_event_test.dart
│ │ │ └── todos_state_test.dart
│ │ ├── localization_test.dart
│ │ ├── models/
│ │ │ └── todo_test.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen_test.dart
│ │ │ ├── details_screen_test.dart
│ │ │ └── home_screen_test.dart
│ │ └── widgets/
│ │ ├── delete_todo_snack_bar_test.dart
│ │ ├── extra_actions_test.dart
│ │ ├── filter_button_test.dart
│ │ ├── filtered_todos_test.dart
│ │ ├── loading_indicator_test.dart
│ │ ├── stats_tab_test.dart
│ │ ├── tab_selector_test.dart
│ │ └── todo_item_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── blocs/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib/
│ │ ├── blocs.dart
│ │ └── src/
│ │ ├── models/
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── stats_bloc.dart
│ │ ├── todo_bloc.dart
│ │ ├── todos_interactor.dart
│ │ ├── todos_list_bloc.dart
│ │ ├── user_bloc.dart
│ │ └── uuid.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── stats_bloc_test.dart
│ ├── stats_bloc_test.mocks.dart
│ ├── todo_bloc_test.dart
│ ├── todo_bloc_test.mocks.dart
│ ├── todos_bloc_test.dart
│ ├── todos_bloc_test.mocks.dart
│ ├── todos_interactor_test.dart
│ └── todos_interactor_test.mocks.dart
├── change_notifier_provider/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── change_notifier_provider_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ └── todo_list_model.dart
│ ├── line_count.md
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ ├── mock_repository.dart
│ │ └── todo_list_model_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── code-of-conduct.md
├── freezed_provider_value_notifier/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── freezed_provider_value_notifier/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ ├── todo_list_model.dart
│ │ ├── todo_list_model.freezed.dart
│ │ └── value_notifier_provider.dart
│ ├── line_count.md
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── app_state_test.dart
│ │ ├── home_screen_test.dart
│ │ └── mock_repository.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── index.html
├── inherited_widget/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── inherited_widget_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── app.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ ├── state_container.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ └── todo_list.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ └── app_state_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── integration_tests/
│ ├── .gitignore
│ ├── README.md
│ ├── lib/
│ │ ├── integration_tests.dart
│ │ └── page_objects/
│ │ ├── elements/
│ │ │ ├── extra_actions_element.dart
│ │ │ ├── filters_element.dart
│ │ │ ├── stats_element.dart
│ │ │ ├── test_element.dart
│ │ │ ├── todo_item_element.dart
│ │ │ └── todo_list_element.dart
│ │ ├── page_objects.dart
│ │ ├── screens/
│ │ │ ├── add_test_screen.dart
│ │ │ ├── details_test_screen.dart
│ │ │ ├── edit_test_screen.dart
│ │ │ ├── home_test_screen.dart
│ │ │ └── test_screen.dart
│ │ └── utils.dart
│ └── pubspec.yaml
├── line_count.md
├── mobx/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── mobx_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models/
│ │ │ ├── todo.dart
│ │ │ ├── todo.g.dart
│ │ │ └── todo_codec.dart
│ │ └── stores/
│ │ ├── todo_store.dart
│ │ └── todo_store.g.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ ├── mock_repository.dart
│ │ └── todo_store_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── mvi_base/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib/
│ │ ├── mvi_base.dart
│ │ └── src/
│ │ ├── models/
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ ├── user.dart
│ │ │ └── visibility_filter.dart
│ │ ├── mvi_core.dart
│ │ ├── mvi_stats.dart
│ │ ├── mvi_todo.dart
│ │ ├── mvi_todos_list.dart
│ │ ├── todo_list_interactor.dart
│ │ ├── user_interactor.dart
│ │ └── uuid.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── mvi_stats_test.dart
│ ├── mvi_stats_test.mocks.dart
│ ├── mvi_todo_test.dart
│ ├── mvi_todo_test.mocks.dart
│ ├── mvi_todos_list_test.dart
│ ├── mvi_todos_list_test.mocks.dart
│ ├── todos_interactor_test.dart
│ ├── todos_interactor_test.mocks.dart
│ ├── user_interactor_test.dart
│ └── user_interactor_test.mocks.dart
├── mvi_flutter/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── mvi_flutter_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── anonymous_user_repository.dart
│ │ ├── dependency_injection.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── mvi_app.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── loading.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ └── todo_list.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ └── detail_screen_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── redux/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── redux_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── actions/
│ │ │ └── actions.dart
│ │ ├── app.dart
│ │ ├── containers/
│ │ │ ├── active_tab.dart
│ │ │ ├── add_todo.dart
│ │ │ ├── app_loading.dart
│ │ │ ├── edit_todo.dart
│ │ │ ├── extra_actions_container.dart
│ │ │ ├── filter_selector.dart
│ │ │ ├── filtered_todos.dart
│ │ │ ├── stats.dart
│ │ │ ├── tab_selector.dart
│ │ │ └── todo_details.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── middleware/
│ │ │ └── store_todos_middleware.dart
│ │ ├── models/
│ │ │ ├── app_state.dart
│ │ │ ├── app_tab.dart
│ │ │ ├── extra_action.dart
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── presentation/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── details_screen.dart
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── loading_indicator.dart
│ │ │ ├── stats_counter.dart
│ │ │ ├── todo_item.dart
│ │ │ ├── todo_list.dart
│ │ │ └── typedefs.dart
│ │ ├── reducers/
│ │ │ ├── app_state_reducer.dart
│ │ │ ├── loading_reducer.dart
│ │ │ ├── tabs_reducer.dart
│ │ │ ├── todos_reducer.dart
│ │ │ └── visibility_reducer.dart
│ │ └── selectors/
│ │ └── selectors.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── all_tests.dart
│ │ ├── middleware_test.dart
│ │ ├── middleware_test.mocks.dart
│ │ ├── reducer_test.dart
│ │ └── selectors_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── scoped_model/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── scoped_model_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── app.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── models.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ ├── todo_list_model.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ ├── todo_list.dart
│ │ └── typedefs.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ └── app_state_test.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── scripts/
│ ├── line_counter.sh
│ └── update_flutter.sh
├── signals/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── signals_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── add_todo_screen.dart
│ │ ├── app.dart
│ │ ├── details_screen.dart
│ │ ├── edit_todo_screen.dart
│ │ ├── home/
│ │ │ ├── extra_actions_button.dart
│ │ │ ├── filter_button.dart
│ │ │ ├── home_screen.dart
│ │ │ ├── stats_view.dart
│ │ │ └── todo_list_view.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── todo.dart
│ │ ├── todo_codec.dart
│ │ └── todo_list_controller.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── todo_list_controller_test.dart
│ │ └── todo_list_controller_test.mocks.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── simple_bloc_flutter/
│ ├── .gitignore
│ ├── .metadata
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── android/
│ │ ├── .gitignore
│ │ ├── app/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── debug/
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── main/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── com/
│ │ │ │ │ └── example/
│ │ │ │ │ └── simple_bloc_flutter_sample/
│ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable-v21/
│ │ │ │ │ └── launch_background.xml
│ │ │ │ ├── values/
│ │ │ │ │ └── styles.xml
│ │ │ │ └── values-night/
│ │ │ │ └── styles.xml
│ │ │ └── profile/
│ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle.kts
│ │ ├── gradle/
│ │ │ └── wrapper/
│ │ │ └── gradle-wrapper.properties
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── integration_test/
│ │ └── app_test.dart
│ ├── ios/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ ├── AppIcon.appiconset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── LaunchImage.imageset/
│ │ │ │ ├── Contents.json
│ │ │ │ └── README.md
│ │ │ ├── Base.lproj/
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata/
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── lib/
│ │ ├── anonymous_user_repository.dart
│ │ ├── app.dart
│ │ ├── dependency_injection.dart
│ │ ├── localization.dart
│ │ ├── main.dart
│ │ ├── screens/
│ │ │ ├── add_edit_screen.dart
│ │ │ ├── detail_screen.dart
│ │ │ └── home_screen.dart
│ │ └── widgets/
│ │ ├── extra_actions_button.dart
│ │ ├── filter_button.dart
│ │ ├── loading.dart
│ │ ├── stats_counter.dart
│ │ ├── todo_item.dart
│ │ ├── todo_list.dart
│ │ └── todos_bloc_provider.dart
│ ├── linux/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ └── runner/
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ ├── macos/
│ │ ├── .gitignore
│ │ ├── Flutter/
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Runner/
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets/
│ │ │ │ └── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── Base.lproj/
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs/
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ ├── Runner.xcodeproj/
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace/
│ │ │ │ └── xcshareddata/
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata/
│ │ │ └── xcschemes/
│ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── RunnerTests/
│ │ └── RunnerTests.swift
│ ├── pubspec.yaml
│ ├── test/
│ │ ├── home_screen_test.dart
│ │ └── home_screen_test.mocks.dart
│ ├── test_driver/
│ │ └── integration_test.dart
│ ├── web/
│ │ ├── index.html
│ │ └── manifest.json
│ └── windows/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── simple_blocs/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── lib/
│ │ ├── simple_blocs.dart
│ │ └── src/
│ │ ├── models/
│ │ │ ├── models.dart
│ │ │ ├── todo.dart
│ │ │ └── visibility_filter.dart
│ │ ├── stats_bloc.dart
│ │ ├── todo_bloc.dart
│ │ ├── todos_interactor.dart
│ │ ├── todos_list_bloc.dart
│ │ ├── user_bloc.dart
│ │ └── uuid.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── stats_bloc_test.dart
│ ├── stats_bloc_test.mocks.dart
│ ├── todo_bloc_test.dart
│ ├── todo_bloc_test.mocks.dart
│ ├── todos_bloc_test.dart
│ ├── todos_bloc_test.mocks.dart
│ ├── todos_interactor_test.dart
│ └── todos_interactor_test.mocks.dart
├── todos_app_core/
│ ├── README.md
│ ├── lib/
│ │ ├── src/
│ │ │ ├── keys.dart
│ │ │ ├── localization.dart
│ │ │ ├── localizations/
│ │ │ │ ├── messages_all.dart
│ │ │ │ └── messages_en.dart
│ │ │ ├── optional.dart
│ │ │ ├── routes.dart
│ │ │ ├── theme.dart
│ │ │ └── uuid.dart
│ │ └── todos_app_core.dart
│ └── pubspec.yaml
├── todos_repository_core/
│ ├── .gitignore
│ ├── README.md
│ ├── lib/
│ │ ├── src/
│ │ │ ├── reactive_repository.dart
│ │ │ ├── todo_entity.dart
│ │ │ ├── todos_repository.dart
│ │ │ ├── user_entity.dart
│ │ │ └── user_repository.dart
│ │ └── todos_repository_core.dart
│ └── pubspec.yaml
├── todos_repository_local_storage/
│ ├── .gitignore
│ ├── README.md
│ ├── lib/
│ │ ├── src/
│ │ │ ├── file_storage.dart
│ │ │ ├── key_value_storage.dart
│ │ │ ├── reactive_repository.dart
│ │ │ ├── repository.dart
│ │ │ └── web_client.dart
│ │ └── todos_repository_local_storage.dart
│ ├── pubspec.yaml
│ └── test/
│ ├── all_tests.dart
│ ├── file_storage_test.dart
│ ├── key_value_storage_test.dart
│ ├── key_value_storage_test.mocks.dart
│ ├── reactive_repository_test.dart
│ ├── reactive_repository_test.mocks.dart
│ ├── repository_test.dart
│ └── repository_test.mocks.dart
└── vanilla/
├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── vanilla/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── values/
│ │ │ │ └── styles.xml
│ │ │ └── values-night/
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle.kts
├── integration_test/
│ └── app_test.dart
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ └── RunnerTests/
│ └── RunnerTests.swift
├── lib/
│ ├── app.dart
│ ├── localization.dart
│ ├── main.dart
│ ├── models.dart
│ ├── screens/
│ │ ├── add_edit_screen.dart
│ │ ├── detail_screen.dart
│ │ └── home_screen.dart
│ └── widgets/
│ ├── extra_actions_button.dart
│ ├── filter_button.dart
│ ├── stats_counter.dart
│ ├── todo_item.dart
│ ├── todo_list.dart
│ └── typedefs.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner/
│ ├── CMakeLists.txt
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── RunnerTests/
│ └── RunnerTests.swift
├── pubspec.yaml
├── test/
│ └── app_state_test.dart
├── test_driver/
│ └── integration_test.dart
├── web/
│ ├── index.html
│ └── manifest.json
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
SYMBOL INDEX (1738 symbols across 493 files)
FILE: bloc_flutter/integration_test/app_test.dart
function main (line 8) | void main()
FILE: bloc_flutter/lib/anonymous_user_repository.dart
class AnonymousUserRepository (line 3) | class AnonymousUserRepository implements UserRepository {
method login (line 5) | Future<UserEntity> login()
FILE: bloc_flutter/lib/app.dart
class BlocApp (line 11) | class BlocApp extends StatelessWidget {
method build (line 22) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/dependency_injection.dart
class Injector (line 5) | class Injector extends InheritedWidget {
method of (line 16) | Injector of(BuildContext context)
method updateShouldNotify (line 20) | bool updateShouldNotify(Injector oldWidget)
FILE: bloc_flutter/lib/localization.dart
class BlocLocalizations (line 5) | class BlocLocalizations {
method of (line 6) | BlocLocalizations of(BuildContext context)
class BlocLocalizationsDelegate (line 13) | class BlocLocalizationsDelegate
method load (line 16) | Future<BlocLocalizations> load(Locale locale)
method shouldReload (line 20) | bool shouldReload(BlocLocalizationsDelegate old)
method isSupported (line 23) | bool isSupported(Locale locale)
FILE: bloc_flutter/lib/main.dart
function main (line 10) | Future<void> main()
FILE: bloc_flutter/lib/screens/add_edit_screen.dart
class AddEditScreen (line 5) | class AddEditScreen extends StatefulWidget {
method createState (line 18) | AddEditScreenState createState()
class AddEditScreenState (line 21) | class AddEditScreenState extends State<AddEditScreen> {
method build (line 28) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/screens/detail_screen.dart
class DetailScreen (line 7) | class DetailScreen extends StatefulWidget {
method createState (line 18) | DetailScreenState createState()
class DetailScreenState (line 23) | class DetailScreenState extends State<DetailScreen> {
method initState (line 27) | void initState()
method dispose (line 33) | void dispose()
method build (line 39) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/screens/home_screen.dart
type AppTab (line 17) | enum AppTab { todos, stats }
class HomeScreen (line 19) | class HomeScreen extends StatefulWidget {
method createState (line 28) | State<StatefulWidget> createState()
class HomeScreenState (line 33) | class HomeScreenState extends State<HomeScreen> {
method initState (line 38) | void initState()
method dispose (line 46) | void dispose()
method build (line 52) | Widget build(BuildContext context)
method _buildActions (line 114) | List<Widget> _buildActions(
FILE: bloc_flutter/lib/widgets/extra_actions_button.dart
class ExtraActionsButton (line 4) | class ExtraActionsButton extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
class ExtraActionsButtonViewModel (line 42) | class ExtraActionsButtonViewModel {
type ExtraAction (line 49) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: bloc_flutter/lib/widgets/filter_button.dart
class FilterButton (line 5) | class FilterButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
class _Button (line 38) | class _Button extends StatelessWidget {
method build (line 52) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/widgets/loading.dart
class LoadingSpinner (line 3) | class LoadingSpinner extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/widgets/stats_counter.dart
class StatsCounter (line 5) | class StatsCounter extends StatefulWidget {
method createState (line 14) | StatsCounterState createState()
class StatsCounterState (line 19) | class StatsCounterState extends State<StatsCounter> {
method initState (line 23) | void initState()
method build (line 29) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: bloc_flutter/lib/widgets/todo_list.dart
class TodoList (line 10) | class TodoList extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
method _buildList (line 23) | ListView _buildList(List<Todo> todos)
method _removeTodo (line 64) | void _removeTodo(BuildContext context, Todo todo)
method _showUndoSnackbar (line 70) | void _showUndoSnackbar(BuildContext context, Todo todo)
FILE: bloc_flutter/lib/widgets/todos_bloc_provider.dart
class TodosBlocProvider (line 4) | class TodosBlocProvider extends StatefulWidget {
method createState (line 11) | TodosBlocProviderState createState()
method of (line 13) | TodosListBloc of(BuildContext context)
class TodosBlocProviderState (line 20) | class TodosBlocProviderState extends State<TodosBlocProvider> {
method build (line 22) | Widget build(BuildContext context)
method dispose (line 27) | void dispose()
class _TodosBlocProvider (line 33) | class _TodosBlocProvider extends InheritedWidget {
method updateShouldNotify (line 39) | bool updateShouldNotify(_TodosBlocProvider old)
FILE: bloc_flutter/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: bloc_flutter/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: bloc_flutter/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: bloc_flutter/test/home_screen_test.dart
function main (line 17) | void main()
class _TestWidget (line 125) | class _TestWidget extends StatelessWidget {
method build (line 135) | Widget build(BuildContext context)
function isChecked (line 161) | Matcher isChecked(bool isChecked)
FILE: bloc_flutter/test/home_screen_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 26) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class _FakeUserEntity_1 (line 32) | class _FakeUserEntity_1 extends _i1.SmartFake implements _i2.UserEntity {
class MockTodosInteractor (line 40) | class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor {
method todo (line 84) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 93) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 102) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 111) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 120) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 129) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
class MockUserRepository (line 143) | class MockUserRepository extends _i1.Mock implements _i2.UserRepository {
method login (line 145) | _i4.Future<_i2.UserEntity> login()
FILE: bloc_flutter/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: bloc_flutter/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: bloc_flutter/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: bloc_flutter/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: bloc_flutter/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: bloc_flutter/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: bloc_flutter/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: bloc_flutter/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: bloc_library/integration_test/app_test.dart
function main (line 6) | void main()
FILE: bloc_library/ios/Flutter/ephemeral/flutter_lldb_helper.py
function handle_new_rx_page (line 7) | def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_d...
function __lldb_init_module (line 24) | def __lldb_init_module(debugger: lldb.SBDebugger, _):
FILE: bloc_library/lib/app.dart
class TodosApp (line 10) | class TodosApp extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: bloc_library/lib/bloc_library_keys.dart
class BlocLibraryKeys (line 3) | class BlocLibraryKeys {
FILE: bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart
class FilteredTodosBloc (line 8) | class FilteredTodosBloc extends Bloc<FilteredTodosEvent, FilteredTodosSt...
method _onUpdateFilter (line 31) | void _onUpdateFilter(UpdateFilter event, Emitter<FilteredTodosState> e...
method _onUpdateTodos (line 45) | void _onUpdateTodos(UpdateTodos event, Emitter<FilteredTodosState> emit)
method _mapTodosToFilteredTodos (line 61) | List<Todo> _mapTodosToFilteredTodos(
method close (line 77) | Future<void> close()
FILE: bloc_library/lib/blocs/filtered_todos/filtered_todos_event.dart
class FilteredTodosEvent (line 4) | abstract class FilteredTodosEvent extends Equatable {
class UpdateFilter (line 8) | class UpdateFilter extends FilteredTodosEvent {
method toString (line 17) | String toString()
class UpdateTodos (line 20) | class UpdateTodos extends FilteredTodosEvent {
method toString (line 29) | String toString()
FILE: bloc_library/lib/blocs/filtered_todos/filtered_todos_state.dart
class FilteredTodosState (line 4) | abstract class FilteredTodosState extends Equatable {
class FilteredTodosLoading (line 11) | class FilteredTodosLoading extends FilteredTodosState {}
class FilteredTodosLoaded (line 13) | class FilteredTodosLoaded extends FilteredTodosState {
method toString (line 23) | String toString()
FILE: bloc_library/lib/blocs/simple_bloc_observer.dart
class SimpleBlocObserver (line 7) | class SimpleBlocObserver extends BlocObserver {
method onEvent (line 9) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
method onTransition (line 15) | void onTransition(
method onError (line 24) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
FILE: bloc_library/lib/blocs/stats/stats_bloc.dart
class StatsBloc (line 7) | class StatsBloc extends Bloc<StatsEvent, StatsState> {
method _onUpdateStats (line 26) | void _onUpdateStats(UpdateStats event, Emitter<StatsState> emit)
method _mapTodosToStats (line 30) | StatsLoaded _mapTodosToStats(List<Todo> todos)
method close (line 37) | Future<void> close()
FILE: bloc_library/lib/blocs/stats/stats_event.dart
class StatsEvent (line 4) | abstract class StatsEvent extends Equatable {
class UpdateStats (line 8) | class UpdateStats extends StatsEvent {
method toString (line 17) | String toString()
FILE: bloc_library/lib/blocs/stats/stats_state.dart
class StatsState (line 3) | abstract class StatsState extends Equatable {
class StatsLoading (line 10) | class StatsLoading extends StatsState {}
class StatsLoaded (line 12) | class StatsLoaded extends StatsState {
method toString (line 22) | String toString()
FILE: bloc_library/lib/blocs/tab/tab_bloc.dart
class TabBloc (line 5) | class TabBloc extends Bloc<TabEvent, AppTab> {
method _onUpdateTab (line 10) | void _onUpdateTab(UpdateTab event, Emitter<AppTab> emit)
FILE: bloc_library/lib/blocs/tab/tab_event.dart
class TabEvent (line 4) | abstract class TabEvent extends Equatable {
class UpdateTab (line 8) | class UpdateTab extends TabEvent {
method toString (line 17) | String toString()
FILE: bloc_library/lib/blocs/todos/todos_bloc.dart
class TodosBloc (line 8) | class TodosBloc extends Bloc<TodosEvent, TodosState> {
method _onLoadTodos (line 20) | Future<void> _onLoadTodos(LoadTodos event, Emitter<TodosState> emit)
method _onAddTodo (line 29) | Future<void> _onAddTodo(AddTodo event, Emitter<TodosState> emit)
method _onUpdateTodo (line 38) | Future<void> _onUpdateTodo(UpdateTodo event, Emitter<TodosState> emit)
method _onDeleteTodo (line 48) | Future<void> _onDeleteTodo(DeleteTodo event, Emitter<TodosState> emit)
method _onToggleAll (line 58) | Future<void> _onToggleAll(ToggleAll event, Emitter<TodosState> emit)
method _onClearCompleted (line 71) | Future<void> _onClearCompleted(
method _saveTodos (line 84) | Future<void> _saveTodos(List<Todo> todos)
FILE: bloc_library/lib/blocs/todos/todos_event.dart
class TodosEvent (line 4) | abstract class TodosEvent extends Equatable {
class LoadTodos (line 11) | class LoadTodos extends TodosEvent {}
class AddTodo (line 13) | class AddTodo extends TodosEvent {
method toString (line 22) | String toString()
class UpdateTodo (line 25) | class UpdateTodo extends TodosEvent {
method toString (line 34) | String toString()
class DeleteTodo (line 37) | class DeleteTodo extends TodosEvent {
method toString (line 46) | String toString()
class ClearCompleted (line 49) | class ClearCompleted extends TodosEvent {}
class ToggleAll (line 51) | class ToggleAll extends TodosEvent {}
FILE: bloc_library/lib/blocs/todos/todos_state.dart
class TodosState (line 4) | abstract class TodosState extends Equatable {
class TodosLoading (line 11) | class TodosLoading extends TodosState {
class TodosLoaded (line 15) | class TodosLoaded extends TodosState {
method toString (line 24) | String toString()
class TodosNotLoaded (line 27) | class TodosNotLoaded extends TodosState {}
FILE: bloc_library/lib/localization.dart
class FlutterBlocLocalizations (line 5) | class FlutterBlocLocalizations {
method of (line 6) | FlutterBlocLocalizations of(BuildContext context)
class FlutterBlocLocalizationsDelegate (line 16) | class FlutterBlocLocalizationsDelegate
method load (line 19) | Future<FlutterBlocLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(FlutterBlocLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: bloc_library/lib/main.dart
function main (line 8) | Future<void> main()
FILE: bloc_library/lib/models/app_tab.dart
type AppTab (line 1) | enum AppTab { todos, stats }
FILE: bloc_library/lib/models/extra_action.dart
type ExtraAction (line 1) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: bloc_library/lib/models/todo.dart
class Todo (line 5) | @immutable
method copyWith (line 15) | Todo copyWith({bool? complete, String? id, String? note, String? task})
method toString (line 39) | String toString()
method toEntity (line 43) | TodoEntity toEntity()
method fromEntity (line 47) | Todo fromEntity(TodoEntity entity)
FILE: bloc_library/lib/models/visibility_filter.dart
type VisibilityFilter (line 1) | enum VisibilityFilter { all, active, completed }
FILE: bloc_library/lib/screens/add_edit_screen.dart
type OnSaveCallback (line 5) | typedef OnSaveCallback = void Function(String task, String note);
class AddEditScreen (line 7) | class AddEditScreen extends StatefulWidget {
method createState (line 20) | AddEditScreenState createState()
class AddEditScreenState (line 23) | class AddEditScreenState extends State<AddEditScreen> {
method build (line 32) | Widget build(BuildContext context)
FILE: bloc_library/lib/screens/details_screen.dart
class DetailsScreen (line 9) | class DetailsScreen extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: bloc_library/lib/screens/home_screen.dart
class HomeScreen (line 10) | class HomeScreen extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/delete_todo_snack_bar.dart
class DeleteTodoSnackBar (line 5) | class DeleteTodoSnackBar extends SnackBar {
FILE: bloc_library/lib/widgets/extra_actions.dart
class ExtraActions (line 8) | class ExtraActions extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/filter_button.dart
class FilterButton (line 7) | class FilterButton extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
class _Button (line 43) | class _Button extends StatelessWidget {
method build (line 57) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/filtered_todos.dart
class FilteredTodos (line 10) | class FilteredTodos extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/loading_indicator.dart
class LoadingIndicator (line 3) | class LoadingIndicator extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/stats.dart
class Stats (line 8) | class Stats extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/tab_selector.dart
class TabSelector (line 5) | class TabSelector extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: bloc_library/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: bloc_library/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: bloc_library/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: bloc_library/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: bloc_library/test/all_tests.dart
function main (line 31) | void main()
FILE: bloc_library/test/blocs/filtered_todos_bloc_test.dart
class MockTodosBloc (line 10) | class MockTodosBloc extends MockBloc<TodosEvent, TodosState>
class MockTodosRepository (line 13) | class MockTodosRepository extends Mock implements LocalStorageRepository {}
function main (line 15) | void main()
FILE: bloc_library/test/blocs/filtered_todos_event_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/blocs/simple_bloc_observer_test.dart
class MockBloc (line 8) | class MockBloc extends Mock implements Bloc<dynamic, dynamic> {}
function main (line 12) | void main()
function overridePrint (line 57) | dynamic Function() overridePrint(void Function() testFn)
FILE: bloc_library/test/blocs/stats_bloc_test.dart
class MockTodosBloc (line 10) | class MockTodosBloc extends MockBloc<TodosEvent, TodosState>
function main (line 13) | void main()
FILE: bloc_library/test/blocs/stats_event_test.dart
function main (line 4) | void main()
FILE: bloc_library/test/blocs/tab_bloc_test.dart
function main (line 6) | void main()
FILE: bloc_library/test/blocs/tab_event_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/blocs/todos_bloc_test.dart
class MockTodosRepository (line 8) | class MockTodosRepository extends Mock implements LocalStorageRepository {}
function main (line 10) | void main()
FILE: bloc_library/test/blocs/todos_event_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/blocs/todos_state_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/localization_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/models/todo_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/screens/add_edit_screen_test.dart
function main (line 8) | void main()
FILE: bloc_library/test/screens/details_screen_test.dart
class MockTodosBloc (line 13) | class MockTodosBloc extends MockBloc<TodosEvent, TodosState>
function main (line 16) | void main()
FILE: bloc_library/test/screens/home_screen_test.dart
class MockTodosBloc (line 13) | class MockTodosBloc extends MockBloc<TodosEvent, TodosState>
class MockFilteredTodosBloc (line 16) | class MockFilteredTodosBloc
class MockTabBloc (line 20) | class MockTabBloc extends MockBloc<TabEvent, AppTab> implements TabBloc {}
class MockStatsBloc (line 22) | class MockStatsBloc extends MockBloc<StatsEvent, StatsState>
function main (line 25) | void main()
FILE: bloc_library/test/widgets/delete_todo_snack_bar_test.dart
function main (line 7) | void main()
FILE: bloc_library/test/widgets/extra_actions_test.dart
class MockTodosBloc (line 13) | class MockTodosBloc extends MockBloc<TodosEvent, TodosState>
function main (line 16) | void main()
FILE: bloc_library/test/widgets/filter_button_test.dart
class MockFilteredTodosBloc (line 12) | class MockFilteredTodosBloc
function main (line 16) | void main()
FILE: bloc_library/test/widgets/filtered_todos_test.dart
class MockTodosBloc (line 12) | class MockTodosBloc extends MockBloc<TodosEvent, TodosState>
class MockFilteredTodosBloc (line 15) | class MockFilteredTodosBloc
function main (line 19) | void main()
FILE: bloc_library/test/widgets/loading_indicator_test.dart
function main (line 5) | void main()
FILE: bloc_library/test/widgets/stats_tab_test.dart
class MockStatsBloc (line 12) | class MockStatsBloc extends MockBloc<StatsEvent, StatsState>
function main (line 15) | void main()
FILE: bloc_library/test/widgets/tab_selector_test.dart
function main (line 8) | void main()
FILE: bloc_library/test/widgets/todo_item_test.dart
function main (line 8) | void main()
FILE: bloc_library/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: bloc_library/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: bloc_library/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: bloc_library/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: bloc_library/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: bloc_library/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: bloc_library/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: bloc_library/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: blocs/lib/src/models/todo.dart
class Todo (line 5) | @immutable
method copyWith (line 15) | Todo copyWith({bool? complete, String? id, String? note, String? task})
method toString (line 39) | String toString()
method toEntity (line 43) | TodoEntity toEntity()
method fromEntity (line 47) | Todo fromEntity(TodoEntity entity)
FILE: blocs/lib/src/models/visibility_filter.dart
type VisibilityFilter (line 1) | enum VisibilityFilter { all, active, completed }
FILE: blocs/lib/src/stats_bloc.dart
class StatsBloc (line 6) | class StatsBloc {
method _numActive (line 19) | int _numActive(List<Todo> todos)
method _numComplete (line 23) | int _numComplete(List<Todo> todos)
FILE: blocs/lib/src/todo_bloc.dart
class TodoBloc (line 6) | class TodoBloc {
method todo (line 40) | Stream<Todo> todo(String id)
method close (line 44) | void close()
FILE: blocs/lib/src/todos_interactor.dart
class TodosInteractor (line 8) | class TodosInteractor {
method todo (line 19) | Stream<Todo> todo(String id)
method updateTodo (line 29) | Future<void> updateTodo(Todo todo)
method addNewTodo (line 31) | Future<void> addNewTodo(Todo todo)
method deleteTodo (line 33) | Future<void> deleteTodo(String id)
method clearCompleted (line 35) | Future<void> clearCompleted([_])
method toggleAll (line 38) | Future<List<dynamic>> toggleAll([_])
method _hasCompletedTodos (line 46) | bool _hasCompletedTodos(List<Todo> todos)
method _completedTodoIds (line 50) | List<String> _completedTodoIds(List<Todo> todos)
method _todosToUpdate (line 60) | List<Todo> _todosToUpdate(List<Todo> todos)
method _allComplete (line 74) | bool _allComplete(List<Todo> todos)
FILE: blocs/lib/src/todos_list_bloc.dart
class TodosListBloc (line 7) | class TodosListBloc {
method _filterTodos (line 104) | List<Todo> _filterTodos(List<Todo> todos, VisibilityFilter filter)
method close (line 120) | void close()
FILE: blocs/lib/src/user_bloc.dart
class UserBloc (line 5) | class UserBloc {
method login (line 9) | Stream<UserEntity> login()
FILE: blocs/lib/src/uuid.dart
class Uuid (line 13) | class Uuid {
method generateV4 (line 18) | String generateV4()
method _bitsDigits (line 29) | String _bitsDigits(int bitCount, int digitCount)
method _generateBits (line 32) | int _generateBits(int bitCount)
method _printDigits (line 34) | String _printDigits(int value, int count)
FILE: blocs/test/stats_bloc_test.dart
function main (line 10) | void main()
FILE: blocs/test/stats_bloc_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 27) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockTodosInteractor (line 36) | class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor {
method todo (line 80) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 89) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 98) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 107) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 116) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 125) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: blocs/test/todo_bloc_test.dart
function main (line 11) | void main()
FILE: blocs/test/todo_bloc_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 27) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockTodosInteractor (line 36) | class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor {
method todo (line 80) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 89) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 98) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 107) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 116) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 125) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: blocs/test/todos_bloc_test.dart
function main (line 15) | void main()
FILE: blocs/test/todos_bloc_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 28) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockReactiveTodosRepository (line 37) | class MockReactiveTodosRepository extends _i1.Mock
method addNewTodo (line 40) | _i3.Future<void> addNewTodo(_i4.TodoEntity? todo)
method deleteTodo (line 49) | _i3.Future<void> deleteTodo(List<String>? idList)
method todos (line 58) | _i3.Stream<List<_i4.TodoEntity>> todos()
method updateTodo (line 67) | _i3.Future<void> updateTodo(_i4.TodoEntity? todo)
class MockTodosInteractor (line 79) | class MockTodosInteractor extends _i1.Mock implements _i5.TodosInteractor {
method todo (line 123) | _i3.Stream<_i5.Todo> todo(String? id)
method updateTodo (line 132) | _i3.Future<void> updateTodo(_i5.Todo? todo)
method addNewTodo (line 141) | _i3.Future<void> addNewTodo(_i5.Todo? todo)
method deleteTodo (line 150) | _i3.Future<void> deleteTodo(String? id)
method clearCompleted (line 159) | _i3.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 168) | _i3.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: blocs/test/todos_interactor_test.dart
function main (line 13) | void main()
FILE: blocs/test/todos_interactor_test.mocks.dart
class MockReactiveTodosRepository (line 30) | class MockReactiveTodosRepository extends _i1.Mock
method addNewTodo (line 33) | _i3.Future<void> addNewTodo(_i4.TodoEntity? todo)
method deleteTodo (line 42) | _i3.Future<void> deleteTodo(List<String>? idList)
method todos (line 51) | _i3.Stream<List<_i4.TodoEntity>> todos()
method updateTodo (line 60) | _i3.Future<void> updateTodo(_i4.TodoEntity? todo)
FILE: change_notifier_provider/integration_test/app_test.dart
function main (line 6) | void main()
FILE: change_notifier_provider/lib/add_todo_screen.dart
class AddTodoScreen (line 8) | class AddTodoScreen extends StatefulWidget {
method createState (line 12) | AddTodoScreenState createState()
class AddTodoScreenState (line 15) | class AddTodoScreenState extends State<AddTodoScreen> {
method dispose (line 21) | void dispose()
method build (line 28) | Widget build(BuildContext context)
FILE: change_notifier_provider/lib/app.dart
class ProviderApp (line 11) | class ProviderApp extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: change_notifier_provider/lib/details_screen.dart
class DetailsScreen (line 9) | class DetailsScreen extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: change_notifier_provider/lib/edit_todo_screen.dart
class EditTodoScreen (line 6) | class EditTodoScreen extends StatefulWidget {
method createState (line 14) | EditTodoScreenState createState()
class EditTodoScreenState (line 17) | class EditTodoScreenState extends State<EditTodoScreen> {
method initState (line 23) | void initState()
method dispose (line 34) | void dispose()
method build (line 41) | Widget build(BuildContext context)
FILE: change_notifier_provider/lib/home/extra_actions_button.dart
class ExtraActionsButton (line 7) | class ExtraActionsButton extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
type ExtraAction (line 48) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: change_notifier_provider/lib/home/filter_button.dart
class FilterButton (line 6) | class FilterButton extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
method _items (line 34) | List<PopupMenuItem<VisibilityFilter>> _items(
FILE: change_notifier_provider/lib/home/home_screen.dart
class HomeScreen (line 13) | class HomeScreen extends StatefulWidget {
method createState (line 17) | HomeScreenState createState()
class HomeScreenState (line 20) | class HomeScreenState extends State<HomeScreen> {
method dispose (line 26) | void dispose()
method build (line 32) | Widget build(BuildContext context)
method _showUndoSnackbar (line 106) | void _showUndoSnackbar(BuildContext context, Todo todo)
type _HomeScreenTab (line 127) | enum _HomeScreenTab { todos, stats }
FILE: change_notifier_provider/lib/home/stats_view.dart
class StatsView (line 6) | class StatsView extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: change_notifier_provider/lib/home/todo_list_view.dart
class TodoListView (line 9) | class TodoListView extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
FILE: change_notifier_provider/lib/localization.dart
class ProviderLocalizations (line 5) | class ProviderLocalizations {
method of (line 6) | ProviderLocalizations of(BuildContext context)
class ProviderLocalizationsDelegate (line 16) | class ProviderLocalizationsDelegate
method load (line 19) | Future<ProviderLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(ProviderLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: change_notifier_provider/lib/main.dart
function main (line 6) | Future<void> main()
FILE: change_notifier_provider/lib/models.dart
type AppTab (line 4) | enum AppTab { todos, stats }
type ExtraAction (line 6) | enum ExtraAction { toggleAllComplete, clearCompleted }
class Todo (line 8) | class Todo {
method toString (line 31) | String toString()
method toEntity (line 35) | TodoEntity toEntity()
method fromEntity (line 39) | Todo fromEntity(TodoEntity entity)
method copy (line 48) | Todo copy({String? task, bool? complete, String? note, String? id})
FILE: change_notifier_provider/lib/todo_list_model.dart
type VisibilityFilter (line 8) | enum VisibilityFilter { all, active, completed }
class TodoListModel (line 10) | class TodoListModel extends ChangeNotifier {
method loadTodos (line 40) | Future<void> loadTodos()
method clearCompleted (line 70) | void clearCompleted()
method toggleAll (line 76) | void toggleAll()
method updateTodo (line 84) | void updateTodo(Todo todo)
method removeTodo (line 92) | void removeTodo(Todo todo)
method addTodo (line 98) | void addTodo(Todo todo)
method _uploadItems (line 104) | void _uploadItems()
method todoById (line 108) | Todo? todoById(String id)
FILE: change_notifier_provider/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: change_notifier_provider/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: change_notifier_provider/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: change_notifier_provider/test/home_screen_test.dart
function main (line 13) | void main()
class _TestWidget (line 83) | class _TestWidget extends StatelessWidget {
method build (line 87) | Widget build(BuildContext context)
function isChecked (line 112) | Matcher isChecked(bool isChecked)
FILE: change_notifier_provider/test/mock_repository.dart
class MockRepository (line 6) | class MockRepository extends TodosRepository {
method loadTodos (line 14) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 17) | Future<void> saveTodos(List<TodoEntity> todos)
FILE: change_notifier_provider/test/todo_list_model_test.dart
function main (line 7) | void main()
FILE: change_notifier_provider/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: change_notifier_provider/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: change_notifier_provider/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: change_notifier_provider/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: change_notifier_provider/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: change_notifier_provider/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: change_notifier_provider/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: change_notifier_provider/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: freezed_provider_value_notifier/integration_test/app_test.dart
function main (line 6) | void main()
FILE: freezed_provider_value_notifier/lib/add_todo_screen.dart
class AddTodoScreen (line 8) | class AddTodoScreen extends StatefulWidget {
method createState (line 12) | AddTodoScreenState createState()
class AddTodoScreenState (line 15) | class AddTodoScreenState extends State<AddTodoScreen> {
method dispose (line 21) | void dispose()
method build (line 28) | Widget build(BuildContext context)
FILE: freezed_provider_value_notifier/lib/app.dart
class ProviderApp (line 11) | class ProviderApp extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: freezed_provider_value_notifier/lib/details_screen.dart
class DetailsScreen (line 9) | class DetailsScreen extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: freezed_provider_value_notifier/lib/edit_todo_screen.dart
class EditTodoScreen (line 6) | class EditTodoScreen extends StatefulWidget {
method createState (line 17) | EditTodoScreenState createState()
class EditTodoScreenState (line 20) | class EditTodoScreenState extends State<EditTodoScreen> {
method initState (line 26) | void initState()
method dispose (line 34) | void dispose()
method build (line 41) | Widget build(BuildContext context)
FILE: freezed_provider_value_notifier/lib/home/extra_actions_button.dart
class ExtraActionsButton (line 7) | class ExtraActionsButton extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
type ExtraAction (line 48) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: freezed_provider_value_notifier/lib/home/filter_button.dart
class FilterButton (line 6) | class FilterButton extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
method _items (line 35) | List<PopupMenuItem<VisibilityFilter>> _items(
FILE: freezed_provider_value_notifier/lib/home/home_screen.dart
class HomeScreen (line 13) | class HomeScreen extends StatefulWidget {
method createState (line 17) | HomeScreenState createState()
class HomeScreenState (line 20) | class HomeScreenState extends State<HomeScreen> {
method dispose (line 26) | void dispose()
method build (line 32) | Widget build(BuildContext context)
method _showUndoSnackbar (line 105) | void _showUndoSnackbar(BuildContext context, Todo todo)
type _HomeScreenTab (line 125) | enum _HomeScreenTab { todos, stats }
FILE: freezed_provider_value_notifier/lib/home/stats_view.dart
class StatsView (line 6) | class StatsView extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: freezed_provider_value_notifier/lib/home/todo_list_view.dart
class TodoListView (line 9) | class TodoListView extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
FILE: freezed_provider_value_notifier/lib/localization.dart
class ProviderLocalizations (line 5) | class ProviderLocalizations {
method of (line 6) | ProviderLocalizations of(BuildContext context)
class ProviderLocalizationsDelegate (line 16) | class ProviderLocalizationsDelegate
method load (line 19) | Future<ProviderLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(ProviderLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: freezed_provider_value_notifier/lib/main.dart
function main (line 6) | Future<void> main()
FILE: freezed_provider_value_notifier/lib/models.dart
class Todo (line 4) | class Todo {
method toString (line 28) | String toString()
method toEntity (line 32) | TodoEntity toEntity()
method fromEntity (line 36) | Todo fromEntity(TodoEntity entity)
method copy (line 45) | Todo copy({String? task, bool? complete, String? note, String? id})
FILE: freezed_provider_value_notifier/lib/todo_list_model.dart
type VisibilityFilter (line 9) | enum VisibilityFilter { all, active, completed }
class TodoList (line 11) | @freezed
function todoById (line 21) | Todo? todoById(String id)
class TodoListController (line 45) | class TodoListController extends ValueNotifier<TodoList> {
method _loadTodos (line 71) | Future<void> _loadTodos()
method addTodo (line 85) | void addTodo(Todo todo)
method updateTodo (line 89) | void updateTodo(Todo updatedTodo)
method removeTodoWithId (line 98) | void removeTodoWithId(String id)
method toggleAll (line 107) | void toggleAll()
method clearCompleted (line 116) | void clearCompleted()
FILE: freezed_provider_value_notifier/lib/todo_list_model.freezed.dart
function _$identity (line 13) | T _$identity<T>(T value)
function debugFillProperties (line 26) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
function toString (line 42) | String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info })
class $TodoListCopyWith (line 50) | abstract mixin class $TodoListCopyWith<$Res> {
method call (line 53) | $Res call({
class _$TodoListCopyWithImpl (line 62) | class _$TodoListCopyWithImpl<$Res>
method call (line 71) | $Res call({Object? todos = null,Object? filter = null,Object? loading ...
function maybeMap (line 97) | TResult maybeMap<TResult extends Object?>(TResult Function( TodoListStat...
function map (line 119) | TResult map<TResult extends Object?>(TResult Function( TodoListState val...
function mapOrNull (line 140) | TResult? mapOrNull<TResult extends Object?>(TResult? Function( TodoListS...
function maybeWhen (line 161) | TResult maybeWhen<TResult extends Object?>(TResult Function( List<Todo> ...
function when (line 182) | TResult when<TResult extends Object?>(TResult Function( List<Todo> todos...
function whenOrNull (line 202) | TResult? whenOrNull<TResult extends Object?>(TResult? Function( List<Tod...
class TodoListState (line 216) | class TodoListState with DiagnosticableTreeMixin implements TodoList {
method debugFillProperties (line 238) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
method toString (line 254) | String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info })
class $TodoListStateCopyWith (line 262) | abstract mixin class $TodoListStateCopyWith<$Res> implements $TodoListCo...
method call (line 265) | $Res call({
class _$TodoListStateCopyWithImpl (line 274) | class _$TodoListStateCopyWithImpl<$Res>
method call (line 283) | $Res call({Object? todos = null,Object? filter = null,Object? loading ...
FILE: freezed_provider_value_notifier/lib/value_notifier_provider.dart
class ValueNotifierProvider (line 8) | class ValueNotifierProvider<Controller extends ValueNotifier<Value>, Value>
method buildWithChild (line 15) | Widget buildWithChild(BuildContext context, Widget? child)
method listener (line 23) | void listener()
FILE: freezed_provider_value_notifier/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: freezed_provider_value_notifier/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: freezed_provider_value_notifier/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: freezed_provider_value_notifier/test/app_state_test.dart
function main (line 7) | void main()
FILE: freezed_provider_value_notifier/test/home_screen_test.dart
function main (line 13) | void main()
class _TestWidget (line 83) | class _TestWidget extends StatelessWidget {
method build (line 87) | Widget build(BuildContext context)
function isChecked (line 110) | Matcher isChecked(bool isChecked)
FILE: freezed_provider_value_notifier/test/mock_repository.dart
class MockRepository (line 6) | class MockRepository extends TodosRepository {
method loadTodos (line 14) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 17) | Future<void> saveTodos(List<TodoEntity> todos)
FILE: freezed_provider_value_notifier/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: freezed_provider_value_notifier/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: freezed_provider_value_notifier/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: freezed_provider_value_notifier/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: freezed_provider_value_notifier/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: freezed_provider_value_notifier/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: freezed_provider_value_notifier/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: freezed_provider_value_notifier/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: inherited_widget/integration_test/app_test.dart
function main (line 7) | void main()
FILE: inherited_widget/lib/app.dart
class InheritedWidgetApp (line 7) | class InheritedWidgetApp extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
FILE: inherited_widget/lib/localization.dart
class InheritedWidgetLocalizations (line 5) | class InheritedWidgetLocalizations {
method of (line 6) | InheritedWidgetLocalizations of(BuildContext context)
class InheritedWidgetLocalizationsDelegate (line 16) | class InheritedWidgetLocalizationsDelegate
method load (line 19) | Future<InheritedWidgetLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(InheritedWidgetLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: inherited_widget/lib/main.dart
function main (line 7) | Future<void> main()
FILE: inherited_widget/lib/models.dart
class AppState (line 4) | class AppState {
method clearCompleted (line 48) | void clearCompleted()
method toggleAll (line 52) | void toggleAll()
method toString (line 61) | String toString()
type AppTab (line 66) | enum AppTab { todos, stats }
type ExtraAction (line 68) | enum ExtraAction { toggleAllComplete, clearCompleted }
class Todo (line 70) | class Todo {
method toString (line 94) | String toString()
method toEntity (line 98) | TodoEntity toEntity()
method fromEntity (line 102) | Todo fromEntity(TodoEntity entity)
type VisibilityFilter (line 112) | enum VisibilityFilter { all, active, completed }
FILE: inherited_widget/lib/screens/add_edit_screen.dart
class AddEditScreen (line 6) | class AddEditScreen extends StatefulWidget {
method createState (line 12) | State<AddEditScreen> createState()
class _AddEditScreenState (line 15) | class _AddEditScreenState extends State<AddEditScreen> {
method build (line 22) | Widget build(BuildContext context)
FILE: inherited_widget/lib/screens/detail_screen.dart
class DetailScreen (line 7) | class DetailScreen extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: inherited_widget/lib/screens/home_screen.dart
class HomeScreen (line 11) | class HomeScreen extends StatefulWidget {
method createState (line 15) | State<StatefulWidget> createState()
class HomeScreenState (line 20) | class HomeScreenState extends State<HomeScreen> {
method build (line 24) | Widget build(BuildContext context)
method _updateTab (line 82) | void _updateTab(AppTab tab)
FILE: inherited_widget/lib/state_container.dart
class StateContainer (line 5) | class StateContainer extends StatefulWidget {
method of (line 17) | StateContainerState of(BuildContext context)
method createState (line 24) | State<StatefulWidget> createState()
class StateContainerState (line 29) | class StateContainerState extends State<StateContainer> {
method initState (line 33) | void initState()
method toggleAll (line 56) | void toggleAll()
method clearCompleted (line 62) | void clearCompleted()
method addTodo (line 68) | void addTodo(Todo todo)
method removeTodo (line 74) | void removeTodo(Todo todo)
method updateFilter (line 80) | void updateFilter(VisibilityFilter filter)
method updateTodo (line 86) | void updateTodo(
method setState (line 102) | void setState(VoidCallback fn)
method build (line 111) | Widget build(BuildContext context)
class _InheritedStateContainer (line 116) | class _InheritedStateContainer extends InheritedWidget {
method updateShouldNotify (line 126) | bool updateShouldNotify(_InheritedStateContainer old)
type TodoUpdater (line 129) | typedef TodoUpdater =
FILE: inherited_widget/lib/widgets/extra_actions_button.dart
class ExtraActionsButton (line 5) | class ExtraActionsButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: inherited_widget/lib/widgets/filter_button.dart
class FilterButton (line 5) | class FilterButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
class _Button (line 38) | class _Button extends StatelessWidget {
method build (line 52) | Widget build(BuildContext context)
FILE: inherited_widget/lib/widgets/stats_counter.dart
class StatsCounter (line 5) | class StatsCounter extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: inherited_widget/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: inherited_widget/lib/widgets/todo_list.dart
class TodoList (line 8) | class TodoList extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
method _buildList (line 26) | ListView _buildList(StateContainerState container)
method _removeTodo (line 62) | void _removeTodo(BuildContext context, Todo todo)
method _showUndoSnackbar (line 68) | void _showUndoSnackbar(BuildContext context, Todo todo)
FILE: inherited_widget/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: inherited_widget/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: inherited_widget/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
function gboolean (line 66) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 85) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 94) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 103) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 109) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 117) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 119) | MyApplication* my_application_new() {
FILE: inherited_widget/test/app_state_test.dart
function main (line 4) | void main()
FILE: inherited_widget/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: inherited_widget/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: inherited_widget/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: inherited_widget/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: inherited_widget/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: inherited_widget/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: inherited_widget/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: inherited_widget/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: integration_tests/lib/integration_tests.dart
function run (line 9) | void run({required Future<Widget> Function() appBuilder})
FILE: integration_tests/lib/page_objects/elements/extra_actions_element.dart
class ExtraActionsElement (line 6) | class ExtraActionsElement extends TestElement {
method tapToggleAll (line 12) | Future<ExtraActionsElement> tapToggleAll()
method tapClearCompleted (line 19) | Future<ExtraActionsElement> tapClearCompleted()
FILE: integration_tests/lib/page_objects/elements/filters_element.dart
class FiltersElement (line 6) | class FiltersElement extends TestElement {
method tapShowAll (line 13) | Future<void> tapShowAll()
method tapShowActive (line 18) | Future<void> tapShowActive()
method tapShowCompleted (line 23) | Future<void> tapShowCompleted()
FILE: integration_tests/lib/page_objects/elements/stats_element.dart
class StatsElement (line 6) | class StatsElement extends TestElement {
FILE: integration_tests/lib/page_objects/elements/test_element.dart
class TestElement (line 3) | abstract class TestElement {
FILE: integration_tests/lib/page_objects/elements/todo_item_element.dart
class TodoItemElement (line 8) | class TodoItemElement extends TestElement {
method tapCheckbox (line 29) | Future<TodoItemElement> tapCheckbox()
method tap (line 36) | Future<DetailsTestScreen> tap()
FILE: integration_tests/lib/page_objects/elements/todo_list_element.dart
class TodoListElement (line 8) | class TodoListElement extends TestElement {
method todoItem (line 25) | TodoItemElement todoItem(String id)
method todoItemAbsent (line 27) | TodoItemElement todoItemAbsent(String id)
FILE: integration_tests/lib/page_objects/screens/add_test_screen.dart
class AddTestScreen (line 7) | class AddTestScreen extends TestScreen {
method isReady (line 17) | Future<bool> isReady({Duration? timeout})
method tapBackButton (line 20) | Future<AddTestScreen> tapBackButton()
method enterTask (line 27) | Future<void> enterTask(String task)
method enterNote (line 34) | Future<void> enterNote(String note)
method tapSaveNewButton (line 41) | Future<void> tapSaveNewButton()
FILE: integration_tests/lib/page_objects/screens/details_test_screen.dart
class DetailsTestScreen (line 8) | class DetailsTestScreen extends TestScreen {
method isReady (line 20) | Future<bool> isReady()
method tapCheckbox (line 30) | Future<DetailsTestScreen> tapCheckbox()
method tapEditTodoButton (line 37) | Future<EditTestScreen> tapEditTodoButton()
method tapDeleteButton (line 44) | Future<void> tapDeleteButton()
method tapBackButton (line 49) | Future<void> tapBackButton()
FILE: integration_tests/lib/page_objects/screens/edit_test_screen.dart
class EditTestScreen (line 7) | class EditTestScreen extends TestScreen {
method isReady (line 17) | Future<bool> isReady()
method tapBackButton (line 23) | Future<void> tapBackButton()
method editTask (line 28) | Future<Null> editTask(String task)
method editNote (line 35) | Future<Null> editNote(String note)
method tapSaveFab (line 42) | Future<Null> tapSaveFab()
FILE: integration_tests/lib/page_objects/screens/home_test_screen.dart
class HomeTestScreen (line 12) | class HomeTestScreen extends TestScreen {
method isLoading (line 24) | Future<bool> isLoading()
method isReady (line 27) | Future<bool> isReady()
method tapTodosTab (line 37) | Future<TodoListElement> tapTodosTab()
method tapStatsTab (line 44) | Future<StatsElement> tapStatsTab()
method tapFilterButton (line 51) | Future<FiltersElement> tapFilterButton()
method tapExtraActionsButton (line 58) | Future<ExtraActionsElement> tapExtraActionsButton()
method tapAddTodoButton (line 70) | Future<AddTestScreen> tapAddTodoButton()
method tapTodo (line 77) | Future<DetailsTestScreen> tapTodo(String text)
FILE: integration_tests/lib/page_objects/screens/test_screen.dart
class TestScreen (line 3) | abstract class TestScreen {
method isLoading (line 8) | Future<bool> isLoading()
method isReady (line 12) | Future<bool> isReady()
FILE: integration_tests/lib/page_objects/utils.dart
function widgetExists (line 3) | Future<bool> widgetExists(
function widgetAbsent (line 16) | Future<bool> widgetAbsent(
FILE: mobx/integration_test/app_test.dart
function main (line 6) | void main()
FILE: mobx/lib/add_todo_screen.dart
class AddTodoScreen (line 5) | class AddTodoScreen extends StatefulWidget {
method createState (line 14) | AddTodoScreenState createState()
class AddTodoScreenState (line 17) | class AddTodoScreenState extends State<AddTodoScreen> {
method dispose (line 23) | void dispose()
method build (line 30) | Widget build(BuildContext context)
FILE: mobx/lib/app.dart
class MobxApp (line 12) | class MobxApp extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: mobx/lib/details_screen.dart
class DetailsScreen (line 8) | class DetailsScreen extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: mobx/lib/edit_todo_screen.dart
class EditTodoScreen (line 5) | class EditTodoScreen extends StatefulWidget {
method createState (line 13) | EditTodoScreenState createState()
class EditTodoScreenState (line 16) | class EditTodoScreenState extends State<EditTodoScreen> {
method build (line 20) | Widget build(BuildContext context)
FILE: mobx/lib/home/extra_actions_button.dart
class ExtraActionsButton (line 6) | class ExtraActionsButton extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
type ExtraAction (line 44) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: mobx/lib/home/filter_button.dart
class FilterButton (line 7) | class FilterButton extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
method _items (line 37) | List<PopupMenuItem<VisibilityFilter>> _items(
FILE: mobx/lib/home/home_screen.dart
class HomeScreen (line 15) | class HomeScreen extends StatefulWidget {
method createState (line 19) | HomeScreenState createState()
class HomeScreenState (line 22) | class HomeScreenState extends State<HomeScreen> {
method build (line 32) | Widget build(BuildContext context)
method _displayRemovalNotification (line 96) | void _displayRemovalNotification(BuildContext context, Todo todo)
type HomeScreenTab (line 118) | enum HomeScreenTab { todos, stats }
FILE: mobx/lib/home/stats_view.dart
class StatsView (line 7) | class StatsView extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
FILE: mobx/lib/home/todo_list_view.dart
class TodoListView (line 10) | class TodoListView extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: mobx/lib/localization.dart
class MobxLocalizations (line 5) | class MobxLocalizations {
method of (line 6) | MobxLocalizations of(BuildContext context)
class MobxLocalizationsDelegate (line 13) | class MobxLocalizationsDelegate
method load (line 16) | Future<MobxLocalizations> load(Locale locale)
method shouldReload (line 20) | bool shouldReload(MobxLocalizationsDelegate old)
method isSupported (line 23) | bool isSupported(Locale locale)
FILE: mobx/lib/main.dart
function main (line 7) | Future<void> main()
FILE: mobx/lib/models/todo.dart
class TodoBase (line 10) | abstract class TodoBase with Store {
method toString (line 30) | String toString()
FILE: mobx/lib/models/todo.g.dart
function toString (line 58) | String toString()
FILE: mobx/lib/models/todo_codec.dart
class TodoCodec (line 9) | class TodoCodec extends Codec<Todo, TodoEntity> {
class _TodoEncoder (line 19) | class _TodoEncoder extends Converter<Todo, TodoEntity> {
method convert (line 23) | TodoEntity convert(Todo todo)
class _TodoDecoder (line 28) | class _TodoDecoder extends Converter<TodoEntity, Todo> {
method convert (line 32) | Todo convert(TodoEntity entity)
FILE: mobx/lib/stores/todo_store.dart
class TodoStoreBase (line 15) | abstract class TodoStoreBase with Store {
method toggleAll (line 69) | void toggleAll()
method clearCompleted (line 78) | void clearCompleted()
method _loadTodos (line 81) | Future<void> _loadTodos()
method init (line 87) | Future<void> init()
method dispose (line 107) | void dispose()
type VisibilityFilter (line 110) | enum VisibilityFilter { all, pending, completed }
FILE: mobx/lib/stores/todo_store.g.dart
function _loadTodos (line 114) | Future<void> _loadTodos()
function toggleAll (line 124) | void toggleAll()
function clearCompleted (line 136) | void clearCompleted()
function toString (line 148) | String toString()
FILE: mobx/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: mobx/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: mobx/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
function gboolean (line 66) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 85) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 94) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 103) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 109) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 117) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 119) | MyApplication* my_application_new() {
FILE: mobx/test/home_screen_test.dart
function main (line 14) | void main()
class _TestWidget (line 84) | class _TestWidget extends StatelessWidget {
method build (line 86) | Widget build(BuildContext context)
function defaultTodos (line 102) | List<Todo> defaultTodos()
function isChecked (line 110) | Matcher isChecked(bool isChecked)
FILE: mobx/test/mock_repository.dart
class MockRepository (line 5) | class MockRepository extends TodosRepository {
method loadTodos (line 12) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 15) | Future<void> saveTodos(List<TodoEntity> update)
FILE: mobx/test/todo_store_test.dart
function main (line 13) | void main()
FILE: mobx/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: mobx/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: mobx/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: mobx/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: mobx/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: mobx/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: mobx/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: mobx/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: mvi_base/lib/src/models/todo.dart
class Todo (line 5) | @immutable
method copyWith (line 15) | Todo copyWith({bool? complete, String? id, String? note, String? task})
method toString (line 39) | String toString()
method toEntity (line 43) | TodoEntity toEntity()
method fromEntity (line 47) | Todo fromEntity(TodoEntity entity)
FILE: mvi_base/lib/src/models/user.dart
class User (line 4) | @immutable
method toEntity (line 10) | UserEntity toEntity()
method fromEntity (line 13) | User fromEntity(UserEntity entity)
method toString (line 17) | String toString()
FILE: mvi_base/lib/src/models/visibility_filter.dart
type VisibilityFilter (line 1) | enum VisibilityFilter { all, active, completed }
FILE: mvi_base/lib/src/mvi_core.dart
class MviDisposable (line 6) | abstract class MviDisposable {
method tearDown (line 7) | Future<void> tearDown()
class MviView (line 15) | abstract class MviView implements MviDisposable {}
class MviPresenter (line 19) | class MviPresenter<ViewModel> extends Stream<ViewModel>
method setUp (line 31) | void setUp()
method tearDown (line 35) | Future<void> tearDown()
method _createSubject (line 38) | BehaviorSubject<ViewState> _createSubject<ViewState>(
method onListen (line 45) | void onListen()
method onCancel (line 53) | void onCancel()
method listen (line 71) | StreamSubscription<ViewModel> listen(
FILE: mvi_base/lib/src/mvi_stats.dart
class StatsPresenter (line 4) | class StatsPresenter extends MviPresenter<StatsModel> {
method _numActive (line 16) | int _numActive(List<Todo> todos)
method _numComplete (line 20) | int _numComplete(List<Todo> todos)
class StatsModel (line 25) | sealed class StatsModel {}
class StatsModelLoading (line 27) | class StatsModelLoading implements StatsModel {}
class StatsModelLoaded (line 29) | class StatsModelLoaded implements StatsModel {
method toString (line 47) | String toString()
FILE: mvi_base/lib/src/mvi_todo.dart
function tearDown (line 13) | Future<void> tearDown()
class DetailPresenter (line 18) | class DetailPresenter extends MviPresenter<Todo> {
method setUp (line 31) | void setUp()
FILE: mvi_base/lib/src/mvi_todos_list.dart
class TodoListModel (line 10) | class TodoListModel {
method toString (line 37) | String toString()
class TodoListView (line 63) | mixin class TodoListView implements MviView {
method tearDown (line 79) | Future<void> tearDown()
class TodoListPresenter (line 91) | class TodoListPresenter extends MviPresenter<TodoListModel> {
method setUp (line 107) | void setUp()
method _buildStream (line 117) | Stream<TodoListModel> _buildStream(
method _filterTodos (line 148) | List<Todo> _filterTodos(List<Todo> todos, VisibilityFilter filter)
FILE: mvi_base/lib/src/todo_list_interactor.dart
class TodoListInteractor (line 8) | class TodoListInteractor {
method todo (line 19) | Stream<Todo> todo(String id)
method updateTodo (line 29) | Future<void> updateTodo(Todo todo)
method addNewTodo (line 31) | Future<void> addNewTodo(Todo todo)
method deleteTodo (line 33) | Future<void> deleteTodo(String id)
method clearCompleted (line 35) | Future<void> clearCompleted([_])
method toggleAll (line 38) | Future<List<dynamic>> toggleAll([_])
method _hasCompletedTodos (line 46) | bool _hasCompletedTodos(List<Todo> todos)
method _completedTodoIds (line 50) | List<String> _completedTodoIds(List<Todo> todos)
method _todosToUpdate (line 60) | List<Todo> _todosToUpdate(List<Todo> todos)
method _allComplete (line 74) | bool _allComplete(List<Todo> todos)
FILE: mvi_base/lib/src/user_interactor.dart
class UserInteractor (line 6) | class UserInteractor {
method login (line 11) | Future<User> login()
FILE: mvi_base/lib/src/uuid.dart
class Uuid (line 13) | class Uuid {
method generateV4 (line 18) | String generateV4()
method _bitsDigits (line 29) | String _bitsDigits(int bitCount, int digitCount)
method _generateBits (line 32) | int _generateBits(int bitCount)
method _printDigits (line 34) | String _printDigits(int value, int count)
FILE: mvi_base/test/mvi_stats_test.dart
function main (line 11) | void main()
FILE: mvi_base/test/mvi_stats_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 27) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockTodoListInteractor (line 36) | class MockTodoListInteractor extends _i1.Mock
method todo (line 81) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 90) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 99) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 108) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 117) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 126) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: mvi_base/test/mvi_todo_test.dart
class MockDetailView (line 10) | class MockDetailView extends Mock with DetailView {}
function main (line 13) | void main()
FILE: mvi_base/test/mvi_todo_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 27) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class _FakeStreamController_1 (line 33) | class _FakeStreamController_1<T> extends _i1.SmartFake
class MockTodoListInteractor (line 42) | class MockTodoListInteractor extends _i1.Mock
method todo (line 87) | _i3.Stream<_i4.Todo> todo(String? id)
method updateTodo (line 96) | _i3.Future<void> updateTodo(_i4.Todo? todo)
method addNewTodo (line 105) | _i3.Future<void> addNewTodo(_i4.Todo? todo)
method deleteTodo (line 114) | _i3.Future<void> deleteTodo(String? id)
method clearCompleted (line 123) | _i3.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 132) | _i3.Future<List<dynamic>> toggleAll([dynamic _0])
class MockDetailView (line 146) | class MockDetailView extends _i1.Mock implements _i4.DetailView {
method tearDown (line 178) | _i3.Future<void> tearDown()
FILE: mvi_base/test/mvi_todos_list_test.dart
function main (line 11) | void main()
class ModelWith (line 282) | class ModelWith extends Matcher {
method describe (line 299) | Description describe(Description description)
method matches (line 304) | bool matches(dynamic item, Map<dynamic, dynamic> matchState)
method _listsEqual (line 338) | bool _listsEqual(List<Todo> first, List<Todo> second)
FILE: mvi_base/test/mvi_todos_list_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 27) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class _FakeUser_1 (line 33) | class _FakeUser_1 extends _i1.SmartFake implements _i3.User {
class MockTodoListInteractor (line 41) | class MockTodoListInteractor extends _i1.Mock
method todo (line 86) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 95) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 104) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 113) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 122) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 131) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
class MockUserInteractor (line 145) | class MockUserInteractor extends _i1.Mock implements _i3.UserInteractor {
method login (line 147) | _i4.Future<_i3.User> login()
FILE: mvi_base/test/todos_interactor_test.dart
function main (line 13) | void main()
FILE: mvi_base/test/todos_interactor_test.mocks.dart
class MockReactiveTodosRepository (line 30) | class MockReactiveTodosRepository extends _i1.Mock
method addNewTodo (line 33) | _i3.Future<void> addNewTodo(_i4.TodoEntity? todo)
method deleteTodo (line 42) | _i3.Future<void> deleteTodo(List<String>? idList)
method todos (line 51) | _i3.Stream<List<_i4.TodoEntity>> todos()
method updateTodo (line 60) | _i3.Future<void> updateTodo(_i4.TodoEntity? todo)
FILE: mvi_base/test/user_interactor_test.dart
function main (line 12) | void main()
FILE: mvi_base/test/user_interactor_test.mocks.dart
class _FakeUserEntity_0 (line 27) | class _FakeUserEntity_0 extends _i1.SmartFake implements _i2.UserEntity {
class MockUserRepository (line 35) | class MockUserRepository extends _i1.Mock implements _i3.UserRepository {
method login (line 37) | _i4.Future<_i2.UserEntity> login()
FILE: mvi_flutter/integration_test/app_test.dart
function main (line 8) | void main()
FILE: mvi_flutter/lib/anonymous_user_repository.dart
class AnonymousUserRepository (line 3) | class AnonymousUserRepository implements UserRepository {
method login (line 5) | Future<UserEntity> login()
FILE: mvi_flutter/lib/dependency_injection.dart
class Injector (line 4) | class Injector extends InheritedWidget {
method of (line 15) | Injector of(BuildContext context)
method updateShouldNotify (line 19) | bool updateShouldNotify(Injector oldWidget)
FILE: mvi_flutter/lib/localization.dart
class BlocLocalizations (line 5) | class BlocLocalizations {
method of (line 6) | BlocLocalizations of(BuildContext context)
class InheritedWidgetLocalizationsDelegate (line 13) | class InheritedWidgetLocalizationsDelegate
method load (line 16) | Future<BlocLocalizations> load(Locale locale)
method shouldReload (line 20) | bool shouldReload(InheritedWidgetLocalizationsDelegate old)
method isSupported (line 23) | bool isSupported(Locale locale)
FILE: mvi_flutter/lib/main.dart
function main (line 10) | Future<void> main()
FILE: mvi_flutter/lib/mvi_app.dart
class MviApp (line 9) | class MviApp extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/screens/add_edit_screen.dart
class AddEditScreen (line 5) | class AddEditScreen extends StatefulWidget {
method createState (line 18) | AddEditScreenState createState()
class AddEditScreenState (line 21) | class AddEditScreenState extends State<AddEditScreen> {
method build (line 28) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/screens/detail_screen.dart
class DetailScreen (line 8) | class DetailScreen extends StatefulWidget {
method createState (line 19) | DetailScreenState createState()
class DetailScreenState (line 24) | class DetailScreenState extends State<DetailScreen> with DetailView {
method didChangeDependencies (line 28) | void didChangeDependencies()
method dispose (line 43) | void dispose()
method build (line 50) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/screens/home_screen.dart
type AppTab (line 12) | enum AppTab { todos, stats }
class HomeScreen (line 14) | class HomeScreen extends StatefulWidget {
method createState (line 20) | State<HomeScreen> createState()
class HomeScreenState (line 25) | class HomeScreenState extends State<HomeScreen> with TodoListView {
method didChangeDependencies (line 30) | void didChangeDependencies()
method dispose (line 44) | void dispose()
method build (line 52) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/widgets/extra_actions_button.dart
class ExtraActionsButton (line 4) | class ExtraActionsButton extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
class ExtraActionsButtonViewModel (line 43) | class ExtraActionsButtonViewModel {
type ExtraAction (line 50) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: mvi_flutter/lib/widgets/filter_button.dart
class FilterButton (line 5) | class FilterButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
class _Button (line 38) | class _Button extends StatelessWidget {
method build (line 52) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/widgets/loading.dart
class LoadingSpinner (line 3) | class LoadingSpinner extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/widgets/stats_counter.dart
class StatsCounter (line 6) | class StatsCounter extends StatefulWidget {
method createState (line 15) | StatsCounterState createState()
class StatsCounterState (line 20) | class StatsCounterState extends State<StatsCounter> {
method didChangeDependencies (line 24) | void didChangeDependencies()
method dispose (line 35) | void dispose()
method build (line 41) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: mvi_flutter/lib/widgets/todo_list.dart
class TodoList (line 8) | class TodoList extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
method _buildList (line 31) | ListView _buildList(List<Todo> todos)
method _removeTodo (line 66) | void _removeTodo(BuildContext context, Todo todo)
method _showUndoSnackbar (line 72) | void _showUndoSnackbar(BuildContext context, Todo todo)
FILE: mvi_flutter/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: mvi_flutter/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: mvi_flutter/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: mvi_flutter/test/detail_screen_test.dart
function main (line 10) | void main()
class MockDetailPresenter (line 118) | class MockDetailPresenter extends MviPresenter<Todo> {
class CheckedMatcher (line 125) | class CheckedMatcher extends test.Matcher {
method describe (line 132) | test.Description describe(test.Description description)
method matches (line 143) | bool matches(item, Map<dynamic, dynamic> matchState)
FILE: mvi_flutter/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: mvi_flutter/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: mvi_flutter/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: mvi_flutter/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: mvi_flutter/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: mvi_flutter/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: mvi_flutter/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: mvi_flutter/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: redux/integration_test/app_test.dart
function main (line 10) | void main()
FILE: redux/lib/actions/actions.dart
class ClearCompletedAction (line 3) | class ClearCompletedAction {}
class ToggleAllAction (line 5) | class ToggleAllAction {}
class LoadTodosAction (line 7) | class LoadTodosAction {}
class TodosNotLoadedAction (line 9) | class TodosNotLoadedAction {}
class TodosLoadedAction (line 11) | class TodosLoadedAction {
method toString (line 17) | String toString()
class UpdateTodoAction (line 22) | class UpdateTodoAction {
method toString (line 29) | String toString()
class DeleteTodoAction (line 34) | class DeleteTodoAction {
method toString (line 40) | String toString()
class AddTodoAction (line 45) | class AddTodoAction {
method toString (line 51) | String toString()
class UpdateFilterAction (line 56) | class UpdateFilterAction {
method toString (line 62) | String toString()
class UpdateTabAction (line 67) | class UpdateTabAction {
method toString (line 73) | String toString()
FILE: redux/lib/app.dart
class ReduxApp (line 11) | class ReduxApp extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: redux/lib/containers/active_tab.dart
class ActiveTab (line 6) | class ActiveTab extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: redux/lib/containers/add_todo.dart
class AddTodo (line 9) | class AddTodo extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
FILE: redux/lib/containers/app_loading.dart
class AppLoading (line 7) | class AppLoading extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
FILE: redux/lib/containers/edit_todo.dart
class EditTodo (line 9) | class EditTodo extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
FILE: redux/lib/containers/extra_actions_container.dart
class ExtraActionsContainer (line 9) | class ExtraActionsContainer extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
class _ViewModel (line 27) | class _ViewModel {
method fromStore (line 33) | _ViewModel fromStore(Store<AppState> store)
FILE: redux/lib/containers/filter_selector.dart
class FilterSelector (line 8) | class FilterSelector extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
class _ViewModel (line 29) | class _ViewModel {
method fromStore (line 35) | _ViewModel fromStore(Store<AppState> store)
FILE: redux/lib/containers/filtered_todos.dart
class FilteredTodos (line 9) | class FilteredTodos extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
class _ViewModel (line 28) | class _ViewModel {
method fromStore (line 43) | _ViewModel fromStore(Store<AppState> store)
FILE: redux/lib/containers/stats.dart
class Stats (line 8) | class Stats extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
class _ViewModel (line 26) | class _ViewModel {
method fromStore (line 32) | _ViewModel fromStore(Store<AppState> store)
method toString (line 51) | String toString()
FILE: redux/lib/containers/tab_selector.dart
class TabSelector (line 8) | class TabSelector extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
class _ViewModel (line 40) | class _ViewModel {
method fromStore (line 46) | _ViewModel fromStore(Store<AppState> store)
FILE: redux/lib/containers/todo_details.dart
class TodoDetails (line 9) | class TodoDetails extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
class _ViewModel (line 32) | class _ViewModel {
FILE: redux/lib/localization.dart
class ReduxLocalizations (line 5) | class ReduxLocalizations {
method of (line 6) | ReduxLocalizations of(BuildContext context)
class ReduxLocalizationsDelegate (line 13) | class ReduxLocalizationsDelegate
method load (line 16) | Future<ReduxLocalizations> load(Locale locale)
method shouldReload (line 20) | bool shouldReload(ReduxLocalizationsDelegate old)
method isSupported (line 23) | bool isSupported(Locale locale)
FILE: redux/lib/main.dart
function main (line 11) | Future<void> main()
FILE: redux/lib/middleware/store_todos_middleware.dart
function createStoreTodosMiddleware (line 7) | List<Middleware<AppState>> createStoreTodosMiddleware(
function _createSaveTodos (line 24) | Middleware<AppState> _createSaveTodos(TodosRepository repository)
function _createLoadTodos (line 34) | Middleware<AppState> _createLoadTodos(TodosRepository repository)
FILE: redux/lib/models/app_state.dart
class AppState (line 4) | @immutable
method copyWith (line 20) | AppState copyWith({
method toString (line 52) | String toString()
FILE: redux/lib/models/app_tab.dart
type AppTab (line 1) | enum AppTab { todos, stats }
FILE: redux/lib/models/extra_action.dart
type ExtraAction (line 1) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: redux/lib/models/todo.dart
class Todo (line 5) | @immutable
method copyWith (line 15) | Todo copyWith({bool? complete, String? id, String? note, String? task})
method toString (line 39) | String toString()
method toEntity (line 43) | TodoEntity toEntity()
method fromEntity (line 47) | Todo fromEntity(TodoEntity entity)
FILE: redux/lib/models/visibility_filter.dart
type VisibilityFilter (line 1) | enum VisibilityFilter { all, active, completed }
FILE: redux/lib/presentation/add_edit_screen.dart
type OnSaveCallback (line 5) | typedef OnSaveCallback = void Function(String task, String note);
class AddEditScreen (line 7) | class AddEditScreen extends StatefulWidget {
method createState (line 20) | AddEditScreenState createState()
class AddEditScreenState (line 23) | class AddEditScreenState extends State<AddEditScreen> {
method build (line 32) | Widget build(BuildContext context)
FILE: redux/lib/presentation/details_screen.dart
class DetailsScreen (line 6) | class DetailsScreen extends StatelessWidget {
method build (line 19) | Widget build(BuildContext context)
FILE: redux/lib/presentation/extra_actions_button.dart
class ExtraActionsButton (line 5) | class ExtraActionsButton extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: redux/lib/presentation/filter_button.dart
class FilterButton (line 5) | class FilterButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
class _Button (line 39) | class _Button extends StatelessWidget {
method build (line 53) | Widget build(BuildContext context)
FILE: redux/lib/presentation/home_screen.dart
class HomeScreen (line 12) | class HomeScreen extends StatefulWidget {
method createState (line 21) | HomeScreenState createState()
class HomeScreenState (line 24) | class HomeScreenState extends State<HomeScreen> {
method initState (line 26) | void initState()
method build (line 32) | Widget build(BuildContext context)
FILE: redux/lib/presentation/loading_indicator.dart
class LoadingIndicator (line 4) | class LoadingIndicator extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: redux/lib/presentation/stats_counter.dart
class StatsCounter (line 6) | class StatsCounter extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
method _buildStats (line 27) | Widget _buildStats(BuildContext context)
FILE: redux/lib/presentation/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: redux/lib/presentation/todo_list.dart
class TodoList (line 9) | class TodoList extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
method _buildListView (line 32) | ListView _buildListView()
method _removeTodo (line 53) | void _removeTodo(BuildContext context, Todo todo)
method _onTodoTap (line 72) | void _onTodoTap(BuildContext context, Todo todo)
FILE: redux/lib/presentation/typedefs.dart
type TodoAdder (line 3) | typedef TodoAdder = void Function(Todo todo);
type TodoRemover (line 5) | typedef TodoRemover = void Function(String id);
type TodoUpdater (line 7) | typedef TodoUpdater = void Function(String id, Todo todo);
FILE: redux/lib/reducers/app_state_reducer.dart
function appReducer (line 8) | AppState appReducer(AppState state, dynamic action)
FILE: redux/lib/reducers/loading_reducer.dart
function _setLoaded (line 9) | bool _setLoaded(bool state, dynamic action)
FILE: redux/lib/reducers/tabs_reducer.dart
function _activeTabReducer (line 9) | AppTab _activeTabReducer(AppTab activeTab, UpdateTabAction action)
FILE: redux/lib/reducers/todos_reducer.dart
function _addTodo (line 16) | List<Todo> _addTodo(List<Todo> todos, AddTodoAction action)
function _deleteTodo (line 20) | List<Todo> _deleteTodo(List<Todo> todos, DeleteTodoAction action)
function _updateTodo (line 24) | List<Todo> _updateTodo(List<Todo> todos, UpdateTodoAction action)
function _clearCompleted (line 30) | List<Todo> _clearCompleted(List<Todo> todos, ClearCompletedAction action)
function _toggleAll (line 34) | List<Todo> _toggleAll(List<Todo> todos, ToggleAllAction action)
function _setLoadedTodos (line 40) | List<Todo> _setLoadedTodos(List<Todo> todos, TodosLoadedAction action)
function _setNoTodos (line 44) | List<Todo> _setNoTodos(List<Todo> todos, TodosNotLoadedAction action)
FILE: redux/lib/reducers/visibility_reducer.dart
function _activeFilterReducer (line 9) | VisibilityFilter _activeFilterReducer(
FILE: redux/lib/selectors/selectors.dart
function todosSelector (line 4) | List<Todo> todosSelector(AppState state)
function activeFilterSelector (line 6) | VisibilityFilter activeFilterSelector(AppState state)
function activeTabSelector (line 8) | AppTab activeTabSelector(AppState state)
function isLoadingSelector (line 10) | bool isLoadingSelector(AppState state)
function allCompleteSelector (line 12) | bool allCompleteSelector(List<Todo> todos)
function numActiveSelector (line 15) | int numActiveSelector(List<Todo> todos)
function numCompletedSelector (line 18) | int numCompletedSelector(List<Todo> todos)
function filteredTodosSelector (line 21) | List<Todo> filteredTodosSelector(
function todoSelector (line 37) | Optional<Todo> todoSelector(List<Todo> todos, String id)
FILE: redux/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: redux/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: redux/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: redux/test/all_tests.dart
function main (line 5) | void main()
FILE: redux/test/middleware_test.dart
function main (line 14) | void main()
FILE: redux/test/middleware_test.mocks.dart
class MockTodosRepository (line 29) | class MockTodosRepository extends _i1.Mock implements _i2.TodosRepository {
method loadTodos (line 31) | _i3.Future<List<_i4.TodoEntity>> loadTodos()
method saveTodos (line 44) | _i3.Future<void> saveTodos(List<_i4.TodoEntity>? todos)
FILE: redux/test/reducer_test.dart
function main (line 8) | void main()
FILE: redux/test/selectors_test.dart
function main (line 6) | void main()
FILE: redux/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: redux/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: redux/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: redux/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: redux/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: redux/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: redux/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: redux/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: scoped_model/integration_test/app_test.dart
function main (line 6) | void main()
FILE: scoped_model/lib/app.dart
class ScopedModelApp (line 10) | class ScopedModelApp extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: scoped_model/lib/localization.dart
class ScopedModelLocalizations (line 5) | class ScopedModelLocalizations {
method of (line 6) | ScopedModelLocalizations of(BuildContext context)
class ScopedModelLocalizationsDelegate (line 16) | class ScopedModelLocalizationsDelegate
method load (line 19) | Future<ScopedModelLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(ScopedModelLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: scoped_model/lib/main.dart
function main (line 8) | void main()
FILE: scoped_model/lib/models.dart
type AppTab (line 4) | enum AppTab { todos, stats }
type ExtraAction (line 6) | enum ExtraAction { toggleAllComplete, clearCompleted }
class Todo (line 8) | class Todo {
method toString (line 32) | String toString()
method toEntity (line 36) | TodoEntity toEntity()
method fromEntity (line 40) | Todo fromEntity(TodoEntity entity)
method copy (line 49) | Todo copy({String? task, bool? complete, String? note, String? id})
FILE: scoped_model/lib/screens/add_edit_screen.dart
class AddEditScreen (line 7) | class AddEditScreen extends StatefulWidget {
method createState (line 13) | AddEditScreenState createState()
class AddEditScreenState (line 16) | class AddEditScreenState extends State<AddEditScreen> {
method build (line 25) | Widget build(BuildContext context)
FILE: scoped_model/lib/screens/detail_screen.dart
class DetailScreen (line 8) | class DetailScreen extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: scoped_model/lib/screens/home_screen.dart
class HomeScreen (line 10) | class HomeScreen extends StatefulWidget {
method createState (line 14) | State<HomeScreen> createState()
class HomeScreenState (line 19) | class HomeScreenState extends State<HomeScreen> {
method build (line 23) | Widget build(BuildContext context)
method _updateTab (line 64) | void _updateTab(AppTab tab)
FILE: scoped_model/lib/todo_list_model.dart
class TodoListModel (line 9) | class TodoListModel extends Model {
method of (line 33) | TodoListModel of(BuildContext context)
method addListener (line 37) | void addListener(VoidCallback listener)
method loadTodos (line 46) | Future<void> loadTodos()
method clearCompleted (line 75) | void clearCompleted()
method toggleAll (line 80) | void toggleAll()
method updateTodo (line 88) | void updateTodo(Todo todo)
method removeTodo (line 96) | void removeTodo(Todo todo)
method addTodo (line 102) | void addTodo(Todo todo)
method _uploadItems (line 108) | void _uploadItems()
method todoById (line 112) | Todo? todoById(String id)
type VisibilityFilter (line 117) | enum VisibilityFilter { all, active, completed }
FILE: scoped_model/lib/widgets/extra_actions_button.dart
class ExtraActionsButton (line 7) | class ExtraActionsButton extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
FILE: scoped_model/lib/widgets/filter_button.dart
class FilterButton (line 6) | class FilterButton extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
method _items (line 32) | List<PopupMenuItem<VisibilityFilter>> _items(
FILE: scoped_model/lib/widgets/stats_counter.dart
class StatsCounter (line 7) | class StatsCounter extends StatelessWidget {
method isActive (line 10) | bool isActive(Todo todo)
method isCompleted (line 12) | bool isCompleted(Todo todo)
method build (line 15) | Widget build(BuildContext context)
FILE: scoped_model/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: scoped_model/lib/widgets/todo_list.dart
class TodoList (line 9) | class TodoList extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
method _buildList (line 29) | ListView _buildList(TodoListModel model)
method _removeTodo (line 67) | void _removeTodo(BuildContext context, Todo todo)
method _showUndoSnackbar (line 73) | void _showUndoSnackbar(BuildContext context, Todo todo)
FILE: scoped_model/lib/widgets/typedefs.dart
type TodoAdder (line 3) | typedef TodoAdder = void Function(Todo todo);
type TodoRemover (line 5) | typedef TodoRemover = void Function(Todo todo);
type TodoUpdater (line 7) | typedef TodoUpdater =
FILE: scoped_model/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: scoped_model/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: scoped_model/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: scoped_model/test/app_state_test.dart
function main (line 8) | void main()
class MockRepository (line 126) | class MockRepository extends TodosRepository {
method loadTodos (line 133) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 138) | Future<void> saveTodos(List<TodoEntity> todos)
FILE: scoped_model/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: scoped_model/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: scoped_model/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: scoped_model/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: scoped_model/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: scoped_model/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: scoped_model/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: scoped_model/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: signals/integration_test/app_test.dart
function main (line 6) | void main()
FILE: signals/lib/add_todo_screen.dart
class AddTodoScreen (line 6) | class AddTodoScreen extends StatefulWidget {
method createState (line 15) | AddTodoScreenState createState()
class AddTodoScreenState (line 18) | class AddTodoScreenState extends State<AddTodoScreen> {
method dispose (line 24) | void dispose()
method build (line 31) | Widget build(BuildContext context)
FILE: signals/lib/app.dart
class SignalsApp (line 12) | class SignalsApp extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: signals/lib/details_screen.dart
class DetailsScreen (line 8) | class DetailsScreen extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: signals/lib/edit_todo_screen.dart
class EditTodoScreen (line 5) | class EditTodoScreen extends StatefulWidget {
method createState (line 13) | EditTodoScreenState createState()
class EditTodoScreenState (line 16) | class EditTodoScreenState extends State<EditTodoScreen> {
method build (line 20) | Widget build(BuildContext context)
FILE: signals/lib/home/extra_actions_button.dart
class ExtraActionsButton (line 7) | class ExtraActionsButton extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
type ExtraAction (line 48) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: signals/lib/home/filter_button.dart
class FilterButton (line 7) | class FilterButton extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
method _items (line 35) | List<PopupMenuItem<VisibilityFilter>> _items(
FILE: signals/lib/home/home_screen.dart
class HomeScreen (line 14) | class HomeScreen extends StatefulWidget {
method createState (line 18) | HomeScreenState createState()
class HomeScreenState (line 21) | class HomeScreenState extends State<HomeScreen> {
method build (line 27) | Widget build(BuildContext context)
method _displayRemovalNotification (line 91) | void _displayRemovalNotification(BuildContext context, Todo todo)
type HomeScreenTab (line 111) | enum HomeScreenTab { todos, stats }
FILE: signals/lib/home/stats_view.dart
class StatsView (line 7) | class StatsView extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
FILE: signals/lib/home/todo_list_view.dart
class TodoListView (line 10) | class TodoListView extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: signals/lib/localization.dart
class SignalsLocalizations (line 5) | class SignalsLocalizations {
method of (line 6) | SignalsLocalizations of(BuildContext context)
class SignalsLocalizationsDelegate (line 16) | class SignalsLocalizationsDelegate
method load (line 19) | Future<SignalsLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(SignalsLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: signals/lib/main.dart
function main (line 7) | Future<void> main()
FILE: signals/lib/todo.dart
class Todo (line 4) | class Todo {
method toString (line 34) | String toString()
FILE: signals/lib/todo_codec.dart
class TodoCodec (line 10) | class TodoCodec extends Codec<Todo, TodoEntity> {
class _TodoEncoder (line 20) | class _TodoEncoder extends Converter<Todo, TodoEntity> {
method convert (line 24) | TodoEntity convert(Todo todo)
class _TodoDecoder (line 34) | class _TodoDecoder extends Converter<TodoEntity, Todo> {
method convert (line 38) | Todo convert(TodoEntity entity)
FILE: signals/lib/todo_list_controller.dart
type VisibilityFilter (line 6) | enum VisibilityFilter { all, active, completed }
class TodoListController (line 8) | class TodoListController {
method toggleAll (line 50) | void toggleAll()
method clearCompleted (line 60) | void clearCompleted()
method _loadTodos (line 62) | Future<void> _loadTodos()
method init (line 68) | Future<void> init()
method dispose (line 86) | void dispose()
FILE: signals/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: signals/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: signals/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: signals/test/todo_list_controller_test.dart
function main (line 11) | void main()
FILE: signals/test/todo_list_controller_test.mocks.dart
class MockTodosRepository (line 29) | class MockTodosRepository extends _i1.Mock implements _i2.TodosRepository {
method loadTodos (line 31) | _i3.Future<List<_i4.TodoEntity>> loadTodos()
method saveTodos (line 44) | _i3.Future<void> saveTodos(List<_i4.TodoEntity>? todos)
FILE: signals/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: signals/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: signals/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: signals/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: signals/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: signals/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: signals/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: signals/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: simple_bloc_flutter/integration_test/app_test.dart
function main (line 8) | void main()
FILE: simple_bloc_flutter/lib/anonymous_user_repository.dart
class AnonymousUserRepository (line 3) | class AnonymousUserRepository implements UserRepository {
method login (line 5) | Future<UserEntity> login()
FILE: simple_bloc_flutter/lib/app.dart
class SimpleBlocApp (line 11) | class SimpleBlocApp extends StatelessWidget {
method build (line 22) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/dependency_injection.dart
class Injector (line 7) | class Injector extends InheritedWidget {
method of (line 18) | Injector of(BuildContext context)
method updateShouldNotify (line 22) | bool updateShouldNotify(Injector oldWidget)
FILE: simple_bloc_flutter/lib/localization.dart
class SimpleBlocLocalizations (line 5) | class SimpleBlocLocalizations {
method of (line 6) | SimpleBlocLocalizations of(BuildContext context)
class SimpleBlocLocalizationsDelegate (line 16) | class SimpleBlocLocalizationsDelegate
method load (line 19) | Future<SimpleBlocLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(SimpleBlocLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: simple_bloc_flutter/lib/main.dart
function main (line 10) | Future<void> main()
FILE: simple_bloc_flutter/lib/screens/add_edit_screen.dart
class AddEditScreen (line 5) | class AddEditScreen extends StatefulWidget {
method createState (line 18) | AddEditScreenState createState()
class AddEditScreenState (line 21) | class AddEditScreenState extends State<AddEditScreen> {
method build (line 28) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/screens/detail_screen.dart
class DetailScreen (line 8) | class DetailScreen extends StatefulWidget {
method createState (line 15) | DetailScreenState createState()
class DetailScreenState (line 20) | class DetailScreenState extends State<DetailScreen> {
method didChangeDependencies (line 24) | void didChangeDependencies()
method dispose (line 30) | void dispose()
method build (line 35) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/screens/home_screen.dart
type AppTab (line 17) | enum AppTab { todos, stats }
class HomeScreen (line 19) | class HomeScreen extends StatefulWidget {
method createState (line 23) | State<StatefulWidget> createState()
class HomeScreenState (line 28) | class HomeScreenState extends State<HomeScreen> {
method didChangeDependencies (line 33) | void didChangeDependencies()
method dispose (line 41) | void dispose()
method build (line 47) | Widget build(BuildContext context)
method _buildActions (line 109) | List<Widget> _buildActions(
FILE: simple_bloc_flutter/lib/widgets/extra_actions_button.dart
class ExtraActionsButton (line 4) | class ExtraActionsButton extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
class ExtraActionsButtonViewModel (line 43) | class ExtraActionsButtonViewModel {
type ExtraAction (line 50) | enum ExtraAction { toggleAllComplete, clearCompleted }
FILE: simple_bloc_flutter/lib/widgets/filter_button.dart
class FilterButton (line 5) | class FilterButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
class _Button (line 38) | class _Button extends StatelessWidget {
method build (line 52) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/widgets/loading.dart
class LoadingSpinner (line 3) | class LoadingSpinner extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/widgets/stats_counter.dart
class StatsCounter (line 5) | class StatsCounter extends StatefulWidget {
method createState (line 14) | StatsCounterState createState()
class StatsCounterState (line 19) | class StatsCounterState extends State<StatsCounter> {
method initState (line 23) | void initState()
method build (line 29) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: simple_bloc_flutter/lib/widgets/todo_list.dart
class TodoList (line 9) | class TodoList extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
method _buildList (line 22) | ListView _buildList(List<Todo> todos)
method _removeTodo (line 59) | void _removeTodo(BuildContext context, Todo todo)
method _showUndoSnackbar (line 65) | void _showUndoSnackbar(BuildContext context, Todo todo)
FILE: simple_bloc_flutter/lib/widgets/todos_bloc_provider.dart
class TodosBlocProvider (line 4) | class TodosBlocProvider extends StatefulWidget {
method createState (line 11) | TodosBlocProviderState createState()
method of (line 13) | TodosListBloc of(BuildContext context)
class TodosBlocProviderState (line 20) | class TodosBlocProviderState extends State<TodosBlocProvider> {
method build (line 22) | Widget build(BuildContext context)
method dispose (line 27) | void dispose()
class _TodosBlocProvider (line 33) | class _TodosBlocProvider extends InheritedWidget {
method updateShouldNotify (line 39) | bool updateShouldNotify(_TodosBlocProvider old)
FILE: simple_bloc_flutter/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: simple_bloc_flutter/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: simple_bloc_flutter/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: simple_bloc_flutter/test/home_screen_test.dart
function main (line 17) | void main()
class _TestWidget (line 125) | class _TestWidget extends StatelessWidget {
method build (line 135) | Widget build(BuildContext context)
function isChecked (line 161) | Matcher isChecked(bool isChecked)
FILE: simple_bloc_flutter/test/home_screen_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 26) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class _FakeUserEntity_1 (line 32) | class _FakeUserEntity_1 extends _i1.SmartFake implements _i2.UserEntity {
class MockTodosInteractor (line 40) | class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor {
method todo (line 84) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 93) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 102) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 111) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 120) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 129) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
class MockUserRepository (line 143) | class MockUserRepository extends _i1.Mock implements _i2.UserRepository {
method login (line 145) | _i4.Future<_i2.UserEntity> login()
FILE: simple_bloc_flutter/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: simple_bloc_flutter/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: simple_bloc_flutter/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: simple_bloc_flutter/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: simple_bloc_flutter/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: simple_bloc_flutter/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: simple_bloc_flutter/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: simple_bloc_flutter/windows/runner/win32_window.h
type Size (line 21) | struct Size {
FILE: simple_blocs/lib/src/models/todo.dart
class Todo (line 5) | @immutable
method copyWith (line 15) | Todo copyWith({bool? complete, String? id, String? note, String? task})
method toString (line 39) | String toString()
method toEntity (line 43) | TodoEntity toEntity()
method fromEntity (line 47) | Todo fromEntity(TodoEntity entity)
FILE: simple_blocs/lib/src/models/visibility_filter.dart
type VisibilityFilter (line 1) | enum VisibilityFilter { all, active, completed }
FILE: simple_blocs/lib/src/stats_bloc.dart
class StatsBloc (line 6) | class StatsBloc {
FILE: simple_blocs/lib/src/todo_bloc.dart
class TodoBloc (line 6) | class TodoBloc {
method deleteTodo (line 12) | void deleteTodo(String id)
method updateTodo (line 14) | void updateTodo(Todo todo)
method todo (line 17) | Stream<Todo> todo(String id)
FILE: simple_blocs/lib/src/todos_interactor.dart
class TodosInteractor (line 13) | class TodosInteractor {
method todo (line 24) | Stream<Todo> todo(String id)
method updateTodo (line 34) | Future<void> updateTodo(Todo todo)
method addNewTodo (line 36) | Future<void> addNewTodo(Todo todo)
method deleteTodo (line 38) | Future<void> deleteTodo(String id)
method clearCompleted (line 40) | Future<void> clearCompleted([_])
method toggleAll (line 43) | Future<List<dynamic>> toggleAll([_])
method _hasCompletedTodos (line 51) | bool _hasCompletedTodos(List<Todo> todos)
method _completedTodoIds (line 55) | List<String> _completedTodoIds(List<Todo> todos)
method _todosToUpdate (line 65) | List<Todo> _todosToUpdate(List<Todo> todos)
method _allComplete (line 79) | bool _allComplete(List<Todo> todos)
FILE: simple_blocs/lib/src/todos_list_bloc.dart
class TodosListBloc (line 7) | class TodosListBloc {
method addTodo (line 17) | void addTodo(Todo todo)
method deleteTodo (line 19) | void deleteTodo(String id)
method updateFilter (line 21) | void updateFilter(VisibilityFilter visibilityFilter)
method clearCompleted (line 24) | void clearCompleted()
method toggleAll (line 26) | void toggleAll()
method updateTodo (line 28) | void updateTodo(Todo todo)
method _filterTodos (line 45) | List<Todo> _filterTodos(List<Todo> todos, VisibilityFilter filter)
method close (line 61) | void close()
FILE: simple_blocs/lib/src/user_bloc.dart
class UserBloc (line 5) | class UserBloc {
method login (line 9) | Stream<UserEntity> login()
FILE: simple_blocs/lib/src/uuid.dart
class Uuid (line 13) | class Uuid {
method generateV4 (line 18) | String generateV4()
method _bitsDigits (line 29) | String _bitsDigits(int bitCount, int digitCount)
method _generateBits (line 32) | int _generateBits(int bitCount)
method _printDigits (line 34) | String _printDigits(int value, int count)
FILE: simple_blocs/test/stats_bloc_test.dart
function main (line 10) | void main()
FILE: simple_blocs/test/stats_bloc_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 26) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockTodosInteractor (line 35) | class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor {
method todo (line 79) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 88) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 97) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 106) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 115) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 124) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: simple_blocs/test/todo_bloc_test.dart
function main (line 11) | void main()
FILE: simple_blocs/test/todo_bloc_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 26) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockTodosInteractor (line 35) | class MockTodosInteractor extends _i1.Mock implements _i3.TodosInteractor {
method todo (line 79) | _i4.Stream<_i3.Todo> todo(String? id)
method updateTodo (line 88) | _i4.Future<void> updateTodo(_i3.Todo? todo)
method addNewTodo (line 97) | _i4.Future<void> addNewTodo(_i3.Todo? todo)
method deleteTodo (line 106) | _i4.Future<void> deleteTodo(String? id)
method clearCompleted (line 115) | _i4.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 124) | _i4.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: simple_blocs/test/todos_bloc_test.dart
function main (line 15) | void main()
FILE: simple_blocs/test/todos_bloc_test.mocks.dart
class _FakeReactiveTodosRepository_0 (line 27) | class _FakeReactiveTodosRepository_0 extends _i1.SmartFake
class MockReactiveTodosRepository (line 36) | class MockReactiveTodosRepository extends _i1.Mock
method addNewTodo (line 39) | _i3.Future<void> addNewTodo(_i4.TodoEntity? todo)
method deleteTodo (line 48) | _i3.Future<void> deleteTodo(List<String>? idList)
method todos (line 57) | _i3.Stream<List<_i4.TodoEntity>> todos()
method updateTodo (line 66) | _i3.Future<void> updateTodo(_i4.TodoEntity? todo)
class MockTodosInteractor (line 78) | class MockTodosInteractor extends _i1.Mock implements _i5.TodosInteractor {
method todo (line 122) | _i3.Stream<_i5.Todo> todo(String? id)
method updateTodo (line 131) | _i3.Future<void> updateTodo(_i5.Todo? todo)
method addNewTodo (line 140) | _i3.Future<void> addNewTodo(_i5.Todo? todo)
method deleteTodo (line 149) | _i3.Future<void> deleteTodo(String? id)
method clearCompleted (line 158) | _i3.Future<void> clearCompleted([dynamic _0])
method toggleAll (line 167) | _i3.Future<List<dynamic>> toggleAll([dynamic _0])
FILE: simple_blocs/test/todos_interactor_test.dart
function main (line 13) | void main()
FILE: simple_blocs/test/todos_interactor_test.mocks.dart
class MockReactiveTodosRepository (line 29) | class MockReactiveTodosRepository extends _i1.Mock
method addNewTodo (line 32) | _i3.Future<void> addNewTodo(_i4.TodoEntity? todo)
method deleteTodo (line 41) | _i3.Future<void> deleteTodo(List<String>? idList)
method todos (line 50) | _i3.Stream<List<_i4.TodoEntity>> todos()
method updateTodo (line 59) | _i3.Future<void> updateTodo(_i4.TodoEntity? todo)
FILE: todos_app_core/lib/src/keys.dart
class ArchSampleKeys (line 3) | class ArchSampleKeys {
method snackbarAction (line 8) | Key snackbarAction(String id)
FILE: todos_app_core/lib/src/localization.dart
class ArchSampleLocalizations (line 8) | class ArchSampleLocalizations {
method load (line 13) | Future<ArchSampleLocalizations> load(Locale locale)
method of (line 19) | ArchSampleLocalizations of(BuildContext context)
method todoDeleted (line 159) | String todoDeleted(String task)
class ArchSampleLocalizationsDelegate (line 195) | class ArchSampleLocalizationsDelegate
method load (line 198) | Future<ArchSampleLocalizations> load(Locale locale)
method shouldReload (line 202) | bool shouldReload(ArchSampleLocalizationsDelegate old)
method isSupported (line 205) | bool isSupported(Locale locale)
FILE: todos_app_core/lib/src/localizations/messages_all.dart
type LibraryLoader (line 14) | typedef LibraryLoader = Future<dynamic> Function();
function _findExact (line 19) | MessageLookupByLibrary? _findExact(String? localeName)
function initializeMessages (line 29) | Future initializeMessages(String localeName)
function _messagesExistFor (line 36) | bool _messagesExistFor(String locale)
function _findGeneratedMessagesFor (line 44) | MessageLookupByLibrary? _findGeneratedMessagesFor(locale)
FILE: todos_app_core/lib/src/localizations/messages_en.dart
type MessageIfAbsent (line 15) | typedef MessageIfAbsent = void Function(String message_str, List args);
class MessageLookup (line 17) | class MessageLookup extends MessageLookupByLibrary {
method m0 (line 21) | String m0(task)
method _notInlinedMessages (line 26) | Map<String, dynamic> _notInlinedMessages(_)
FILE: todos_app_core/lib/src/optional.dart
class Optional (line 8) | class Optional<T> extends IterableBase<T> {
method ifPresent (line 43) | void ifPresent(void Function(T value) ifPresent)
method ifAbsent (line 50) | void ifAbsent(void Function() ifAbsent)
method or (line 61) | T or(T defaultValue)
method transform (line 76) | Optional<S> transform<S>(S Function(T value) transformer)
method toString (line 95) | String toString()
FILE: todos_app_core/lib/src/routes.dart
class ArchSampleRoutes (line 1) | class ArchSampleRoutes {
FILE: todos_app_core/lib/src/theme.dart
class ArchSampleTheme (line 3) | class ArchSampleTheme {
FILE: todos_app_core/lib/src/uuid.dart
class Uuid (line 13) | class Uuid {
method generateV4 (line 18) | String generateV4()
method _bitsDigits (line 29) | String _bitsDigits(int bitCount, int digitCount)
method _generateBits (line 32) | int _generateBits(int bitCount)
method _printDigits (line 34) | String _printDigits(int value, int count)
FILE: todos_repository_core/lib/src/reactive_repository.dart
class ReactiveTodosRepository (line 14) | abstract class ReactiveTodosRepository {
method addNewTodo (line 15) | Future<void> addNewTodo(TodoEntity todo)
method deleteTodo (line 17) | Future<void> deleteTodo(List<String> idList)
method todos (line 19) | Stream<List<TodoEntity>> todos()
method updateTodo (line 21) | Future<void> updateTodo(TodoEntity todo)
FILE: todos_repository_core/lib/src/todo_entity.dart
class TodoEntity (line 1) | class TodoEntity {
method toJson (line 23) | Map<String, Object> toJson()
method toString (line 33) | String toString()
method fromJson (line 37) | TodoEntity fromJson(Map<String, dynamic> json)
FILE: todos_repository_core/lib/src/todos_repository.dart
class TodosRepository (line 13) | abstract class TodosRepository {
method loadTodos (line 16) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 19) | Future<void> saveTodos(List<TodoEntity> todos)
FILE: todos_repository_core/lib/src/user_entity.dart
class UserEntity (line 1) | class UserEntity {
method toString (line 25) | String toString()
FILE: todos_repository_core/lib/src/user_repository.dart
class UserRepository (line 5) | abstract class UserRepository {
method login (line 6) | Future<UserEntity> login()
FILE: todos_repository_local_storage/lib/src/file_storage.dart
class FileStorage (line 12) | class FileStorage implements TodosRepository {
method loadTodos (line 22) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 34) | Future<File> saveTodos(List<TodoEntity> todos)
method _getLocalFile (line 42) | Future<File> _getLocalFile()
method clean (line 48) | Future<FileSystemEntity> clean()
FILE: todos_repository_local_storage/lib/src/key_value_storage.dart
class KeyValueStorage (line 13) | class KeyValueStorage implements TodosRepository {
method loadTodos (line 21) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 36) | Future<bool> saveTodos(List<TodoEntity> todos)
FILE: todos_repository_local_storage/lib/src/reactive_repository.dart
class ReactiveLocalStorageRepository (line 8) | class ReactiveLocalStorageRepository implements ReactiveTodosRepository {
method addNewTodo (line 22) | Future<void> addNewTodo(TodoEntity todo)
method deleteTodo (line 29) | Future<void> deleteTodo(List<String> idList)
method todos (line 43) | Stream<List<TodoEntity>> todos()
method _loadTodos (line 49) | void _loadTodos()
method updateTodo (line 61) | Future<void> updateTodo(TodoEntity update)
FILE: todos_repository_local_storage/lib/src/repository.dart
class LocalStorageRepository (line 9) | class LocalStorageRepository implements TodosRepository {
method loadTodos (line 21) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 35) | Future saveTodos(List<TodoEntity> todos)
FILE: todos_repository_local_storage/lib/src/web_client.dart
class WebClient (line 11) | class WebClient implements TodosRepository {
method loadTodos (line 18) | Future<List<TodoEntity>> loadTodos()
method saveTodos (line 58) | Future<bool> saveTodos(List<TodoEntity> todos)
FILE: todos_repository_local_storage/test/all_tests.dart
function main (line 5) | void main()
FILE: todos_repository_local_storage/test/file_storage_test.dart
function main (line 7) | void main()
FILE: todos_repository_local_storage/test/key_value_storage_test.dart
function main (line 11) | void main()
FILE: todos_repository_local_storage/test/key_value_storage_test.mocks.dart
class MockSharedPreferences (line 28) | class MockSharedPreferences extends _i1.Mock implements _i2.SharedPrefer...
method getKeys (line 30) | Set<String> getKeys()
method get (line 40) | Object? get(String? key)
method getBool (line 49) | bool? getBool(String? key)
method getInt (line 58) | int? getInt(String? key)
method getDouble (line 67) | double? getDouble(String? key)
method getString (line 76) | String? getString(String? key)
method containsKey (line 85) | bool containsKey(String? key)
method getStringList (line 95) | List<String>? getStringList(String? key)
method setBool (line 104) | _i3.Future<bool> setBool(
method setInt (line 121) | _i3.Future<bool> setInt(
method setDouble (line 138) | _i3.Future<bool> setDouble(
method setString (line 155) | _i3.Future<bool> setString(
method setStringList (line 172) | _i3.Future<bool> setStringList(
method remove (line 189) | _i3.Future<bool> remove(String? key)
method commit (line 199) | _i3.Future<bool> commit()
method clear (line 209) | _i3.Future<bool> clear()
method reload (line 219) | _i3.Future<void> reload()
FILE: todos_repository_local_storage/test/reactive_repository_test.dart
function main (line 12) | void main()
function createTodos (line 14) | List<TodoEntity> createTodos([String task = 'Task'])
FILE: todos_repository_local_storage/test/reactive_repository_test.mocks.dart
class MockTodosRepository (line 29) | class MockTodosRepository extends _i1.Mock implements _i2.TodosRepository {
method loadTodos (line 31) | _i3.Future<List<_i4.TodoEntity>> loadTodos()
method saveTodos (line 42) | _i3.Future<void> saveTodos(List<_i4.TodoEntity>? todos)
FILE: todos_repository_local_storage/test/repository_test.dart
function main (line 16) | void main()
function createTodos (line 18) | List<TodoEntity> createTodos()
FILE: todos_repository_local_storage/test/repository_test.mocks.dart
class _FakeDirectory_0 (line 29) | class _FakeDirectory_0 extends _i1.SmartFake implements _i2.Directory {
class _FakeFile_1 (line 39) | class _FakeFile_1 extends _i1.SmartFake implements _i2.File {
class _FakeFileSystemEntity_2 (line 49) | class _FakeFileSystemEntity_2 extends _i1.SmartFake
class _FakeDuration_3 (line 60) | class _FakeDuration_3 extends _i1.SmartFake implements Duration {
class MockFileStorage (line 73) | class MockFileStorage extends _i1.Mock implements _i3.FileStorage {
method loadTodos (line 102) | _i5.Future<List<_i6.TodoEntity>> loadTodos()
method saveTodos (line 113) | _i5.Future<_i2.File> saveTodos(List<_i6.TodoEntity>? todos)
method clean (line 136) | _i5.Future<_i2.FileSystemEntity> clean()
class MockWebClient (line 163) | class MockWebClient extends _i1.Mock implements _i7.WebClient {
method loadTodos (line 178) | _i5.Future<List<_i6.TodoEntity>> loadTodos()
method saveTodos (line 189) | _i5.Future<bool> saveTodos(List<_i6.TodoEntity>? todos)
FILE: vanilla/integration_test/app_test.dart
function main (line 6) | void main()
FILE: vanilla/lib/app.dart
class VanillaApp (line 9) | @immutable
method createState (line 16) | State<StatefulWidget> createState()
class VanillaAppState (line 21) | class VanillaAppState extends State<VanillaApp> {
method initState (line 25) | void initState()
method build (line 45) | Widget build(BuildContext context)
method toggleAll (line 76) | void toggleAll()
method clearCompleted (line 82) | void clearCompleted()
method addTodo (line 88) | void addTodo(Todo todo)
method removeTodo (line 94) | void removeTodo(Todo todo)
method updateTodo (line 100) | void updateTodo(
method setState (line 116) | void setState(VoidCallback fn)
FILE: vanilla/lib/localization.dart
class VanillaLocalizations (line 5) | class VanillaLocalizations {
method of (line 6) | VanillaLocalizations of(BuildContext context)
class VanillaLocalizationsDelegate (line 16) | class VanillaLocalizationsDelegate
method load (line 19) | Future<VanillaLocalizations> load(Locale locale)
method shouldReload (line 23) | bool shouldReload(VanillaLocalizationsDelegate old)
method isSupported (line 26) | bool isSupported(Locale locale)
FILE: vanilla/lib/main.dart
function main (line 6) | Future<void> main()
FILE: vanilla/lib/models.dart
class AppState (line 4) | class AppState {
method filteredTodos (line 14) | List<Todo> filteredTodos(VisibilityFilter activeFilter)
method clearCompleted (line 45) | void clearCompleted()
method toggleAll (line 49) | void toggleAll()
method toString (line 58) | String toString()
type AppTab (line 63) | enum AppTab { todos, stats }
type ExtraAction (line 65) | enum ExtraAction { toggleAllComplete, clearCompleted }
class Todo (line 67) | class Todo {
method toString (line 91) | String toString()
method toEntity (line 95) | TodoEntity toEntity()
method fromEntity (line 99) | Todo fromEntity(TodoEntity entity)
type VisibilityFilter (line 109) | enum VisibilityFilter { all, active, completed }
FILE: vanilla/lib/screens/add_edit_screen.dart
class AddEditScreen (line 6) | class AddEditScreen extends StatefulWidget {
method createState (line 19) | State<AddEditScreen> createState()
class _AddEditScreenState (line 22) | class _AddEditScreenState extends State<AddEditScreen> {
method build (line 29) | Widget build(BuildContext context)
FILE: vanilla/lib/screens/detail_screen.dart
class DetailScreen (line 7) | class DetailScreen extends StatelessWidget {
method build (line 22) | Widget build(BuildContext context)
FILE: vanilla/lib/screens/home_screen.dart
class HomeScreen (line 11) | class HomeScreen extends StatefulWidget {
method createState (line 30) | State<StatefulWidget> createState()
class HomeScreenState (line 35) | class HomeScreenState extends State<HomeScreen> {
method _updateVisibility (line 39) | void _updateVisibility(VisibilityFilter filter)
method _updateTab (line 45) | void _updateTab(AppTab tab)
method build (line 52) | Widget build(BuildContext context)
FILE: vanilla/lib/widgets/extra_actions_button.dart
class ExtraActionsButton (line 5) | class ExtraActionsButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: vanilla/lib/widgets/filter_button.dart
class FilterButton (line 5) | class FilterButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
class _Button (line 38) | class _Button extends StatelessWidget {
method build (line 52) | Widget build(BuildContext context)
FILE: vanilla/lib/widgets/stats_counter.dart
class StatsCounter (line 4) | class StatsCounter extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: vanilla/lib/widgets/todo_item.dart
class TodoItem (line 5) | class TodoItem extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: vanilla/lib/widgets/todo_list.dart
class TodoList (line 8) | class TodoList extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
method _removeTodo (line 67) | void _removeTodo(BuildContext context, Todo todo)
FILE: vanilla/lib/widgets/typedefs.dart
type TodoAdder (line 3) | typedef TodoAdder = void Function(Todo todo);
type TodoRemover (line 5) | typedef TodoRemover = void Function(Todo todo);
type TodoUpdater (line 7) | typedef TodoUpdater =
FILE: vanilla/linux/flutter/generated_plugin_registrant.cc
function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {
FILE: vanilla/linux/runner/main.cc
function main (line 3) | int main(int argc, char** argv) {
FILE: vanilla/linux/runner/my_application.cc
type _MyApplication (line 10) | struct _MyApplication {
function first_frame_cb (line 18) | static void first_frame_cb(MyApplication* self, FlView *view)
function my_application_activate (line 24) | static void my_application_activate(GApplication* application) {
function gboolean (line 80) | static gboolean my_application_local_command_line(GApplication* applicat...
function my_application_startup (line 99) | static void my_application_startup(GApplication* application) {
function my_application_shutdown (line 108) | static void my_application_shutdown(GApplication* application) {
function my_application_dispose (line 117) | static void my_application_dispose(GObject* object) {
function my_application_class_init (line 123) | static void my_application_class_init(MyApplicationClass* klass) {
function my_application_init (line 131) | static void my_application_init(MyApplication* self) {}
function MyApplication (line 133) | MyApplication* my_application_new() {
FILE: vanilla/test/app_state_test.dart
function main (line 4) | void main()
FILE: vanilla/test_driver/integration_test.dart
function main (line 3) | Future<void> main()
FILE: vanilla/windows/flutter/generated_plugin_registrant.cc
function RegisterPlugins (line 10) | void RegisterPlugins(flutter::PluginRegistry* registry) {
FILE: vanilla/windows/runner/flutter_window.cpp
function LRESULT (line 50) | LRESULT
FILE: vanilla/windows/runner/flutter_window.h
function class (line 12) | class FlutterWindow : public Win32Window {
FILE: vanilla/windows/runner/main.cpp
function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
FILE: vanilla/windows/runner/utils.cpp
function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {
FILE: vanilla/windows/runner/win32_window.cpp
function Scale (line 36) | int Scale(int source, double scale_factor) {
function EnableFullDpiSupportIfAvailable (line 42) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
class WindowClassRegistrar (line 59) | class WindowClassRegistrar {
method WindowClassRegistrar (line 64) | static WindowClassRegistrar* GetInstance() {
method WindowClassRegistrar (line 80) | WindowClassRegistrar() = default;
function wchar_t (line 89) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
function LRESULT (line 157) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
function LRESULT (line 176) | LRESULT
function Win32Window (line 236) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
function RECT (line 252) | RECT Win32Window::GetClientArea() {
function HWND (line 258) | HWND Win32Window::GetHandle() {
FILE: vanilla/windows/runner/win32_window.h
type Size (line 21) | struct Size {
Condensed preview — 1543 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,285K chars).
[
{
"path": ".fvmrc",
"chars": 25,
"preview": "{\n \"flutter\": \"3.35.2\"\n}"
},
{
"path": ".github/actions/dart_analysis_and_tests/action.yml",
"chars": 1466,
"preview": "name: \"Validate\"\ndescription: \"Runs lint, format, and test on an app\"\ninputs:\n working-directory:\n description: \"Dir"
},
{
"path": ".github/actions/flutter_analysis_test_build/action.yml",
"chars": 2870,
"preview": "name: \"Validate\"\ndescription: \"Runs lint, format, and test on an app\"\ninputs:\n working-directory:\n description: \"Dir"
},
{
"path": ".github/workflows/analyze_test_build.yml",
"chars": 10136,
"preview": "name: Static Analysis, Run Tests and Build Web Apps\n\non:\n pull_request:\n push:\n branches:\n - main\n\njobs:\n blo"
},
{
"path": ".gitignore",
"chars": 1884,
"preview": "# Files and directories created by pub\n.packages\n.pub/\nbuild/\n# Remove the following pattern if you wish to check in you"
},
{
"path": "CNAME",
"chars": 18,
"preview": "fluttersamples.com"
},
{
"path": "CONTRIBUTING.md",
"chars": 877,
"preview": "# Contributing\n\nContributions are very welcome in many forms :)\n\n## Issues\n\nIf you find a problem with any of the exampl"
},
{
"path": "LICENSE",
"chars": 1523,
"preview": "Copyright (c) 2017, Flutter Architecture Sample Authors.\nAll rights reserved.\n\nRedistribution and use in source and bina"
},
{
"path": "README.md",
"chars": 7485,
"preview": "# flutter_architecture_samples\n\n[\n id(\"kotlin-android\")\n // The Flutter Gradle Plugin must be applied af"
},
{
"path": "bloc_flutter/android/app/src/debug/AndroidManifest.xml",
"chars": 378,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <!-- The INTERNET permission is required for d"
},
{
"path": "bloc_flutter/android/app/src/main/AndroidManifest.xml",
"chars": 2207,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <application\n android:label=\"bloc_flutt"
},
{
"path": "bloc_flutter/android/app/src/main/kotlin/com/example/bloc_flutter_sample/MainActivity.kt",
"chars": 133,
"preview": "package com.example.bloc_flutter_sample\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity : Flutt"
},
{
"path": "bloc_flutter/android/app/src/main/res/drawable/launch_background.xml",
"chars": 434,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "bloc_flutter/android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 438,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "bloc_flutter/android/app/src/main/res/values/styles.xml",
"chars": 996,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "bloc_flutter/android/app/src/main/res/values-night/styles.xml",
"chars": 995,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "bloc_flutter/android/app/src/profile/AndroidManifest.xml",
"chars": 378,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <!-- The INTERNET permission is required for d"
},
{
"path": "bloc_flutter/android/build.gradle.kts",
"chars": 537,
"preview": "allprojects {\n repositories {\n google()\n mavenCentral()\n }\n}\n\nval newBuildDir: Directory =\n rootP"
},
{
"path": "bloc_flutter/android/gradle/wrapper/gradle-wrapper.properties",
"chars": 201,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dist"
},
{
"path": "bloc_flutter/android/gradle.properties",
"chars": 166,
"preview": "org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError\nandroid"
},
{
"path": "bloc_flutter/android/settings.gradle.kts",
"chars": 770,
"preview": "pluginManagement {\n val flutterSdkPath =\n run {\n val properties = java.util.Properties()\n "
},
{
"path": "bloc_flutter/integration_test/app_test.dart",
"chars": 901,
"preview": "import 'package:bloc_flutter_sample/anonymous_user_repository.dart';\nimport 'package:bloc_flutter_sample/app.dart';\nimpo"
},
{
"path": "bloc_flutter/ios/.gitignore",
"chars": 569,
"preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
},
{
"path": "bloc_flutter/ios/Flutter/AppFrameworkInfo.plist",
"chars": 774,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/ios/Flutter/Debug.xcconfig",
"chars": 107,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "bloc_flutter/ios/Flutter/Release.xcconfig",
"chars": 109,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "bloc_flutter/ios/Podfile",
"chars": 1391,
"preview": "# Uncomment this line to define a global platform for your project\n# platform :ios, '13.0'\n\n# CocoaPods analytics sends "
},
{
"path": "bloc_flutter/ios/Runner/AppDelegate.swift",
"chars": 391,
"preview": "import Flutter\nimport UIKit\n\n@main\n@objc class AppDelegate: FlutterAppDelegate {\n override func application(\n _ appl"
},
{
"path": "bloc_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2519,
"preview": "{\n \"images\" : [\n {\n \"size\" : \"20x20\",\n \"idiom\" : \"iphone\",\n \"filename\" : \"Icon-App-20x20@2x.png\",\n "
},
{
"path": "bloc_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 391,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"filename\" : \"LaunchImage.png\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "bloc_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "bloc_flutter/ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 2377,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "bloc_flutter/ios/Runner/Base.lproj/Main.storyboard",
"chars": 1605,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "bloc_flutter/ios/Runner/Info.plist",
"chars": 1665,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/ios/Runner/Runner-Bridging-Header.h",
"chars": 38,
"preview": "#import \"GeneratedPluginRegistrant.h\"\n"
},
{
"path": "bloc_flutter/ios/Runner.xcodeproj/project.pbxproj",
"chars": 23813,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3833,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1510\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "bloc_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 152,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "bloc_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/ios/RunnerTests/RunnerTests.swift",
"chars": 285,
"preview": "import Flutter\nimport UIKit\nimport XCTest\n\nclass RunnerTests: XCTestCase {\n\n func testExample() {\n // If you add cod"
},
{
"path": "bloc_flutter/lib/anonymous_user_repository.dart",
"chars": 244,
"preview": "import 'package:todos_repository_core/todos_repository_core.dart';\n\nclass AnonymousUserRepository implements UserReposit"
},
{
"path": "bloc_flutter/lib/app.dart",
"chars": 1746,
"preview": "import 'package:bloc_flutter_sample/dependency_injection.dart';\nimport 'package:bloc_flutter_sample/localization.dart';\n"
},
{
"path": "bloc_flutter/lib/dependency_injection.dart",
"chars": 677,
"preview": "import 'package:blocs/blocs.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:todos_repository_core/todos_re"
},
{
"path": "bloc_flutter/lib/localization.dart",
"chars": 642,
"preview": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\n\nclass BlocLocalizations {\n static BlocLocalizations of(B"
},
{
"path": "bloc_flutter/lib/main.dart",
"chars": 817,
"preview": "import 'dart:async';\n\nimport 'package:bloc_flutter_sample/anonymous_user_repository.dart';\nimport 'package:bloc_flutter_"
},
{
"path": "bloc_flutter/lib/screens/add_edit_screen.dart",
"chars": 3158,
"preview": "import 'package:blocs/blocs.dart';\nimport 'package:flutter/material.dart';\nimport 'package:todos_app_core/todos_app_core"
},
{
"path": "bloc_flutter/lib/screens/detail_screen.dart",
"chars": 4059,
"preview": "import 'package:bloc_flutter_sample/screens/add_edit_screen.dart';\nimport 'package:bloc_flutter_sample/widgets/loading.d"
},
{
"path": "bloc_flutter/lib/screens/home_screen.dart",
"chars": 5258,
"preview": "import 'dart:async';\n\nimport 'package:bloc_flutter_sample/dependency_injection.dart';\nimport 'package:bloc_flutter_sampl"
},
{
"path": "bloc_flutter/lib/widgets/extra_actions_button.dart",
"chars": 1492,
"preview": "import 'package:flutter/material.dart';\nimport 'package:todos_app_core/todos_app_core.dart';\n\nclass ExtraActionsButton e"
},
{
"path": "bloc_flutter/lib/widgets/filter_button.dart",
"chars": 2873,
"preview": "import 'package:blocs/blocs.dart';\nimport 'package:flutter/material.dart';\nimport 'package:todos_app_core/todos_app_core"
},
{
"path": "bloc_flutter/lib/widgets/loading.dart",
"chars": 238,
"preview": "import 'package:flutter/material.dart';\n\nclass LoadingSpinner extends StatelessWidget {\n const LoadingSpinner({super.ke"
},
{
"path": "bloc_flutter/lib/widgets/stats_counter.dart",
"chars": 2125,
"preview": "import 'package:blocs/blocs.dart';\nimport 'package:flutter/material.dart';\nimport 'package:todos_app_core/todos_app_core"
},
{
"path": "bloc_flutter/lib/widgets/todo_item.dart",
"chars": 1257,
"preview": "import 'package:blocs/blocs.dart';\nimport 'package:flutter/material.dart';\nimport 'package:todos_app_core/todos_app_core"
},
{
"path": "bloc_flutter/lib/widgets/todo_list.dart",
"chars": 2855,
"preview": "import 'package:bloc_flutter_sample/dependency_injection.dart';\nimport 'package:bloc_flutter_sample/screens/detail_scree"
},
{
"path": "bloc_flutter/lib/widgets/todos_bloc_provider.dart",
"chars": 1010,
"preview": "import 'package:blocs/blocs.dart';\nimport 'package:flutter/material.dart';\n\nclass TodosBlocProvider extends StatefulWidg"
},
{
"path": "bloc_flutter/linux/.gitignore",
"chars": 18,
"preview": "flutter/ephemeral\n"
},
{
"path": "bloc_flutter/linux/CMakeLists.txt",
"chars": 4777,
"preview": "# Project-level configuration.\ncmake_minimum_required(VERSION 3.13)\nproject(runner LANGUAGES CXX)\n\n# The name of the exe"
},
{
"path": "bloc_flutter/linux/flutter/CMakeLists.txt",
"chars": 2815,
"preview": "# This file controls Flutter-level build steps. It should not be edited.\ncmake_minimum_required(VERSION 3.10)\n\nset(EPHEM"
},
{
"path": "bloc_flutter/linux/flutter/generated_plugin_registrant.cc",
"chars": 161,
"preview": "//\n// Generated file. Do not edit.\n//\n\n// clang-format off\n\n#include \"generated_plugin_registrant.h\"\n\n\nvoid fl_register"
},
{
"path": "bloc_flutter/linux/flutter/generated_plugin_registrant.h",
"chars": 303,
"preview": "//\n// Generated file. Do not edit.\n//\n\n// clang-format off\n\n#ifndef GENERATED_PLUGIN_REGISTRANT_\n#define GENERATED_PLUG"
},
{
"path": "bloc_flutter/linux/flutter/generated_plugins.cmake",
"chars": 739,
"preview": "#\n# Generated file, do not edit.\n#\n\nlist(APPEND FLUTTER_PLUGIN_LIST\n)\n\nlist(APPEND FLUTTER_FFI_PLUGIN_LIST\n)\n\nset(PLUGIN"
},
{
"path": "bloc_flutter/linux/runner/CMakeLists.txt",
"chars": 974,
"preview": "cmake_minimum_required(VERSION 3.13)\nproject(runner LANGUAGES CXX)\n\n# Define the application target. To change its name,"
},
{
"path": "bloc_flutter/linux/runner/main.cc",
"chars": 180,
"preview": "#include \"my_application.h\"\n\nint main(int argc, char** argv) {\n g_autoptr(MyApplication) app = my_application_new();\n "
},
{
"path": "bloc_flutter/linux/runner/my_application.cc",
"chars": 5370,
"preview": "#include \"my_application.h\"\n\n#include <flutter_linux/flutter_linux.h>\n#ifdef GDK_WINDOWING_X11\n#include <gdk/gdkx.h>\n#en"
},
{
"path": "bloc_flutter/linux/runner/my_application.h",
"chars": 388,
"preview": "#ifndef FLUTTER_MY_APPLICATION_H_\n#define FLUTTER_MY_APPLICATION_H_\n\n#include <gtk/gtk.h>\n\nG_DECLARE_FINAL_TYPE(MyApplic"
},
{
"path": "bloc_flutter/macos/.gitignore",
"chars": 89,
"preview": "# Flutter-related\n**/Flutter/ephemeral/\n**/Pods/\n\n# Xcode-related\n**/dgph\n**/xcuserdata/\n"
},
{
"path": "bloc_flutter/macos/Flutter/Flutter-Debug.xcconfig",
"chars": 125,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"ephemeral/Flutter-Generated.xccon"
},
{
"path": "bloc_flutter/macos/Flutter/Flutter-Release.xcconfig",
"chars": 127,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"ephemeral/Flutter-Generated.xcc"
},
{
"path": "bloc_flutter/macos/Flutter/GeneratedPluginRegistrant.swift",
"chars": 404,
"preview": "//\n// Generated file. Do not edit.\n//\n\nimport FlutterMacOS\nimport Foundation\n\nimport path_provider_foundation\nimport sh"
},
{
"path": "bloc_flutter/macos/Podfile",
"chars": 1366,
"preview": "platform :osx, '10.15'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['CO"
},
{
"path": "bloc_flutter/macos/Runner/AppDelegate.swift",
"chars": 311,
"preview": "import Cocoa\nimport FlutterMacOS\n\n@main\nclass AppDelegate: FlutterAppDelegate {\n override func applicationShouldTermina"
},
{
"path": "bloc_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 1291,
"preview": "{\n \"images\" : [\n {\n \"size\" : \"16x16\",\n \"idiom\" : \"mac\",\n \"filename\" : \"app_icon_16.png\",\n \"scale"
},
{
"path": "bloc_flutter/macos/Runner/Base.lproj/MainMenu.xib",
"chars": 23723,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion"
},
{
"path": "bloc_flutter/macos/Runner/Configs/AppInfo.xcconfig",
"chars": 622,
"preview": "// Application-level settings for the Runner target.\n//\n// This may be replaced with something auto-generated from metad"
},
{
"path": "bloc_flutter/macos/Runner/Configs/Debug.xcconfig",
"chars": 77,
"preview": "#include \"../../Flutter/Flutter-Debug.xcconfig\"\n#include \"Warnings.xcconfig\"\n"
},
{
"path": "bloc_flutter/macos/Runner/Configs/Release.xcconfig",
"chars": 79,
"preview": "#include \"../../Flutter/Flutter-Release.xcconfig\"\n#include \"Warnings.xcconfig\"\n"
},
{
"path": "bloc_flutter/macos/Runner/Configs/Warnings.xcconfig",
"chars": 580,
"preview": "WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverl"
},
{
"path": "bloc_flutter/macos/Runner/DebugProfile.entitlements",
"chars": 348,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/macos/Runner/Info.plist",
"chars": 1060,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/macos/Runner/MainFlutterWindow.swift",
"chars": 388,
"preview": "import Cocoa\nimport FlutterMacOS\n\nclass MainFlutterWindow: NSWindow {\n override func awakeFromNib() {\n let flutterVi"
},
{
"path": "bloc_flutter/macos/Runner/Release.entitlements",
"chars": 240,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/macos/Runner.xcodeproj/project.pbxproj",
"chars": 26496,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXAggregateTarget sec"
},
{
"path": "bloc_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3735,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1510\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "bloc_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 152,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "bloc_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_flutter/macos/RunnerTests/RunnerTests.swift",
"chars": 290,
"preview": "import Cocoa\nimport FlutterMacOS\nimport XCTest\n\nclass RunnerTests: XCTestCase {\n\n func testExample() {\n // If you ad"
},
{
"path": "bloc_flutter/pubspec.yaml",
"chars": 2916,
"preview": "name: bloc_flutter_sample\ndescription: A new Flutter project.\n\n# The following defines the version and build number for "
},
{
"path": "bloc_flutter/test/home_screen_test.dart",
"chars": 5526,
"preview": "import 'package:bloc_flutter_sample/anonymous_user_repository.dart';\nimport 'package:bloc_flutter_sample/dependency_inje"
},
{
"path": "bloc_flutter/test/home_screen_test.mocks.dart",
"chars": 5520,
"preview": "// Mocks generated by Mockito 5.4.6 from annotations\n// in bloc_flutter_sample/test/home_screen_test.dart.\n// Do not man"
},
{
"path": "bloc_flutter/test_driver/integration_test.dart",
"chars": 109,
"preview": "import 'package:integration_test/integration_test_driver.dart';\n\nFuture<void> main() => integrationDriver();\n"
},
{
"path": "bloc_flutter/web/index.html",
"chars": 1236,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <!--\n If you are serving your web app in a path other than the root, change the\n h"
},
{
"path": "bloc_flutter/web/manifest.json",
"chars": 934,
"preview": "{\n \"name\": \"bloc_flutter_sample\",\n \"short_name\": \"bloc_flutter_sample\",\n \"start_url\": \".\",\n \"display\": \"stan"
},
{
"path": "bloc_flutter/windows/.gitignore",
"chars": 291,
"preview": "flutter/ephemeral/\n\n# Visual Studio user-specific files.\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# Visual Studio bu"
},
{
"path": "bloc_flutter/windows/CMakeLists.txt",
"chars": 4174,
"preview": "# Project-level configuration.\ncmake_minimum_required(VERSION 3.14)\nproject(bloc_flutter_sample LANGUAGES CXX)\n\n# The na"
},
{
"path": "bloc_flutter/windows/flutter/CMakeLists.txt",
"chars": 3742,
"preview": "# This file controls Flutter-level build steps. It should not be edited.\ncmake_minimum_required(VERSION 3.14)\n\nset(EPHEM"
},
{
"path": "bloc_flutter/windows/flutter/generated_plugin_registrant.cc",
"chars": 164,
"preview": "//\n// Generated file. Do not edit.\n//\n\n// clang-format off\n\n#include \"generated_plugin_registrant.h\"\n\n\nvoid RegisterPlu"
},
{
"path": "bloc_flutter/windows/flutter/generated_plugin_registrant.h",
"chars": 302,
"preview": "//\n// Generated file. Do not edit.\n//\n\n// clang-format off\n\n#ifndef GENERATED_PLUGIN_REGISTRANT_\n#define GENERATED_PLUG"
},
{
"path": "bloc_flutter/windows/flutter/generated_plugins.cmake",
"chars": 743,
"preview": "#\n# Generated file, do not edit.\n#\n\nlist(APPEND FLUTTER_PLUGIN_LIST\n)\n\nlist(APPEND FLUTTER_FFI_PLUGIN_LIST\n)\n\nset(PLUGIN"
},
{
"path": "bloc_flutter/windows/runner/CMakeLists.txt",
"chars": 1796,
"preview": "cmake_minimum_required(VERSION 3.14)\nproject(runner LANGUAGES CXX)\n\n# Define the application target. To change its name,"
},
{
"path": "bloc_flutter/windows/runner/Runner.rc",
"chars": 3073,
"preview": "// Microsoft Visual C++ generated resource script.\n//\n#pragma code_page(65001)\n#include \"resource.h\"\n\n#define APSTUDIO_R"
},
{
"path": "bloc_flutter/windows/runner/flutter_window.cpp",
"chars": 2122,
"preview": "#include \"flutter_window.h\"\n\n#include <optional>\n\n#include \"flutter/generated_plugin_registrant.h\"\n\nFlutterWindow::Flutt"
},
{
"path": "bloc_flutter/windows/runner/flutter_window.h",
"chars": 928,
"preview": "#ifndef RUNNER_FLUTTER_WINDOW_H_\n#define RUNNER_FLUTTER_WINDOW_H_\n\n#include <flutter/dart_project.h>\n#include <flutter/f"
},
{
"path": "bloc_flutter/windows/runner/main.cpp",
"chars": 1272,
"preview": "#include <flutter/dart_project.h>\n#include <flutter/flutter_view_controller.h>\n#include <windows.h>\n\n#include \"flutter_w"
},
{
"path": "bloc_flutter/windows/runner/resource.h",
"chars": 432,
"preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by Runner.rc\n//\n#define IDI_APP_ICON "
},
{
"path": "bloc_flutter/windows/runner/runner.exe.manifest",
"chars": 602,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersi"
},
{
"path": "bloc_flutter/windows/runner/utils.cpp",
"chars": 1797,
"preview": "#include \"utils.h\"\n\n#include <flutter_windows.h>\n#include <io.h>\n#include <stdio.h>\n#include <windows.h>\n\n#include <iost"
},
{
"path": "bloc_flutter/windows/runner/utils.h",
"chars": 672,
"preview": "#ifndef RUNNER_UTILS_H_\n#define RUNNER_UTILS_H_\n\n#include <string>\n#include <vector>\n\n// Creates a console for the proce"
},
{
"path": "bloc_flutter/windows/runner/win32_window.cpp",
"chars": 8534,
"preview": "#include \"win32_window.h\"\n\n#include <dwmapi.h>\n#include <flutter_windows.h>\n\n#include \"resource.h\"\n\nnamespace {\n\n/// Win"
},
{
"path": "bloc_flutter/windows/runner/win32_window.h",
"chars": 3522,
"preview": "#ifndef RUNNER_WIN32_WINDOW_H_\n#define RUNNER_WIN32_WINDOW_H_\n\n#include <windows.h>\n\n#include <functional>\n#include <mem"
},
{
"path": "bloc_library/.gitignore",
"chars": 1498,
"preview": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*."
},
{
"path": "bloc_library/.metadata",
"chars": 1706,
"preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
},
{
"path": "bloc_library/README.md",
"chars": 2922,
"preview": "# bloc_library sample\n\nThis sample makes use of the [bloc](https://pub.dev/packages/bloc), [flutter_bloc](https://pub.de"
},
{
"path": "bloc_library/analysis_options.yaml",
"chars": 1520,
"preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
},
{
"path": "bloc_library/android/.gitignore",
"chars": 110,
"preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n"
},
{
"path": "bloc_library/android/app/build.gradle",
"chars": 2023,
"preview": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertie"
},
{
"path": "bloc_library/android/app/build.gradle.kts",
"chars": 1396,
"preview": "plugins {\n id(\"com.android.application\")\n id(\"kotlin-android\")\n // The Flutter Gradle Plugin must be applied af"
},
{
"path": "bloc_library/android/app/src/debug/AndroidManifest.xml",
"chars": 332,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.bloc_library\">\n <!-- Fl"
},
{
"path": "bloc_library/android/app/src/main/AndroidManifest.xml",
"chars": 1539,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.bloc_library\">\n <!-- io"
},
{
"path": "bloc_library/android/app/src/main/kotlin/com/example/bloc_library/MainActivity.kt",
"chars": 416,
"preview": "package com.example.bloc_library\n\nimport androidx.annotation.NonNull;\nimport io.flutter.embedding.android.FlutterActivit"
},
{
"path": "bloc_library/android/app/src/main/res/drawable/launch_background.xml",
"chars": 434,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "bloc_library/android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 438,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "bloc_library/android/app/src/main/res/values/styles.xml",
"chars": 361,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTi"
},
{
"path": "bloc_library/android/app/src/main/res/values-night/styles.xml",
"chars": 995,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "bloc_library/android/app/src/profile/AndroidManifest.xml",
"chars": 332,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.bloc_library\">\n <!-- Fl"
},
{
"path": "bloc_library/android/build.gradle",
"chars": 582,
"preview": "buildscript {\n ext.kotlin_version = '1.3.50'\n repositories {\n google()\n jcenter()\n }\n\n depende"
},
{
"path": "bloc_library/android/build.gradle.kts",
"chars": 537,
"preview": "allprojects {\n repositories {\n google()\n mavenCentral()\n }\n}\n\nval newBuildDir: Directory =\n rootP"
},
{
"path": "bloc_library/android/gradle/wrapper/gradle-wrapper.properties",
"chars": 233,
"preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
},
{
"path": "bloc_library/android/gradle.properties",
"chars": 104,
"preview": "org.gradle.jvmargs=-Xmx1536M\nandroid.enableR8=true\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
},
{
"path": "bloc_library/android/settings.gradle",
"chars": 484,
"preview": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef "
},
{
"path": "bloc_library/android/settings.gradle.kts",
"chars": 770,
"preview": "pluginManagement {\n val flutterSdkPath =\n run {\n val properties = java.util.Properties()\n "
},
{
"path": "bloc_library/integration_test/app_test.dart",
"chars": 608,
"preview": "import 'package:bloc_library/app.dart';\nimport 'package:integration_tests/integration_tests.dart' as integration_tests;\n"
},
{
"path": "bloc_library/ios/.gitignore",
"chars": 542,
"preview": "*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/DerivedDat"
},
{
"path": "bloc_library/ios/Flutter/AppFrameworkInfo.plist",
"chars": 794,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_library/ios/Flutter/Debug.xcconfig",
"chars": 106,
"preview": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "bloc_library/ios/Flutter/Release.xcconfig",
"chars": 108,
"preview": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "bloc_library/ios/Flutter/ephemeral/flutter_lldb_helper.py",
"chars": 1276,
"preview": "#\n# Generated file, do not edit.\n#\n\nimport lldb\n\ndef handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_"
},
{
"path": "bloc_library/ios/Flutter/ephemeral/flutter_lldbinit",
"chars": 108,
"preview": "#\n# Generated file, do not edit.\n#\n\ncommand script import --relative-to-command-file flutter_lldb_helper.py\n"
},
{
"path": "bloc_library/ios/Podfile",
"chars": 3437,
"preview": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends n"
},
{
"path": "bloc_library/ios/Runner/AppDelegate.swift",
"chars": 404,
"preview": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n override func applicatio"
},
{
"path": "bloc_library/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2376,
"preview": "{\n \"images\" : [\n {\n \"size\" : \"20x20\",\n \"idiom\" : \"iphone\",\n \"filename\" : \"Icon-App-20x20@2x.png\",\n "
},
{
"path": "bloc_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 391,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"filename\" : \"LaunchImage.png\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "bloc_library/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "bloc_library/ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 2377,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "bloc_library/ios/Runner/Base.lproj/Main.storyboard",
"chars": 1605,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "bloc_library/ios/Runner/Info.plist",
"chars": 1531,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_library/ios/Runner/Runner-Bridging-Header.h",
"chars": 37,
"preview": "#import \"GeneratedPluginRegistrant.h\""
},
{
"path": "bloc_library/ios/Runner.xcodeproj/project.pbxproj",
"chars": 20950,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "bloc_library/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 152,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_library/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_library/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3291,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1020\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "bloc_library/ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 152,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "bloc_library/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_library/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "bloc_library/ios/RunnerTests/RunnerTests.swift",
"chars": 285,
"preview": "import Flutter\nimport UIKit\nimport XCTest\n\nclass RunnerTests: XCTestCase {\n\n func testExample() {\n // If you add cod"
},
{
"path": "bloc_library/lib/app.dart",
"chars": 2167,
"preview": "import 'package:bloc_library/blocs/blocs.dart';\nimport 'package:bloc_library/localization.dart';\nimport 'package:bloc_li"
},
{
"path": "bloc_library/lib/bloc_library_keys.dart",
"chars": 676,
"preview": "import 'package:flutter/widgets.dart';\n\nclass BlocLibraryKeys {\n static final extraActionsPopupMenuButton = const Key(\n"
},
{
"path": "bloc_library/lib/blocs/blocs.dart",
"chars": 166,
"preview": "export './filtered_todos/filtered_todos.dart';\nexport './stats/stats.dart';\nexport './tab/tab.dart';\nexport './todos/tod"
},
{
"path": "bloc_library/lib/blocs/filtered_todos/filtered_todos.dart",
"chars": 113,
"preview": "export './filtered_todos_bloc.dart';\nexport './filtered_todos_event.dart';\nexport './filtered_todos_state.dart';\n"
},
{
"path": "bloc_library/lib/blocs/filtered_todos/filtered_todos_bloc.dart",
"chars": 2152,
"preview": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:bloc_library/blocs/filtered_todos/filtered_todos."
},
{
"path": "bloc_library/lib/blocs/filtered_todos/filtered_todos_event.dart",
"chars": 652,
"preview": "import 'package:equatable/equatable.dart';\nimport 'package:bloc_library/models/models.dart';\n\nabstract class FilteredTod"
},
{
"path": "bloc_library/lib/blocs/filtered_todos/filtered_todos_state.dart",
"chars": 691,
"preview": "import 'package:equatable/equatable.dart';\nimport 'package:bloc_library/models/models.dart';\n\nabstract class FilteredTod"
},
{
"path": "bloc_library/lib/blocs/simple_bloc_observer.dart",
"chars": 723,
"preview": "// ignore_for_file: avoid_print\n\nimport 'package:bloc/bloc.dart';\n\n// We can extend `BlocObserver` and override `onTrans"
},
{
"path": "bloc_library/lib/blocs/stats/stats.dart",
"chars": 80,
"preview": "export 'stats_bloc.dart';\nexport 'stats_event.dart';\nexport 'stats_state.dart';\n"
},
{
"path": "bloc_library/lib/blocs/stats/stats_bloc.dart",
"chars": 1172,
"preview": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:bloc_library/blocs/blocs.dart';\nimport 'package:b"
},
{
"path": "bloc_library/lib/blocs/stats/stats_event.dart",
"chars": 385,
"preview": "import 'package:equatable/equatable.dart';\nimport 'package:bloc_library/models/models.dart';\n\nabstract class StatsEvent "
},
{
"path": "bloc_library/lib/blocs/stats/stats_state.dart",
"chars": 537,
"preview": "import 'package:equatable/equatable.dart';\n\nabstract class StatsState extends Equatable {\n const StatsState();\n\n @over"
},
{
"path": "bloc_library/lib/blocs/tab/tab.dart",
"chars": 49,
"preview": "export 'tab_bloc.dart';\nexport 'tab_event.dart';\n"
},
{
"path": "bloc_library/lib/blocs/tab/tab_bloc.dart",
"chars": 343,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:bloc_library/blocs/tab/tab.dart';\nimport 'package:bloc_library/models/m"
},
{
"path": "bloc_library/lib/blocs/tab/tab_event.dart",
"chars": 359,
"preview": "import 'package:equatable/equatable.dart';\nimport 'package:bloc_library/models/models.dart';\n\nabstract class TabEvent ex"
},
{
"path": "bloc_library/lib/blocs/todos/todos.dart",
"chars": 80,
"preview": "export 'todos_bloc.dart';\nexport 'todos_event.dart';\nexport 'todos_state.dart';\n"
},
{
"path": "bloc_library/lib/blocs/todos/todos_bloc.dart",
"chars": 2805,
"preview": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:bloc_library/blocs/todos/todos.dart';\nimport 'pac"
},
{
"path": "bloc_library/lib/blocs/todos/todos_event.dart",
"chars": 978,
"preview": "import 'package:equatable/equatable.dart';\nimport 'package:bloc_library/models/models.dart';\n\nabstract class TodosEvent "
},
{
"path": "bloc_library/lib/blocs/todos/todos_state.dart",
"chars": 554,
"preview": "import 'package:bloc_library/models/models.dart';\nimport 'package:equatable/equatable.dart';\n\nabstract class TodosState "
},
{
"path": "bloc_library/lib/localization.dart",
"chars": 732,
"preview": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\n\nclass FlutterBlocLocalizations {\n static FlutterBlocLoca"
},
{
"path": "bloc_library/lib/main.dart",
"chars": 887,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:bloc_library/app.dart';\nimport 'package:bloc_library/blocs/simple_bloc_"
},
{
"path": "bloc_library/lib/models/app_tab.dart",
"chars": 29,
"preview": "enum AppTab { todos, stats }\n"
},
{
"path": "bloc_library/lib/models/extra_action.dart",
"chars": 55,
"preview": "enum ExtraAction { toggleAllComplete, clearCompleted }\n"
},
{
"path": "bloc_library/lib/models/models.dart",
"chars": 104,
"preview": "export 'app_tab.dart';\nexport 'extra_action.dart';\nexport 'todo.dart';\nexport 'visibility_filter.dart';\n"
},
{
"path": "bloc_library/lib/models/todo.dart",
"chars": 1356,
"preview": "import 'package:meta/meta.dart';\nimport 'package:todos_app_core/todos_app_core.dart';\nimport 'package:todos_repository_c"
},
{
"path": "bloc_library/lib/models/visibility_filter.dart",
"chars": 49,
"preview": "enum VisibilityFilter { all, active, completed }\n"
},
{
"path": "bloc_library/lib/screens/add_edit_screen.dart",
"chars": 2793,
"preview": "import 'package:bloc_library/models/models.dart';\nimport 'package:flutter/material.dart';\nimport 'package:todos_app_core"
},
{
"path": "bloc_library/lib/screens/details_screen.dart",
"chars": 5159,
"preview": "import 'package:bloc_library/bloc_library_keys.dart';\nimport 'package:bloc_library/blocs/todos/todos.dart';\nimport 'pack"
},
{
"path": "bloc_library/lib/screens/home_screen.dart",
"chars": 1508,
"preview": "import 'package:bloc_library/blocs/blocs.dart';\nimport 'package:bloc_library/blocs/tab/tab.dart';\nimport 'package:bloc_l"
},
{
"path": "bloc_library/lib/screens/screens.dart",
"chars": 94,
"preview": "export './add_edit_screen.dart';\nexport './details_screen.dart';\nexport './home_screen.dart';\n"
},
{
"path": "bloc_library/lib/widgets/delete_todo_snack_bar.dart",
"chars": 672,
"preview": "import 'package:bloc_library/models/models.dart';\nimport 'package:flutter/material.dart';\nimport 'package:todos_app_core"
},
{
"path": "bloc_library/lib/widgets/extra_actions.dart",
"chars": 2102,
"preview": "import 'package:bloc_library/bloc_library_keys.dart';\nimport 'package:bloc_library/blocs/todos/todos.dart';\nimport 'pack"
},
{
"path": "bloc_library/lib/widgets/filter_button.dart",
"chars": 3169,
"preview": "import 'package:bloc_library/blocs/filtered_todos/filtered_todos.dart';\nimport 'package:bloc_library/models/models.dart'"
}
]
// ... and 1343 more files (download for full content)
About this extraction
This page contains the full source code of the brianegan/flutter_architecture_samples GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1543 files (2.9 MB), approximately 835.0k tokens, and a symbol index with 1738 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.