Zalisoft-Mobile / flutter-mobile-app-template

Flutter Mobile App Project Template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Flutter Mobile App Project Template by Zalisoft (flutter_bloc, provider, riverpod, go_router, vexana, url_launcher, json_serializable, easy_localization bot_toast, flutter_secure_storage, connectivity_plus, intl, sizer, google_fonts, flutter_native_splash, flutter_launcher_icons and other generally used features and tools in production.)

This is a battery included Flutter project template. To the default setup have been added:

  • flutter_bloc - Predictable and Highly testable state management library for Dart.
  • provider - Functional state management library using InheritedWidget, which is the most preferred next to BLoC.
  • go_router - Robust and customizable Flutter navigation package.
  • vexana - A powerful http client package overwritten by the dio package.
  • url_launcher - Flutter plugin for launching a URL. Supports web, phone, SMS, and email schemes.
  • connectivity_plus - This plugin allows Flutter apps to discover network connectivity and configure themselves accordingly. It can distinguish between cellular vs WiFi connection.
  • json_serializable - Generates to/from json serialization code for our data models.
  • easy_localization - Easy and Fast internationalization.
  • bot_toast - Feature-Rich Toast/alert/notification/popup library for Flutter.
  • flutter_secure_storage - A Flutter plugin to store data in secure storage (encrypted, not in plain text like shared_preferences). Eg. for storing user credentials, tokens...
  • intl - Provides internationalization and localization facilities, including message translation, plurals and genders, date/number formatting and parsing, and bidirectional text.
  • sizer - A package for adapting screen and font size.
  • flutter_svg - For rendering SVG assets.
  • google_fonts - A Flutter package to use fonts from fonts.google.com.
  • auto_size_text - Flutter widget that automatically resizes text to fit perfectly within its bounds.
    • flutter_native_splash - Generates iOS, Android, and Web-native code for customizing the native splash screen background color and splash image.
    • flutter_launcher_icons - Fully flexible toolset for updating your Flutter app's launcher icons (Android and Ios).
    • rename - Change your flutter project's AppName and BundleId (IOS, Android, macOS and Web).
    • change_app_package_name - Complementary to rename package, for changing app package name in Android and renaming correctly directories (which rename doesn't do).

Project Config roadmap (Just Informative. Don't repeat these steps.)

All the necessary config and dependencies have already been set and ready for use but there is an explanation of each step if you want to know more about the pre-config or customize it.

Initialize the Flutter project, add all the necessary dependencies mentioned above in the pubspec.yaml configuration file and run pub get.

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.5

  #Text
  google_fonts: ^3.0.1
  auto_size_text: ^3.0.0

  #Responsive
  sizer: ^2.0.15

  #Image
  flutter_svg: ^1.1.6

  #Design
  sensors_plus: ^1.4.0

  #JsonAnnotation
  json_annotation: ^4.7.0

  #Equality Operator
  equatable: ^2.0.5

  #Network
  vexana: ^3.0.1
  url_launcher: ^6.1.6
  connectivity_plus: ^2.3.5

  #Locale Storage
  flutter_secure_storage: ^6.0.0

  #Navigation
  go_router: ^5.1.1

  #Localization
  intl: ^0.17.0
  easy_localization: ^3.0.1
  bot_toast: ^4.0.3

  #State Management
  provider: ^6.0.4
  flutter_riverpod: ^2.1.3
  flutter_bloc: ^8.1.1

  #Native Splash Screen
  flutter_native_splash: ^2.2.13

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^2.0.1

  # Code generation
  build_runner: ^2.2.0

  # Json serialization code generation
  json_serializable: ^6.3.1

  # Native Launcher Icons generator
  flutter_launcher_icons: ^0.10.0

  # Change app package name/bundle id and app name
  change_app_package_name: ^1.1.0
  rename: ^2.0.1

Change the app name to your own one.

flutter pub run rename --appname "YourAppName"

Change the package name/bundle id to your own one.

flutter pub run change_app_package_name:main com.company.name &&
flutter pub run rename --bundleId com.company.name

Add flutter_native_splash.yaml config file to the project root directory. (See the concerned for more information)

flutter_native_splash:
  # ...
  color: "#ffffff"
  background_image: "assets/background.png"
  image: assets/splash.png
  # ...

Generate the splash screens after you have added your own configuration.

flutter pub run flutter_native_splash:create

Add flutter_launchers_icons.yaml config file to the project root directory. (See the concerned for more information)

flutter_icons:
  android: "launcher_icon"
  ios: true
  image_path: "assets/icons/launcher_icon.png"
  # Icons with alpha channel are not allowed in the Apple App Store.
  remove_alpha_ios: true
  # ...

Generate the launcher icons after you have added your own configuration.

flutter pub run flutter_launcher_icons:main

The android minSdKVersion is set to Android API level 21 to comply to modern libraries requirements support. Eg. flutter_secure_storage (requires Android API level 18).

android/app/build.gradle

android {
//...
  defaultConfig {
    //...
    minSdkVersion 21
    targetSdkVersion flutter.targetSdkVersion
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
  }
//...
}

Scripts

Change package name/bundle id

flutter pub run change_app_package_name:main com.new.package.name && flutter pub run rename --bundleId com.new.package.name

Change App Name

flutter pub run rename --appname "NewAppName"

Run build_runner to generate/regenerate code from code generating packages (easy_localization, json_serializable, etc.)

flutter pub run build_runner build

Generate while overriding old outputs

flutter packages pub run build_runner build --delete-conflicting-outputs

Watch and regenerate after each change

flutter pub run build_runner watch

Generate easy_localization translation string keys for usage in code

flutter pub run easy_localization:generate  -O lib/core/ -f keys -o locale_keys.g.dart --source-dir assets/translations

Generate native launcher icons from config.

flutter pub run flutter_launcher_icons:main

Generate native splash screens from config

flutter pub run flutter_native_splash:create

Project directory structure

Main folders structure

πŸ“‚ assets
   πŸ“‚ icons
   πŸ“‚ images
   πŸ“‚ translations
      πŸ“„ en.json
      ...πŸ“„ {locale}.json
      
πŸ“‚ lib
  πŸ“‚ src  
   πŸ“‚ core   
    πŸ“‚ base
      πŸ“‚ bloc
         πŸ“‚ auth
            πŸ“„ {auth_bloc}.dart
            πŸ“„ {auth_event}.dart
            πŸ“„ {auth_state}.dart
         πŸ“„ app_bloc_observer.dart
      πŸ“‚ functions
         πŸ“„ base_functions.dart
      πŸ“‚ models
         πŸ“„ auth_response_model.dart
         πŸ“„ auth_response_model.g.dart
      πŸ“‚ services
         πŸ“‚ auth
            πŸ“„ auth_service.dart
      πŸ“‚ singleton
         πŸ“„ base_singleton.dart
    πŸ“‚ components
       πŸ“‚ animations
             πŸ“‚ animatedLists
                πŸ“„ animated_grid_view.dart
                πŸ“„ animated_horizontal_list_view.dart
                πŸ“„ animated_list_view.dart
                πŸ“„ animated_scroll_view_item.dart
             πŸ“‚ animationUtils
                πŸ“„ animate_in_effect.dart
                πŸ“„ animated_scale.dart
                πŸ“„ animated_text_wrapper.dart
                πŸ“„ animated_text.dart
                πŸ“„ auto_fade.dart
                πŸ“„ fade_in_effect.dart
                πŸ“„ gyroscope_effect_stream_builder.dart
                πŸ“„ list_item_wrapper_widget.dart
                πŸ“„ mouse_region_effect.dart
             πŸ“‚ provider
       πŸ“‚ appbar
            πŸ“„ custom_app_bar.dart
       πŸ“‚ button
            πŸ“„ button_widget.dart
       πŸ“‚ noNetwork
            πŸ“„ no_network_widget.dart
       πŸ“‚ popup
            πŸ“„ main_popup.dart
       πŸ“‚ scaffold
            πŸ“„ custom_scaffold.dart
       πŸ“‚ text
            πŸ“„ custom_text.dart
       πŸ“‚ textFormField
            πŸ“„ text_form_field_widget.dart
            πŸ“„ validate_operations.dart
    πŸ“‚ constants
       πŸ“‚ app
            πŸ“„ app_constants.dart
            πŸ“„ color_constants.dart
       πŸ“‚ enums
            πŸ“„ icon_enums.dart
            πŸ“„ network_enums.dart
            πŸ“„ network_results_enums.dart
            πŸ“„ route_enums.dart
    πŸ“‚ extensions
            πŸ“„ context_extensions.dart
            πŸ“„ iterable_extensions.dart
            πŸ“„ logging_extension.dart
            πŸ“„ network_extensions.dart
            πŸ“„ num_extensions.dart
            πŸ“„ string_extensions.dart
    πŸ“‚ init
       πŸ“‚ language
       πŸ“‚ local_storage
            πŸ“„ local_storage_manager.dart
       πŸ“‚ main_build
            πŸ“„ main_build.dart
       πŸ“‚ network
            πŸ“„ network_change_manager.dart
            πŸ“„ no_network_widget.dart
            πŸ“„ vexana_manager.dart
       πŸ“‚ routes
            πŸ“„ routes.dart
       πŸ“‚ theme
            πŸ“„ app_theme.dart
       πŸ“‚ utils
            πŸ“„ typedefs.dart
       πŸ“„ dependency_injector.dart
    πŸ“‚ mixins
       πŸ“„ launch_mixin.dart
       πŸ“„ safe_context_mixin.dart
       πŸ“„ state_mixin.dart
    πŸ“„ locale_keys.g.dart
   πŸ“‚ view
      πŸ“‚ auth
           πŸ“‚ login
            πŸ“„ login_view.dart
           πŸ“‚ register
            πŸ“„ register_view.dart
      πŸ“‚ home  
        πŸ“‚ bloc
            πŸ“„ {home_bloc}.dart
            πŸ“„ {home_event}.dart
            πŸ“„ {home_state}.dart
        πŸ“‚ model
            πŸ“„ home_model.dart
            πŸ“„ home_model.g.dart
        πŸ“‚ service
            πŸ“„ home_service.dart
        πŸ“‚ widgets
            πŸ“„ home_card.dart 
        πŸ“„ home_view.dart 
   πŸ“„ main.dart
   πŸ“‚ scripts
            πŸ“„ build.sh
   
πŸ“‚ test 
      πŸ“‚ auth
            πŸ“„ auth_service_test.dart 

πŸ“„ flutter_launcher_icons.yaml

πŸ“„ flutter_native_splash.yaml

πŸ“„ pubspec.yaml

πŸ“„ README.md

Project tech stack useful resources

Flutter

Dart

  • Dart - Dart language official website.
  • Dart Docs - Dart official documentation.

About

Flutter Mobile App Project Template


Languages

Language:Dart 96.0%Language:Ruby 2.5%Language:Swift 0.7%Language:Shell 0.4%Language:Kotlin 0.3%Language:Objective-C 0.1%