Communitygithub.com

flutter/flutter-apply-architecture-best-practices

Conçoit une application Flutter en utilisant l'approche en couches recommandée (UI, Logique, Données). À utiliser lors de la structuration d'un nouveau projet ou du refactoring pour l'évolutivité.

Qu'est-ce que flutter-apply-architecture-best-practices ?

Cette compétence permet aux développeurs d'appliquer une architecture en couches à une application Flutter, en séparant clairement l'interface utilisateur, la logique métier et l'accès aux données. Elle est particulièrement utile lors de la création d'un nouveau projet ou du refactoring d'un projet existant pour améliorer sa maintenabilité et son évolutivité. Compatible avec tous les environnements de développement exploitant des assistants IA (comme Claude Code, Cursor, ou Codex), elle s'appuie sur les principes de clean architecture et de séparation des préoccupations. En structurant l'application selon cette approche, les développeurs bénéficient d'une meilleure testabilité, d'une réutilisation du code simplifiée et d'une adaptation plus aisée aux changements futurs.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/flutter/skills/tree/main/skills/flutter-apply-architecture-best-practices

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait flutter-apply-architecture-best-practices ?

Conçoit une application Flutter en utilisant l'approche en couches recommandée (UI, Logique, Données). À utiliser lors de la structuration d'un nouveau projet ou du refactoring pour l'évolutivité.

Présentation

Cette compétence vous guide pour structurer votre application Flutter selon les meilleures pratiques architecturales, en séparant les responsabilités en trois couches principales :

  • Couche UI : widgets, pages, routes, gestionnaires d'état (ex. StatefulWidget, Bloc, Provider).
  • Couche Logique : repositories, use cases, services métier.
  • Couche Données : sources de données (API, base de données locale, fichiers).

Pourquoi cette approche ?

  • Maintenabilité : chaque couche a une responsabilité unique, facilitant les modifications.
  • Testabilité : les couches peuvent être testées indépendamment.
  • Évolutivité : ajouter de nouvelles fonctionnalités sans impacter le reste du code.
  • Réutilisabilité : les composants métier peuvent être réutilisés dans différents contextes.

Utilisation

  1. Planification : analysez les besoins de votre application et identifiez les couches nécessaires.
  2. Structure des dossiers : créez une arborescence reflétant les couches (ex. lib/ui/, lib/logic/, lib/data/).
  3. Implémentation : développez les composants de chaque couche en respectant les dépendances (la couche UI dépend de la logique, qui dépend des données).
  4. Tests : écrivez des tests unitaires pour la logique et des tests d'intégration pour l'UI.

Exemple

// Couche Données : un repository
class UserRepository {
  Future<User> getUser(int id) async {
    final response = await http.get(Uri.parse('https://api.example.com/users/$id'));
    return User.fromJson(jsonDecode(response.body));
  }
}

// Couche Logique : un use case
class GetUserUseCase {
  final UserRepository repository;
  GetUserUseCase(this.repository);

  Future<User> call(int id) => repository.getUser(id);
}

// Couche UI : un widget
class UserWidget extends StatelessWidget {
  final GetUserUseCase useCase;
  final int userId;

  UserWidget({required this.useCase, required this.userId});

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<User>(
      future: useCase(userId),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        } else if (snapshot.hasError) {
          return Text('Erreur : ${snapshot.error}');
        } else {
          return Text('Utilisateur : ${snapshot.data!.name}');
        }
      },
    );
  }
}

Ressources supplémentaires

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

flutter/flutter-accessibility

Configure your Flutter app to support assistive technologies like Screen Readers

flutter/flutter-accessibility-audit

Triggers an accessibility scan through the widget_inspector and automatically adds Semantics widgets or missing labels to the source code.

flutter/flutter-adding-home-screen-widgets

Adds home screen widgets to a Flutter app for Android and iOS. Use when providing glanceable app information or quick actions on the device home screen.

flutter/flutter-add-integration-test

Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests. Use when adding integration testing to a project, exploring UI components via MCP, or automating user flows with the integration_test package.

flutter/flutter-add-widget-preview

Adds interactive widget previews to the project using the previews.dart system. Use when creating new UI components or updating existing screens to ensure consistent design and interactive testing.

flutter/flutter-add-widget-test

Implement a component-level test using `WidgetTester` to verify UI rendering and user interactions (tapping, scrolling, entering text). Use when validating that a specific widget displays correct data and responds to events as expected.

flutter/flutter-animating-apps

Implements animated effects, transitions, and motion in a Flutter app. Use when adding visual feedback, shared element transitions, or physics-based animations.

flutter/flutter-animation

Add animated effects to your Flutter app

flutter/flutter-app-size

Measure and reduce the size of the Flutter app bundle, APK, or IPA

flutter/flutter-architecting-apps

Architects a Flutter application using the recommended layered approach (UI, Logic, Data). Use when structuring a new project or refactoring for scalability.

flutter/flutter-architecture

Use the Flutter team's recommended app architecture

flutter/flutter-building-forms

Builds Flutter forms with validation and user input handling. Use when creating login screens, data entry forms, or any multi-field user input.

flutter/flutter-building-layouts

Builds Flutter layouts using the constraint system and layout widgets. Use when creating or refining the UI structure of a Flutter application.

flutter/flutter-building-plugins

Builds Flutter plugins that provide native interop for other apps to use. Use when creating reusable packages that bridge Flutter with platform-specific functionality.

flutter/flutter-build-responsive-layout

Use `LayoutBuilder`, `MediaQuery`, or `Expanded/Flexible` to create a layout that adapts to different screen sizes. Use when you need the UI to look good on both mobile and tablet/desktop form factors.

flutter/flutter-caching

Cache data in a Flutter app

flutter/flutter-caching-data

Implements caching strategies for Flutter apps to improve performance and offline support. Use when retaining app data locally to reduce network requests or speed up startup.

flutter/flutter-concurrency

Execute long-running tasks in a background thread in Flutter

flutter/flutter-databases

Work with databases in a Flutter app

flutter/flutter-embedding-native-views

Embeds native Android, iOS, or macOS views into a Flutter app. Use when integrating complex native components like maps or web views.

Skills associés