Clean architecture

Composition root

app/providers.dart is the only file that constructs NoteRepositoryImpl.

clean-architectureflutter

lib/app/providers.dart is the only file that constructs NoteRepositoryImpl. The page watches notesProvider. The notifier reads saveNoteUseCaseProvider and listNotesUseCaseProvider. Neither imports data/.

main.dart overrides notesHttpClientProvider with NotesMonitoring.httpClient(). When TALARIA_API_KEY is set, that client is Talaria.wrapHttpClient. The notes repository does not call it. A real API repository would take this client in the same provider that now takes NoteStore.

dart
final noteRepositoryProvider = Provider<NoteRepository>((ref) {
  return NoteRepositoryImpl(ref.watch(noteStoreProvider));
});

final saveNoteUseCaseProvider = Provider<SaveNoteUseCase>((ref) {
  return SaveNoteUseCase(
    ref.watch(noteRepositoryProvider),
    clock: ref.watch(clockProvider),
    ids: ref.watch(idGeneratorProvider),
  );
});

The files are lib/app/providers.dart and lib/main.dart.

Next: Tests.