Skip to content

A flutter boilerplate project containing bloc, lints, hive, easy_translations and more!

Notifications You must be signed in to change notification settings

anfeichtinger/flutter_production_boilerplate

Repository files navigation

Flutter Production Boilerplate

Note: If you prefer to use Riverpod instead of BLOC you can use flutter_production_boilerplate_riverpod

A flutter project containing bloc, flutter_lints, hive, easy_translations and more!

This repository is the starting point for my personal projects. If you have any suggestions or improvements feel free to let me know. The project strives to implement best practices recommended by Google and other developers. These best practices include but are not limited to:

  • Using BLOC & Cubit for state management.
  • Using Flutter Lints for stricter linting rules.
  • Using Hive for platform independent storage that also works for web.
  • Project structure, const constructors, extracted widgets and many more...

Installation

This repository requires Flutter to be installed and present in your development environment.

Clone the project and enter the project folder.

git clone [email protected]:anfeichtinger/flutter_production_boilerplate.git
cd flutter_production_boilerplate

You can remove the screenshots located in assets/img/.

Get the dependencies.

flutter pub get

Run the app via command line or through your development environment. (optional)

flutter run lib/main.dart

Pub packages

This repository makes use of the following pub packages:

Package Version Usage
Bloc ^8.1.4 State management*
Flutter Bloc ^8.1.6 State management*
Hydrated Bloc ^9.1.5 Persists Bloc state with Hive
Equatable ^2.0.5 Easily compare custom classes, used for Bloc states*
Flutter Lints ^4.0.0 Stricter linting rules*
Flutter Displaymode ^0.6.0 Support high refresh rate displays*
Path Provider ^2.1.4 Get the save path for Hive
Easy Localization ^3.0.7 Makes localization easy
Hive ^2.2.3 Platform independent storage.
Hive Flutter ^1.1.0 Flutter plugin for hive.
Url Launcher ^6.3.0 Open urls in Browser
FluentUI Icons ^1.1.255 Microsoft's open source icon library
Staggered Grid view ^0.7.0 Better grid views

* Recommended to keep regardless of your project

Using this package as a starting point

After following the installation steps you can customize your project. The screens and widgets that are inside the project can be easily replaced or removed. They are supposed to give the user a basic understanding of the relations between widgets and some good practices. The code includes some comments with documentation and examples. The examples can be found by searching for "Example:" inside the project files.

Changing the package and app name

You can follow the instructions in this Stackoverflow issue or this Flutter package .

Theme

You can customize your brand colors in the lib/config/style.dart file. The project uses colors from TailwindCSS. The default theme contains comments that indicate which tailwind color is used. Feel free to replace the colors with your own or use dynamic material 3 themes.

Removing unwanted packages

If a package is not listed, then removing it from pubspec.yaml as well as all imports and uses should be enough. This is required for removing every packages, the following instructions are an addition to that.

Flutter Lints

Delete the analysis_options.yaml file. As an alternative you can modify the rules in this file or use a different package like Lint.

Easy Localization

Remove the assets/translations folder. Go to ios/Runner/Info.plist and remove the following code:

<key>CFBundleLocalizations</key>
<array>
	<string>en</string>
   	<string>de</string>
</array>

Url Launcher

For iOS go to ios/Runner/Info.plist and remove the following code:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>https</string>
  <string>http</string>
</array>

For Android you can take a look at this Stackoverflow issue for more information. Go to android/app/src/AndroidManifest.xml and remove the following code:

<queries>
     <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="https" />
    </intent>
</queries>

Screenshots

Light Theme

Home Light Info Light
Home Light Info Light

Dark Theme

Home Dark German Info Dark German
Home Dark Info Dark

License

MIT