Prise en main

Installation

Ajouter Qora à une application Flutter ou à un projet Dart pur, et le brancher avec un seul widget.

Flutter

Ajouter la dépendance

Terminal
flutter pub add qora_flutter

Cela ajoute qora_flutter: ^1.3.1 au pubspec.yaml. Le package apporte qora et connectivity_plus ; aucune autre entrée n'est nécessaire.

Envelopper l'application

Créez un seul QoraClient et placez-le au-dessus de l'application avec QoraScope.auto :

main.dart
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:qora_flutter/qora_flutter.dart';

void main() {
  final client = QoraClient(
    config: QoraClientConfig(
      defaultOptions: const QoraOptions(staleTime: Duration(minutes: 5)),
      debugMode: kDebugMode,
    ),
  );

  runApp(QoraScope.auto(client: client, child: const MyApp()));
}

QoraScope.auto démarre aussi deux managers, ce qui vous donne ces comportements sans code supplémentaire :

  • Cycle de vie : quand l'application revient au premier plan après au moins 5 secondes, les requêtes périmées affichées à l'écran se relancent.
  • Connectivité : les requêtes se mettent en pause quand l'appareil est hors-ligne et se relancent à la reconnexion.

L'utiliser

Tout widget sous QoraScope peut maintenant utiliser QoraBuilder, QoraMutationBuilder, ou context.qora pour les appels impératifs. Le Démarrage rapide construit un premier écran.

Notes de configuration

  • staleTime est la durée pendant laquelle une donnée récupérée est considérée comme fraîche. Par défaut elle vaut zéro : la donnée est toujours périmée et revalidée en arrière-plan quand un widget se monte. Cinq minutes est un bon point de départ pour la plupart des écrans.
  • debugMode: kDebugMode affiche l'activité du cache uniquement en mode debug.
  • Pour régler les managers (par exemple un délai d'arrière-plan plus long), passez-les vous-même avec le constructeur par défaut :
main.dart
runApp(
  QoraScope(
    client: client,
    lifecycleManager: FlutterLifecycleManager(
      qoraClient: client,
      minBackgroundDuration: const Duration(seconds: 30),
    ),
    connectivityManager: FlutterConnectivityManager(),
    child: const MyApp(),
  ),
);

QoraScope sans managers fonctionne aussi, mais rien ne se relance alors au retour au premier plan ni à la reconnexion.


Hooks

Si votre application utilise flutter_hooks, ajoutez aussi qora_hooks :

Terminal
flutter pub add qora_hooks flutter_hooks

La configuration reste le même QoraScope.auto. Voir Hooks.


Dart pur

Pour les CLI, les serveurs et les packages partagés, utilisez le package principal. Il n'a aucune dépendance Flutter :

Terminal
dart pub add qora
bin/main.dart
import 'package:qora/qora.dart';

Future<void> main() async {
  final client = QoraClient(
    config: const QoraClientConfig(
      defaultOptions: QoraOptions(staleTime: Duration(minutes: 5)),
    ),
  );

  // Fetch ponctuel : mis en cache, dédupliqué, relancé en cas d'échec.
  final user = await client.fetchQuery<User>(
    key: ['users', 1],
    fetcher: () => api.getUser(1),
  );
  print('User: ${user.name}');

  // Toujours frais : servi depuis le cache, sans appel réseau.
  await client.fetchQuery<User>(key: ['users', 1], fetcher: () => api.getUser(1));

  client.dispose();
}

watchQuery renvoie un stream de chaque transition d'état quand vous avez besoin de réactivité hors de Flutter. Voir Requêtes.


Overlay DevTools (optionnel)

Terminal
flutter pub add qora_devtools_overlay

Voir Overlay intégré pour la configuration. C'est une dépendance normale, car votre main.dart l'importe ; en build release il n'affiche rien et son UI est retirée par le tree shaking.


Étapes suivantes

Copyright © 2026