djangoflow_app

A simple, opinionated, and minimal Flutter application structure for quick start and easy maintenance.

Getting started

Add djangoflow_app as a dependency in your pubspec.yaml file.

dependencies:
  djangoflow_app: <latest version>

Import djangoflow_app and use it to create your root StatelessWidget.

import 'package:djangoflow_app/djangoflow_app.dart';

void main() => DjangoflowAppRunner.run(
      onException: (exception, stackTrace) {
        // Your custom exception handling
      },
      rootWidgetBuilder: (appBuilder) async {
        return MaterialApp(
          title: 'Djangoflow App',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: appBuilder(AppBuilder(
            repositoryProviders: [
              // Your repository providers
            ],
            providers: [
              // Your BLoC providers
            ],
            listeners: [
              // Your BLoC listeners
            ],
            builder: (context) => YourRootWidget(),
          )),
        );
      },
    );

Features

AppBuilder: A custom StatelessWidget that allows you to provide global BlocProvider, BlocListener, RepositoryProvider, and callbacks for initState and dispose in a single place.

AppCubitBuilder, AppCubitConsumer, and AppCubitListener: A set of custom BlocBuilder, BlocConsumer, and BlocListener that allows you to listen to the AppCubit state changes.

DjangoflowAppRunner: A custom runApp that allows you to handle exceptions globally and sets up the HydratedBloc storage and BlocObserver for the entire application.

DjangoflowAppSnackbar: A simple SnackBar manager that allows you to show different types of SnackBar (info, error, in-app notification) globally with a single instance.

SandboxBanner: A simple Banner that allows you to show a banner on the top-start corner of the screen with a custom message and color. It's useful to indicate the current environment (e.g., sandbox, production).

EnvSwitcher: A simple widget that allows you to toggle between different environments with a long press.

Note

DjangoflowAppSnackbar uses ScaffoldMessenger. DjangoflowAppSnackbar's global key needs to be provided to MaterialApp's scaffoldMessengerKey.

Libraries

djangoflow_app