The Books is a programming-oriented application written in Flutter meant to list some books.

This application is built only for iOS and Android platforms. Even though the Flutter SDK has great support for all platforms including Linux, Windows, MacOS, and Web.

This README is designed to guide how this project is structured and some configurations.


This project uses the Flutter SDK and Flutter Version Management tool(a.k.a FVM). If you do not have any idea how to install these tools you can check them out in the Flutter – Get Started and FVM – Getting Started.

With these tools installed locally you can run the fvm flutter pub get command to fetch the dependencies.


Based on some concepts of Clean Architecture this architecture is designed to be simpler and don’t overengineer, thus making things not slower and harder.

We have three main layers data, domain and presentation.


The entry point of all users with some app interactions. This layer has the responsibility for rendering widgets and state management.


This layer contains the business rules for the application. Also, it provides data for the presentation layer and accesses the data layer.


Responsible for accessing external data like external database, local database, APIs, etc.


There’re some tools that the project uses and also it’s good this knowledge to fully understand the project.

Assets generation

We’re able to generate the paths for the assets(resources like fonts, images, etc) with the flutter_gen package. Execute the command flutter packages pub run build_runner build command for generating the path for the files in assets/ directory.

Golden Tests

The Alchesmit package was installed for creating tests for the widget’s appearance in an easier way using the testGoldens() for creating this kind of test.

You can start reading the Testing the widget’s appearance in Flutter if you would like deep dive into the Golden Tests with Alchesmit in Flutter.

Integration tests

Flutter’s integration_test does a great job but has some features we can’t test using the standard API like some native interactions. The Books’ project uses the Patrol integration test tool providing an easy way for writing integration tests in Flutter Framework.

You need to install the patrol_cli locally before starting with the Integration Tests in the Books project.

After installed the patrol_cli locally, you may run the tests executing the patrol test --target integration_test/integration_test.dart --verbose --no-label command.


The Books’ project uses the flutter_localizations from Flutter SDK for language internationalization. Use the localization global variable for accessing the internationalization like the example below:

class MyWidget extends StatelessWidget {
  const MyWidget({super.key});

  Widget build(BuildContext context) {
    return AppText.paragraph12(localizations.home)


In The Flutter environment, there are a lot of state management tools. But, the Books’ project uses the Riverpod because:

  • simple and easy to use;
  • good for deal with asynchronous;
  • great community.

If you do not have any idea how to use the Riverpod you can check the Introduction.


View Github