/todo_app_firebase

Todo App with Firebase Cloud Firestore and Firebase Authentication. Following clean architecture approach with BloC state management.

Primary LanguageDart

Todo App Firebase

Todo App with Firebase Cloud Firestore and Firebase Authentication. Following clean architecture approach with BloC state management.

coverage style: very good analysis License: MIT

Generated by the Very Good CLI πŸ€–

Video

TODOLISTAPP.mp4

Firestore Data Got Updated

Screenshot 2023-06-22 145955

Testing

This project maintains a robust testing suite, with over 80% test coverage. This rigorous approach ensures the stability and reliability of the software, reinforcing our commitment to high-quality and professional development standards. It validated on the Github Workflow run here.

Dependencies

This project utilizes several packages to facilitate application development and testing.

  • auto_route: A route generation library
  • bloc: A predictable state management library
  • cloud_firestore: Firebase Cloud Firestore
  • equatable: To simplify comparisons between instances
  • firebase_auth: Firebase Authentication SDK
  • firebase_core: Firebase Core Flutter SDK
  • flutter_bloc: A Flutter integration for the bloc package
  • flutter_localizations: Flutter localization support
  • flutter_svg: SVG parsing, rendering, and widget library for Flutter
  • get_it: A simple service locator for Dart and Flutter
  • iconsax: A beautiful and simple icons package for Flutter
  • injectable: A simple, smart and lightweight code generator for Flutter/Dart
  • intl: Internationalization and localization facilities

Dev dependencies

Getting Started πŸš€

This project contains 3 flavors:

  • development
  • staging
  • production

To run the desired flavor either use the launch configuration in VSCode/Android Studio or use the following commands:

# Development
$ flutter run --flavor development --target lib/main_development.dart

# Staging
$ flutter run --flavor staging --target lib/main_staging.dart

# Production
$ flutter run --flavor production --target lib/main_production.dart

*Todo App Firebase works on iOS, Android, Web, and Windows.


Running Tests πŸ§ͺ

To run all unit and widget tests use the following command:

$ flutter test --coverage --test-randomize-ordering-seed random

To view the generated coverage report you can use lcov.

# Generate Coverage Report
$ genhtml coverage/lcov.info -o coverage/

# Open Coverage Report
$ open coverage/index.html

Working with Translations 🌐

This project relies on flutter_localizations and follows the official internationalization guide for Flutter.

Adding Strings

  1. To add a new localizable string, open the app_en.arb file at lib/l10n/arb/app_en.arb.
{
    "@@locale": "en",
    "counterAppBarTitle": "Counter",
    "@counterAppBarTitle": {
        "description": "Text shown in the AppBar of the Counter Page"
    }
}
  1. Then add a new key/value and description
{
    "@@locale": "en",
    "counterAppBarTitle": "Counter",
    "@counterAppBarTitle": {
        "description": "Text shown in the AppBar of the Counter Page"
    },
    "helloWorld": "Hello World",
    "@helloWorld": {
        "description": "Hello World Text"
    }
}
  1. Use the new string
import 'package:todo_app_firebase/l10n/l10n.dart';

@override
Widget build(BuildContext context) {
  final l10n = context.l10n;
  return Text(l10n.helloWorld);
}

Adding Supported Locales

Update the CFBundleLocalizations array in the Info.plist at ios/Runner/Info.plist to include the new locale.

    ...

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

    ...

Adding Translations

  1. For each supported locale, add a new ARB file in lib/l10n/arb.
β”œβ”€β”€ l10n
β”‚   β”œβ”€β”€ arb
β”‚   β”‚   β”œβ”€β”€ app_en.arb
β”‚   β”‚   └── app_es.arb
  1. Add the translated strings to each .arb file:

app_en.arb

{
    "@@locale": "en",
    "counterAppBarTitle": "Counter",
    "@counterAppBarTitle": {
        "description": "Text shown in the AppBar of the Counter Page"
    }
}

app_es.arb

{
    "@@locale": "es",
    "counterAppBarTitle": "Contador",
    "@counterAppBarTitle": {
        "description": "Texto mostrado en la AppBar de la pΓ‘gina del contador"
    }
}