{"id":16204715,"url":"https://github.com/rp01/flutter-test","last_synced_at":"2026-02-25T10:37:52.736Z","repository":{"id":37987578,"uuid":"358482769","full_name":"rp01/flutter-test","owner":"rp01","description":null,"archived":false,"fork":false,"pushed_at":"2023-03-20T01:10:35.000Z","size":206,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-13T21:17:23.324Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rp01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":"wasabeef","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-04-16T05:12:04.000Z","updated_at":"2024-03-19T05:32:28.000Z","dependencies_parsed_at":"2024-04-21T08:28:22.666Z","dependency_job_id":"f1ddbdf3-9e31-45d5-b765-7daa4a56d6a8","html_url":"https://github.com/rp01/flutter-test","commit_stats":null,"previous_names":["rp01/flutter-test"],"tags_count":0,"template":false,"template_full_name":"wasabeef/flutter-architecture-blueprints","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rp01%2Fflutter-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rp01%2Fflutter-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rp01%2Fflutter-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rp01%2Fflutter-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rp01","download_url":"https://codeload.github.com/rp01/flutter-test/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247719601,"owners_count":20984804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T09:59:04.549Z","updated_at":"2025-10-28T06:17:49.712Z","avatar_url":"https://github.com/rp01.png","language":"Dart","funding_links":["https://github.com/sponsors/wasabeef"],"categories":[],"sub_categories":[],"readme":"# Flutter Architecture Blueprints\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/wasabeef/art/raw/master/flutter-architecture-blueprints/cover.png\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://app.bitrise.io/app/bc96b48850888851\"\u003e\n    \u003cimg src=\"https://app.bitrise.io/app/bc96b48850888851/status.svg?token=kpOAmHRna6NiMkHYsosrlA\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codemagic.io/apps/5f2fd2f0cfa9364ecb48c64e/5f2fd2f0cfa9364ecb48c64d/latest_build\"\u003e\n    \u003cimg src=\"https://api.codemagic.io/apps/5f2fd2f0cfa9364ecb48c64e/5f2fd2f0cfa9364ecb48c64d/status_badge.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/wasabeef/flutter-architecture-blueprints/actions?query=workflow%3A%22Flutter+CI%22\"\u003e\n    \u003cimg src=\"https://github.com/wasabeef/flutter-architecture-blueprints/workflows/Flutter%20CI/badge.svg?branch=master\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/wasabeef/flutter-architecture-blueprints\"\u003e\n    \u003cimg src=\"https://codecov.io/gh/wasabeef/flutter-architecture-blueprints/branch/main/graph/badge.svg?token=9NCYY33KNG\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://twitter.com/wasabeef_jp\"\u003e\n    \u003cimg src=\"https://img.shields.io/twitter/follow/wasabeef_jp?label=%40wasabeef_jp\u0026logoColor=000000\u0026style=social\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nFlutter Architecture Blueprints is a project that introduces MVVM architecture and project structure approaches to developing Flutter apps.\n\n## Documentation\n\n- [Install Flutter](https://flutter.dev/get-started/)\n- [Flutter documentation](https://flutter.dev/docs)\n- [Contributing to Flutter](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/CONTRIBUTING.md)\n\n## Requirements\n\n- [Dart 2.12.0+ (stable channel)](https://github.com/dart-lang/sdk/wiki/Installing-beta-and-dev-releases-with-brew,-choco,-and-apt-get#installing)\n- [FVM](https://github.com/leoafarias/fvm)\n  - [Flutter 2.0.1 via FVM](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/.fvm/fvm_config.json)\n- [npm (for git hooks)](https://treehouse.github.io/installation-guides/mac/node-mac.html)\n\n## Environment\n\n\u003cimg height=\"520px\" src=\"https://github.com/wasabeef/art/raw/master/flutter-architecture-blueprints/MVVM.jpg\" align=\"right\" /\u003e\n\n**iOS**\n- iOS 13+\n\n**Android**\n- Android 5.1+\n    - minSdkVersion 22\n- targetSdkVersion 30\n\n## App architecture\n- Base on [MVVM](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) + [Repository](https://docs.microsoft.com/ja-jp/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design)\n\n## Code Style\n- [Effective Dart](https://dart.dev/guides/language/effective-dart)\n\n## Assets, Fonts\n\n**If added some assets or fonts**\n\n- Use [FlutterGen](https://github.com/FlutterGen/flutter_gen/)\n\n## Models\n\n**If added some models for api results**\n\n- Use [Freezed](https://pub.dev/packages/freezed)\n\n## Localizations\n\n**If added some localizations (i.g. edited [*.arb](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/lib/l10n))**\n\n- Use [Official Flutter localization package](https://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc)\n\n## Git Commit message style\n\n- [Semantic Commit Messages](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716)\n\n## Code collections\n\n#### Project settings\n|Working status|Category|Description|Codes|\n|:---:|---|---|---|\n| ✅ | Dart | Dart version | [pubspec.yaml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/pubspec.yaml#L7-L9) |\n| ✅ | [FVM](https://github.com/leoafarias/fvm) | Flutter Version Management | [.fvm/fvm_config.json](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/.fvm/fvm_config.json) |\n| ✅ | Dart | Switching between Development and Production environment | [constants.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/constants.dart), [runConfigurations](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/.idea/runConfigurations), [Makefile](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/Makefile#L25-L41) |\n| ✅ | Dart | Lint / Analyze | [analysis_options.yaml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/analysis_options.yaml) |\n| ✅ | Android | Kotlin version | [build.gradle](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/android/build.gradle#L2) |\n| ✅ | Android | Apk attributes | build.gradle ([compileSdkVersion](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/android/app/build.gradle#L30), [applicationId](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/android/app/build.gradle#L43), [minSdkVersion](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/android/app/build.gradle#L44), [targetSdkVersion](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/android/app/build.gradle#L45)) |\n| ✅ | Android | Switching between Development and Production environment | [build.gradle](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/android/app/build.gradle#L50-L75), [Flavor dirs](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/android/app/src), [signingConfigs](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/android/app/signingConfigs) |\n| ✅ | iOS | Xcode version | [compatibilityVersion](https://github.com/wasabeef/flutter-architecture-blueprints/blob/3ae7135cc040fecf5bbb2100a353f6594037752d/ios/Runner.xcodeproj/project.pbxproj#L182) |\n| ✅ | iOS | Podfile | [Podfile](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/ios/Podfile) |\n| ✅ | iOS | Switching between Development and Production environment | [xcconfig](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/ios/Config), [Podfile](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/ios/Podfile#L7-L12) |\n| ✅ | [Firebase](https://firebase.flutter.dev/docs/overview) | [Android] Switching between Development and Production google-service.json using flavors | [development and production](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/android/app/src) |\n| ✅ | [Firebase](https://firebase.flutter.dev/docs/overview) | [iOS] Switching between Development and Production GoogleService-Info.plist using run script| [copy_google_service.sh](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/ios/Scripts/copy_google_service.sh), [development and production](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/ios/Runner/Resources/Firebase) |\n| ✅ | [Firebase Auth](https://firebase.flutter.dev/docs/auth/overview) | SignIn, SignOut | [auth_data_source_impl.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/remote/auth_data_source_impl.dart) |\n| ✅ | [Firebase Crashlytics](https://firebase.flutter.dev/docs/crashlytics/overview) | Crash Reports | [main.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/main.dart) |\n| ✅ | [Firebase Performance](https://firebase.flutter.dev/docs/performance/overview) | Network monitoring with [dio_firebase_performance](https://pub.dev/packages/dio_firebase_performance) | [app_dio.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/eb749c742216088cbf2ff821f463e3de02d7d3b3/lib/data/remote/app_dio.dart#L27-L28) |\n\n#### Architecture\n\n|Working status|Category|Description|Codes|\n|:---:|---|---|---|\n| ✅ | Base | Using [Riverpod](https://pub.dev/packages/riverpod) + [Hooks](https://pub.dev/packages/flutter_hooks) + [ChangeNotifier](https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple#changenotifier) + MVVM | [home_page.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/ui/home/home_page.dart#L41-L47), [home_view_model.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/ui/home/home_view_model.dart), [news_repository.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/repository/news_repository.dart), [news_data_source.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/remote/news_data_source.dart) |\n| ✅ | Networking | Using [dio](https://pub.dev/packages/dio) | [app_dio.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/remote/app_dio.dart), [news_data_source_impl.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/lib/data/remote/news_data_source_impl.dart#L16-L33) |\n| ✅ | Data | Using [Freezed](https://pub.dev/packages/freezed) | [model classes](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/model) |\n| ✅ | Persist Data | Using [shared_preferences](https://pub.dev/packages/shared_preferences) | [theme_data_source_impl.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/local/theme_data_source_impl.dart) |\n| ✅ | Constants | Define constants and route names | [constants.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/constants.dart) |\n| ✅ | Localization | Switching between two languages with [Intl package](https://docs.google.com/document/d/10e0saTfAv32OZLRmONy866vnaw0I2jwL8zukykpgWBc/edit) | [*.arb](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/lib/l10n) |\n| ✅ | Error handling | Using Result pattern - A value that represents either a success or a failure, including an associated value in each case. | [result.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/model/result.dart), [news_repository_impl.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/data/repository/news_repository_impl.dart#L16), [home_page.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/e8f0ed78a62e5b27609e60206bd121295a13faac/lib/ui/home/home_page.dart#L51-L63) |\n\n#### UI\n|Working status|Category|Description|Codes|\n|:---:|---|---|---|\n| ✅ | Theme | Dynamically Switch between light and dark themes | [app_theme.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/app.dart#L22-L24) |\n| ✅ | Font | Using [Google font](https://pub.dev/packages/google_fonts) | [app_theme.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/lib/ui/app_theme.dart#L62) |\n| ✅ | Transition | Simple animation between screens using [Hero](https://flutter.dev/docs/development/ui/animations/hero-animations) | [article_item.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/lib/ui/component/article_item.dart#L28), [detail_page.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/be26dc3f7ff27ee2710326abe8ed09893a35386c/lib/ui/detail/datail_page.dart#L13-L24) |\n\n#### Testing\n|Working status|Category|Description|Codes|\n|:---:|---|---|---|\n| ✅ | API(Repositories) | Using [mocktail](https://github.com/felangel/mocktail) | [view_mode_test.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/test/ui/view_model_test.dart), [app_theme_test.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/test/ui/app_theme_test.dart) |\n| ✅️ | UI | Using [mocktail](https://github.com/felangel/mocktail) | [widget_test.dart](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/test/ui/widget_test.dart) |\n| ✅ | Coverage reports | Send the report to [Codecov](https://codecov.io/) on CI |[codecov.yml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/codecov.yml), [codecov.sh](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/scripts/codecov.sh), [flutte-ci.yml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/8e2a373af5e4603aaa75d3c9b9af8150400ab46e/.github/workflows/flutter-ci.yml#L66-L71) |\n\n#### CI\n|Working status|Category|Description|Codes|\n|:---:|---|---|---|\n| ✅ | Git | Git hooks for format and analyze | [package.json](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/package.json#L4-L11), [Makefile](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/Makefile#L9-L12)|\n| ✅ | Git | .gitignore settings | [.gitignore](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/.gitignore) |\n| ✅ | Build | Using [Codemagic](https://codemagic.io/) |[codemagic.yaml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/codemagic.yaml)|\n| ✅ | Build | Using [Bitrise](https://www.bitrise.io/) |[bitrise.yml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/bitrise.yml)|\n| ✅ | Build | Using [Github Actions](https://github.com/features/actions) | [.github/workflows/flutter-ci.yml](https://github.com/wasabeef/flutter-architecture-blueprints/blob/main/.github/workflows/flutter-ci.yml) |\n\n## Getting Started\n\n\n### Setup\n\n```shell script\n$ make setup\n$ export PATH=\"$PATH\":\"$HOME/.pub-cache/bin\" # Add your run-commands (.zshrc, .bashrc, etc)\n$ make dependencies\n$ make build-runner\n```\n\n**And set your IDE for FVM path.**  \n\u003cimg height=\"180px\" src=\"https://github.com/wasabeef/art/raw/master/flutter-architecture-blueprints/fvm-intellij-env.png\"/\u003e\n\n\u003cbr/\u003e\n\n### How to add assets(images..)\n1. Add assets\n2. Run [FlutterGen](https://github.com/fluttergen)\n\n### How to add localizations\n1. Edit [*.arb](https://github.com/wasabeef/flutter-architecture-blueprints/tree/main/lib/l10n) files.\n2. Run generate the `flutter pub get`\n\n\u003cbr/\u003e\n\n### Make .apk and .ipa file\n\n\u003cimg height=\"540px\" src=\"https://github.com/wasabeef/art/raw/master/flutter-architecture-blueprints/running-app.gif\" align=\"left\" /\u003e\n\nAndroid\n```shell script\n$ make build-android-dev\n$ make build-android-prd\n```\n\niOS\n```shell script\n$ make build-ios-dev\n$ make build-ios-prd\n```\n\n### Run app\n```shell script\n$ make run-dev\n$ make run-prd\n```\n## Special Thanks.\n\n- [News API](https://newsapi.org/)\n\n**Contributors**\n- [lcdsmao](https://github.com/lcdsmao)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frp01%2Fflutter-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frp01%2Fflutter-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frp01%2Fflutter-test/lists"}