{"id":13549596,"url":"https://github.com/ouedyan/flutter-mobile-app-template","last_synced_at":"2025-04-02T23:30:30.233Z","repository":{"id":217499079,"uuid":"504044307","full_name":"ouedyan/flutter-mobile-app-template","owner":"ouedyan","description":"A production-ready Flutter template with Hooks Riverpod, Go Router, custom React Query-inspired hooks system, and advanced scaffolding. Includes type-safe theming, i18n, API infrastructure, and development tooling following clean architecture principles. Build scalable, maintainable mobile apps faster.","archived":false,"fork":false,"pushed_at":"2025-03-03T04:47:44.000Z","size":68,"stargazers_count":22,"open_issues_count":1,"forks_count":13,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-03T05:28:06.941Z","etag":null,"topics":["clean-architecture","code-generation","custom-hooks","dio-client","flutter","flutter-architecture","flutter-boilerplate","flutter-generation","flutter-hooks","flutter-launcher-icons","flutter-native-splash","flutter-starter-kit","flutter-template","go-router","hooks-riverpod","mobile-app","responsive-design","slang-i18n","theme-tailor","typescript-like"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ouedyan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-06-16T06:50:31.000Z","updated_at":"2025-03-03T04:47:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"12a30f27-dbdb-44c8-922a-750e84a088a8","html_url":"https://github.com/ouedyan/flutter-mobile-app-template","commit_stats":null,"previous_names":["ouedyan/flutter-mobile-app-template"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouedyan%2Fflutter-mobile-app-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouedyan%2Fflutter-mobile-app-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouedyan%2Fflutter-mobile-app-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouedyan%2Fflutter-mobile-app-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ouedyan","download_url":"https://codeload.github.com/ouedyan/flutter-mobile-app-template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246910800,"owners_count":20853648,"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":["clean-architecture","code-generation","custom-hooks","dio-client","flutter","flutter-architecture","flutter-boilerplate","flutter-generation","flutter-hooks","flutter-launcher-icons","flutter-native-splash","flutter-starter-kit","flutter-template","go-router","hooks-riverpod","mobile-app","responsive-design","slang-i18n","theme-tailor","typescript-like"],"created_at":"2024-08-01T12:01:23.407Z","updated_at":"2025-04-02T23:30:30.207Z","avatar_url":"https://github.com/ouedyan.png","language":"Dart","funding_links":[],"categories":["Dart"],"sub_categories":[],"readme":"# Flutter Mobile Template\n\n![Flutter Version](https://img.shields.io/badge/Flutter-3.29+-blue.svg)\n![Dart Version](https://img.shields.io/badge/Dart-3.7+-blue.svg)\n\nA production-ready Flutter starter template designed for building scalable mobile applications with industry best practices and a comprehensive toolset.\n\n## Why This Template?\n\n- 🚀 **Production-Ready**: Built with scalability and maintainability in mind\n- 📱 **Cross-Platform**: Optimized for both Android and iOS platforms\n- 🔒 **Type-Safe**: Leverages Dart's strong typing with code generation\n- 🔄 **State Management**: Integrated Hooks Riverpod for efficient reactive programming\n- 🌐 **Networking**: Preconfigured Dio API clients with proper error handling\n- 🌍 **Internationalization**: Type-safe i18n solution with Slang\n- 🧪 **Testable**: Structure designed for easy unit and widget testing\n- 🔧 **Developer Experience**: Extensive tooling and utilities included\n\n## Key Features\n\n### State Management \u0026 Dependency Injection\n- **Hooks Riverpod**: Complete integration with code generation support via Riverpod Generator\n- **Flutter Hooks**: For reusable stateful logic\n- **Custom Query System**: React-Query inspired hooks system with useQuery, useInfiniteQuery, useAsyncTask...\n- **Provider Observers**: Built-in debugging tools for state changes\n\n### Routing \u0026 Navigation\n- **Go Router**: Type-safe routing with deep linking support\n- **Custom Route Extensions**:\n  - Fixes for common GoRouter issues\n  - Enhanced RoutePage implementation with consistent navigation behavior\n- **Router State Provider**: For reactive routing state access\n\n### API \u0026 Networking\n- **Dio**: Configured HTTP client with interceptors\n- **Repository Pattern**: Clean data layer organization\n- **Centralized Error Handling**: Via custom ApiService implementation\n- **Mock API Clients**: Testing-friendly API infrastructure with repository pattern\n\n### Data Persistence\n- **Flutter Secure Storage**: Encrypted storage for sensitive data\n- **Shared Preferences**: Simple key-value storage wrapper\n- **Type-safe Storage Access**: Strongly typed providers for storage values\n\n### UI/UX Components\n- **Advanced Scaffolding System**:\n  - Root scaffold with config provider for separation of concerns\n  - Page scaffold with widget delegation and useful common fixes and features\n- **Responsive Design**: Flutter ScreenUtil integration for adaptive interfaces\n- **Theme System**: Type-safe theme with Theme Tailor\n- **SVG Support**: Flutter SVG for vector graphics rendering\n- **Form Management**: Reactive Forms with validation\n- **Common UI Components**:\n  - Dialog and alert system with standardized API\n  - Snackbar and toast messages with consistent styling\n\n### Internationalization\n- **Slang**: For strongly-typed translations\n- **Locale Management**: Dynamic locale switching with persistence\n\n### Developer Tooling\n- **Custom Lint Rules**: Via Flutter Lints, Custom Lint, and Riverpod Lint\n- **Conventional Commits**: Enforced via Commitlint CLI\n- **Git Hooks**: Pre-commit and pre-push checks via Husky\n- **Flutter Gen**: Asset code generation for type-safe asset access\n\n### App Configuration\n- **Launch Icons**: Flutter Launcher Icons for customizing app icons\n- **Native Splash**: Flutter Native Splash for splash screen configuration\n- **App Metadata**: Package name and app name management via Change App Package Name and Rename\n\n## Getting Started\n\n### Initial Project Configuration\n\n1. Change the app name:\n\n```bash\nflutter pub run rename --appname \"YourAppName\"\n```\n\n2. Change the package name/bundle id:\n\n```bash\nflutter pub run change_app_package_name:main com.company.name \u0026\u0026 flutter pub run rename --bundleId com.company.name\n```\n\n3. Configure splash screen in `flutter_native_splash.yaml`:\n\n```yaml\nflutter_native_splash:\n  # ...\n  color: \"#ffffff\"\n  background_image: \"assets/background.png\"\n  image: assets/splash.png\n  # ... other configurations\n```\n\n4. Generate splash screens:\n\n```bash\ndart run flutter_native_splash:create\n```\n\n5. Configure app icons in `flutter_launchers_icons.yaml`:\n\n```yaml\nflutter_icons:\n  android: \"launcher_icon\"\n  image_path: \"assets/icons/launcher_icon.png\"\n  min_sdk_android: 21\n  ios: true\n  remove_alpha_ios: true\n  # ... other configurations\n```\n\n6. Generate app icons:\n\n```bash\ndart run flutter_launcher_icons\n```\n\n## Project Structure\n\n```\n📂 assets\n   📂 icons                                   # Vector and raster icon assets\n   📂 images                                  # Image assets\n   📂 i18n\n      📂 {locale}                             # Localized resources by language\n         📄 {namespace}.json                  # Translation resources by feature\n\n📂 lib\n   📂 constants                               # Application-wide constants\n\n   📂 features                                # Feature modules\n      📂 {feature}                            # e.g., auth, home, settings\n         📂 data\n            📂 models                         # Feature-specific data models\n            📄 {feature}_api_client.dart      # API endpoints for the feature\n            📄 {entity}_provider.dart         # State providers for the feature\n         📂 screens                           # UI screens within the feature\n            📄 {screen_name}_screen.dart\n         📂 widgets                           # Feature-specific UI components\n            📄 {widget_name}.dart\n\n   📂 gen                                     # Generated files (assets, etc.)\n\n   📂 i18n                                    # Internationalization\n      📄 locale_provider.dart                 # Locale state management\n\n   📂 services                                # Core application services\n      📂 api                                  # API infrastructure\n         📄 api_client.dart                   # Base API client\n         📄 api_service.dart                  # API service with error handling\n         📄 mocked_api_client.dart            # Testing helpers\n      📂 navigation                           # Routing system\n         📄 router.dart                       # Application router configuration\n         📄 route_page.dart                   # Custom route page implementation\n         📄 pop_notifier.dart                 # Navigation state refresh fixes\n      📂 storage                              # Data persistence\n         📄 secure_storage.dart               # Encrypted storage service\n         📄 prefs.dart                        # Key-value storage service\n\n   📂 theme                                   # App theming\n      📄 app_theme.dart                       # Theme definitions\n\n   📂 utils                                   # Utility functions and extensions\n      📂 data\n         📂 hooks                             # Custom hook implementations\n            📄 use_query.dart                 # React-Query inspired data fetching\n            📄 use_async_task.dart            # Async operation management\n      📂 forms                                # Form helpers\n      📂 providers                            # Provider utilities\n         📄 extensions.dart                   # Provider extension methods\n      📂 router                               # Router utilities\n         📄 redirects.dart                    # Navigation guards and redirects\n      📂 strings                              # String manipulation\n\n   📂 widgets                                 # Shared UI components\n      📂 scaffold                             # Advanced scaffolding system\n         📄 root_scaffold.dart                # Base root scaffold\n         📄 page_scaffold.dart                # Smart page scaffold\n         📄 root_scaffold_config.dart         # Configuration system\n      📄 alerts.dart                          # Alert dialog system\n      📄 snackbars.dart                       # Notification system\n      📄 svg.dart                             # SVG rendering utilities\n\n   📄 main.dart                               # Application entry point\n```\n\n## Useful Commands\n\n### Code Generation\n\nGenerate code for all code-generating packages:\n\n```bash\ndart run build_runner build\n```\n\nOverwrite conflicting outputs:\n\n```bash\ndart run build_runner build --delete-conflicting-outputs\n```\n\nWatch for changes and regenerate:\n\n```bash\ndart run build_runner watch\n```\n\n### Internationalization\n\nGenerate translation files:\n\n```bash\ndart run slang\n```\n\nAnalyze translations:\n\n```bash\ndart run slang analyze\n```\n\n### App Configuration\n\nGenerate launcher icons:\n\n```bash\ndart run flutter_launcher_icons\n```\n\nGenerate splash screens:\n\n```bash\ndart run flutter_native_splash:create\n```\n\nRestore default splash screen:\n\n```bash\ndart run flutter_native_splash:remove\n```\n\n## Main Tech Stack's Useful Resources\n\n### Flutter \u0026 Dart\n- [Flutter Documentation](https://docs.flutter.dev) - Official Flutter docs\n- [Dart Documentation](https://dart.dev/guides) - Official Dart guides\n\n### State Management\n- [Riverpod Documentation](https://riverpod.dev) - Official Riverpod docs\n- [Flutter Hooks](https://pub.dev/packages/flutter_hooks) - Reuse stateful logic\n\n### Architecture\n- [GoRouter](https://pub.dev/packages/go_router) - Declarative routing\n- [Dio](https://pub.dev/packages/dio) - HTTP client documentation\n\n### Internationalization\n- [Slang](https://pub.dev/packages/slang) - Type-safe internationalization\n\n### UI/UX\n- [Flutter ScreenUtil](https://pub.dev/packages/flutter_screenutil) - Responsive design\n- [Google Fonts](https://pub.dev/packages/google_fonts) - Typography\n- [Flutter SVG](https://pub.dev/packages/flutter_svg) - SVG rendering\n- [Reactive Forms](https://pub.dev/packages/reactive_forms) - Form management\n- [Flutter Animate](https://pub.dev/packages/flutter_animate) - Animation library\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouedyan%2Fflutter-mobile-app-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fouedyan%2Fflutter-mobile-app-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouedyan%2Fflutter-mobile-app-template/lists"}