[{"data":1,"prerenderedAt":3094},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-getting-started-quick-start":342,"-fr-getting-started-quick-start-surround":3089},[4,45,91,137,195,236,257,291,327],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Prise en main","i-lucide-rocket","/fr/getting-started","fr/01.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Qu'est-ce que Qora ?","/fr/getting-started/what-is-qora","fr/01.getting-started/2.what-is-qora","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/fr/getting-started/installation","fr/01.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Démarrage rapide","/fr/getting-started/quick-start","fr/01.getting-started/4.quick-start",{"title":25,"path":26,"stem":27,"icon":28},"Comparaison","/fr/getting-started/comparison","fr/01.getting-started/5.comparison","i-lucide-scale",{"title":30,"path":31,"stem":32,"icon":33},"Venant de TanStack Query","/fr/getting-started/coming-from-tanstack-query","fr/01.getting-started/6.coming-from-tanstack-query","i-lucide-arrow-left-right",{"title":35,"path":36,"stem":37,"icon":38},"Migrer depuis d'Autres Librairies","/fr/getting-started/migrating-from-other-libraries","fr/01.getting-started/7.migrating-from-other-libraries","i-lucide-arrow-right-left",{"title":40,"path":41,"stem":42,"icon":43},"Assistants IA","/fr/getting-started/ai-assistants","fr/01.getting-started/8.ai-assistants","i-lucide-sparkles",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Concepts clés","i-lucide-book-open","/fr/core-concepts","fr/02.core-concepts",[51,56,61,66,71,76,81,86],{"title":52,"path":53,"stem":54,"icon":55},"Requêtes","/fr/core-concepts/queries","fr/02.core-concepts/1.queries","i-lucide-database",{"title":57,"path":58,"stem":59,"icon":60},"Clés de requête","/fr/core-concepts/query-keys","fr/02.core-concepts/2.query-keys","i-lucide-key-round",{"title":62,"path":63,"stem":64,"icon":65},"États des requêtes","/fr/core-concepts/query-states","fr/02.core-concepts/3.query-states","i-lucide-activity",{"title":67,"path":68,"stem":69,"icon":70},"Cache","/fr/core-concepts/caching","fr/02.core-concepts/4.caching","i-lucide-layers-3",{"title":72,"path":73,"stem":74,"icon":75},"Stale-While-Revalidate","/fr/core-concepts/stale-while-revalidate","fr/02.core-concepts/5.stale-while-revalidate","i-lucide-timer-reset",{"title":77,"path":78,"stem":79,"icon":80},"Déduplication","/fr/core-concepts/deduplication","fr/02.core-concepts/6.deduplication","i-lucide-copy-minus",{"title":82,"path":83,"stem":84,"icon":85},"Mutations et invalidation","/fr/core-concepts/mutations","fr/02.core-concepts/7.mutations","i-lucide-pencil-line",{"title":87,"path":88,"stem":89,"icon":90},"Hors-ligne et réseau","/fr/core-concepts/offline","fr/02.core-concepts/8.offline","i-lucide-wifi-off",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":44},"Usage avec Flutter","i-lucide-smartphone","/fr/flutter-integration","fr/03.flutter-integration",[97,102,107,112,117,122,127,132],{"title":98,"path":99,"stem":100,"icon":101},"Configuration","/fr/flutter-integration/setup","fr/03.flutter-integration/1.setup","i-lucide-wrench",{"title":103,"path":104,"stem":105,"icon":106},"QoraScope","/fr/flutter-integration/qora-scope","fr/03.flutter-integration/2.qora-scope","i-lucide-share-2",{"title":108,"path":109,"stem":110,"icon":111},"QoraBuilder","/fr/flutter-integration/qora-builder","fr/03.flutter-integration/3.qora-builder","i-lucide-blocks",{"title":113,"path":114,"stem":115,"icon":116},"QoraMutationBuilder","/fr/flutter-integration/qora-mutation-builder","fr/03.flutter-integration/4.qora-mutation-builder","i-lucide-pencil",{"title":118,"path":119,"stem":120,"icon":121},"InfiniteQueryBuilder","/fr/flutter-integration/infinite-query-builder","fr/03.flutter-integration/5.infinite-query-builder","i-lucide-infinity",{"title":123,"path":124,"stem":125,"icon":126},"Hooks (flutter_hooks)","/fr/flutter-integration/hooks","fr/03.flutter-integration/6.hooks","i-lucide-anchor",{"title":128,"path":129,"stem":130,"icon":131},"Widgets de statut réseau","/fr/flutter-integration/network-status","fr/03.flutter-integration/7.network-status","i-lucide-wifi",{"title":133,"path":134,"stem":135,"icon":136},"Bonnes pratiques","/fr/flutter-integration/best-practices","fr/03.flutter-integration/8.best-practices","i-lucide-badge-check",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":44},"Guides Pratiques","i-lucide-chef-hat","/fr/recipes","fr/04.recipes",[143,147,152,157,162,166,171,176,181,186,191],{"title":144,"path":145,"stem":146,"icon":85},"Mutations","/fr/recipes/mutations","fr/04.recipes/02.mutations",{"title":148,"path":149,"stem":150,"icon":151},"Mises à jour optimistes","/fr/recipes/optimistic-updates","fr/04.recipes/03.optimistic-updates","i-lucide-zap",{"title":153,"path":154,"stem":155,"icon":156},"Persistance","/fr/recipes/persistence","fr/04.recipes/04.persistence","i-lucide-hard-drive",{"title":158,"path":159,"stem":160,"icon":161},"Réseau adaptatif","/fr/recipes/network-aware","fr/04.recipes/05.network-aware","i-lucide-signal",{"title":163,"path":164,"stem":165,"icon":121},"Requêtes infinies","/fr/recipes/infinite-queries","fr/04.recipes/06.infinite-queries",{"title":167,"path":168,"stem":169,"icon":170},"Requêtes dépendantes","/fr/recipes/dependent-queries","fr/04.recipes/07.dependent-queries","i-lucide-link-2",{"title":172,"path":173,"stem":174,"icon":175},"Annulation","/fr/recipes/cancel-token","fr/04.recipes/08.cancel-token","i-lucide-circle-slash",{"title":177,"path":178,"stem":179,"icon":180},"Hydratation SSR","/fr/recipes/ssr-hydration","fr/04.recipes/09.ssr-hydration","i-lucide-server",{"title":182,"path":183,"stem":184,"icon":185},"Gestion des erreurs","/fr/recipes/error-handling","fr/04.recipes/10.error-handling","i-lucide-shield-alert",{"title":187,"path":188,"stem":189,"icon":190},"Tests","/fr/recipes/testing","fr/04.recipes/11.testing","i-lucide-flask-conical",{"title":192,"path":193,"stem":194},"Prefetch au Niveau des Routes","/fr/recipes/prefetch","fr/04.recipes/12.prefetch",{"title":196,"icon":197,"path":198,"stem":199,"children":200,"page":44},"Référence de l'API","i-lucide-file-code","/fr/api-reference","fr/05.api-reference",[201,206,210,214,219,224,228,232],{"title":202,"path":203,"stem":204,"icon":205},"QoraClient","/fr/api-reference/qora-client","fr/05.api-reference/1.qora-client","i-lucide-cpu",{"title":207,"path":208,"stem":209,"icon":60},"QoraKey","/fr/api-reference/qora-key","fr/05.api-reference/2.qora-key",{"title":211,"path":212,"stem":213,"icon":65},"QoraState","/fr/api-reference/qora-state","fr/05.api-reference/3.qora-state",{"title":215,"path":216,"stem":217,"icon":218},"QoraOptions","/fr/api-reference/qora-options","fr/05.api-reference/4.qora-options","i-lucide-sliders-horizontal",{"title":220,"path":221,"stem":222,"icon":223},"QoraClientConfig","/fr/api-reference/qora-client-config","fr/05.api-reference/5.qora-client-config","i-lucide-settings-2",{"title":225,"path":226,"stem":227,"icon":85},"API Mutation","/fr/api-reference/qora-mutation","fr/05.api-reference/6.qora-mutation",{"title":229,"path":230,"stem":231,"icon":156},"PersistQoraClient","/fr/api-reference/persist-qora-client","fr/05.api-reference/7.persist-qora-client",{"title":233,"path":234,"stem":235,"icon":121},"Requête infinie","/fr/api-reference/infinite-query","fr/05.api-reference/8.infinite-query",{"title":237,"icon":238,"path":239,"stem":240,"children":241,"page":44},"Outils de debug","i-lucide-bug","/fr/devtools","fr/06.devtools",[242,247,252],{"title":243,"path":244,"stem":245,"icon":246},"Vue d'ensemble","/fr/devtools/overview","fr/06.devtools/1.overview","i-lucide-layout-dashboard",{"title":248,"path":249,"stem":250,"icon":251},"Overlay intégré","/fr/devtools/overlay","fr/06.devtools/2.overlay","i-lucide-layers",{"title":253,"path":254,"stem":255,"icon":256},"Sérialisation des données","/fr/devtools/data-display","fr/06.devtools/4.data-display","i-lucide-eye",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":44},"Intégrations tierces","i-lucide-puzzle","/fr/third-party","fr/07.third-party",[263,268,272,277,282,286],{"title":264,"path":265,"stem":266,"icon":267},"Avec Provider","/fr/third-party/with-provider","fr/07.third-party/1.with-provider","i-lucide-plug",{"title":269,"path":270,"stem":271,"icon":111},"Avec BLoC","/fr/third-party/with-bloc","fr/07.third-party/2.with-bloc",{"title":273,"path":274,"stem":275,"icon":276},"Avec Riverpod","/fr/third-party/with-riverpod","fr/07.third-party/3.with-riverpod","i-lucide-droplets",{"title":278,"path":279,"stem":280,"icon":281},"Avec RxDart","/fr/third-party/with-rxdart","fr/07.third-party/4.with-rxdart","i-lucide-git-branch",{"title":283,"path":284,"stem":285},"Avec Dio","/fr/third-party/with-dio","fr/07.third-party/5.with-dio",{"title":287,"path":288,"stem":289,"icon":290},"Avec GraphQL","/fr/third-party/with-graphql","fr/07.third-party/6.with-graphql","i-lucide-binary",{"title":292,"icon":190,"path":293,"stem":294,"children":295,"page":44},"Exemples","/fr/examples","fr/08.examples",[296,301,305,310,314,318,322],{"title":297,"path":298,"stem":299,"icon":300},"Étude de cas : Liste et détail utilisateur","/fr/examples/basic-query","fr/08.examples/1.basic-query","i-lucide-play-circle",{"title":302,"path":303,"stem":304,"icon":151},"Étude de cas : Mutations optimistes et rollback","/fr/examples/mutations-optimistic","fr/08.examples/2.mutations-optimistic",{"title":306,"path":307,"stem":308,"icon":309},"Étude de cas : Feed à défilement infini","/fr/examples/infinite-scroll","fr/08.examples/3.infinite-scroll","i-lucide-scroll",{"title":311,"path":312,"stem":313,"icon":90},"Étude de cas : Application Todo offline-first","/fr/examples/offline-first","fr/08.examples/4.offline-first",{"title":315,"path":316,"stem":317,"icon":161},"Étude de cas : Conscience réseau","/fr/examples/network-awareness","fr/08.examples/5.network-awareness",{"title":319,"path":320,"stem":321,"icon":126},"Étude de cas : Intégration des hooks","/fr/examples/hooks-integration","fr/08.examples/6.hooks-integration",{"title":323,"path":324,"stem":325,"icon":326},"Étude de cas : Application Todo complète","/fr/examples/complete-todo-app","fr/08.examples/7.complete-todo-app","i-lucide-check-square",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"Aide","i-lucide-life-buoy","/fr/help","fr/09.help",[333,338],{"title":334,"path":335,"stem":336,"icon":337},"FAQ","/fr/help/faq","fr/09.help/1.faq","i-lucide-circle-help",{"title":339,"path":340,"stem":341,"icon":101},"Dépannage","/fr/help/troubleshooting","fr/09.help/2.troubleshooting",{"id":343,"title":21,"body":344,"description":3082,"extension":3083,"links":3084,"meta":3085,"navigation":3086,"path":22,"seo":3087,"stem":23,"__hash__":3088},"docs_fr/fr/01.getting-started/4.quick-start.md",{"type":345,"value":346,"toc":3073},"minimark",[347,351,362,367,400,704,710,714,1398,1411,1415,1424,2161,2165,2172,2571,2574,2578,2596,2932,2935,2939,3036,3040,3069],[348,349,350],"p",{},"En dix minutes, vous aurez deux écrans qui chargent des utilisateurs depuis une vraie API, s'ouvrent instantanément à la deuxième visite, se rafraîchissent en arrière-plan et continuent d'afficher les données quand le réseau tombe.",[348,352,353,354,361],{},"Le code ci-dessous fonctionne tel quel avec ",[355,356,360],"a",{"href":357,"rel":358},"https://jsonplaceholder.typicode.com",[359],"nofollow","JSONPlaceholder",", une fausse API REST gratuite.",[363,364,366],"h2",{"id":365},"_1-installer-et-envelopper-lapplication","1. Installer et envelopper l'application",[368,369,375],"pre",{"className":370,"code":371,"filename":372,"language":373,"meta":374,"style":374},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flutter pub add qora_flutter http\n","Terminal","bash","",[376,377,378],"code",{"__ignoreMap":374},[379,380,383,387,391,394,397],"span",{"class":381,"line":382},"line",1,[379,384,386],{"class":385},"sBMFI","flutter",[379,388,390],{"class":389},"sfazB"," pub",[379,392,393],{"class":389}," add",[379,395,396],{"class":389}," qora_flutter",[379,398,399],{"class":389}," http\n",[368,401,406],{"className":402,"code":403,"filename":404,"language":405,"meta":374,"style":374},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:flutter/material.dart';\nimport 'package:qora_flutter/qora_flutter.dart';\n\nimport 'user_list_screen.dart';\n\nvoid main() {\n  final client = QoraClient(\n    config: const QoraClientConfig(\n      defaultOptions: QoraOptions(staleTime: Duration(minutes: 5)),\n    ),\n  );\n\n  runApp(QoraScope.auto(client: client, child: const MyApp()));\n}\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) =>\n      const MaterialApp(home: UserListScreen());\n}\n","lib/main.dart","dart",[376,407,408,421,431,438,448,453,468,486,503,536,544,552,557,600,606,611,628,646,651,657,677,699],{"__ignoreMap":374},[379,409,410,414,417],{"class":381,"line":382},[379,411,413],{"class":412},"sbssI","import",[379,415,416],{"class":389}," 'package:flutter/material.dart'",[379,418,420],{"class":419},"sMK4o",";\n",[379,422,424,426,429],{"class":381,"line":423},2,[379,425,413],{"class":412},[379,427,428],{"class":389}," 'package:qora_flutter/qora_flutter.dart'",[379,430,420],{"class":419},[379,432,434],{"class":381,"line":433},3,[379,435,437],{"emptyLinePlaceholder":436},true,"\n",[379,439,441,443,446],{"class":381,"line":440},4,[379,442,413],{"class":412},[379,444,445],{"class":389}," 'user_list_screen.dart'",[379,447,420],{"class":419},[379,449,451],{"class":381,"line":450},5,[379,452,437],{"emptyLinePlaceholder":436},[379,454,456,460,464],{"class":381,"line":455},6,[379,457,459],{"class":458},"spNyl","void",[379,461,463],{"class":462},"s2Zo4"," main",[379,465,467],{"class":466},"sTEyZ","() {\n",[379,469,471,474,477,480,483],{"class":381,"line":470},7,[379,472,473],{"class":458},"  final",[379,475,476],{"class":466}," client ",[379,478,479],{"class":419},"=",[379,481,482],{"class":385}," QoraClient",[379,484,485],{"class":466},"(\n",[379,487,489,492,495,498,501],{"class":381,"line":488},8,[379,490,491],{"class":466},"    config",[379,493,494],{"class":419},":",[379,496,497],{"class":458}," const",[379,499,500],{"class":385}," QoraClientConfig",[379,502,485],{"class":466},[379,504,506,509,511,514,517,519,522,525,527,530,533],{"class":381,"line":505},9,[379,507,508],{"class":466},"      defaultOptions",[379,510,494],{"class":419},[379,512,513],{"class":385}," QoraOptions",[379,515,516],{"class":466},"(staleTime",[379,518,494],{"class":419},[379,520,521],{"class":385}," Duration",[379,523,524],{"class":466},"(minutes",[379,526,494],{"class":419},[379,528,529],{"class":412}," 5",[379,531,532],{"class":466},"))",[379,534,535],{"class":419},",\n",[379,537,539,542],{"class":381,"line":538},10,[379,540,541],{"class":466},"    )",[379,543,535],{"class":419},[379,545,547,550],{"class":381,"line":546},11,[379,548,549],{"class":466},"  )",[379,551,420],{"class":419},[379,553,555],{"class":381,"line":554},12,[379,556,437],{"emptyLinePlaceholder":436},[379,558,560,563,566,568,571,574,577,579,582,585,588,590,592,595,598],{"class":381,"line":559},13,[379,561,562],{"class":462},"  runApp",[379,564,565],{"class":466},"(",[379,567,103],{"class":385},[379,569,570],{"class":419},".",[379,572,573],{"class":462},"auto",[379,575,576],{"class":466},"(client",[379,578,494],{"class":419},[379,580,581],{"class":466}," client",[379,583,584],{"class":419},",",[379,586,587],{"class":466}," child",[379,589,494],{"class":419},[379,591,497],{"class":458},[379,593,594],{"class":385}," MyApp",[379,596,597],{"class":466},"()))",[379,599,420],{"class":419},[379,601,603],{"class":381,"line":602},14,[379,604,605],{"class":466},"}\n",[379,607,609],{"class":381,"line":608},15,[379,610,437],{"emptyLinePlaceholder":436},[379,612,614,617,619,622,625],{"class":381,"line":613},16,[379,615,616],{"class":419},"class",[379,618,594],{"class":385},[379,620,621],{"class":419}," extends",[379,623,624],{"class":385}," StatelessWidget",[379,626,627],{"class":466}," {\n",[379,629,631,634,636,639,641,644],{"class":381,"line":630},17,[379,632,633],{"class":458},"  const",[379,635,594],{"class":385},[379,637,638],{"class":466},"({super",[379,640,570],{"class":419},[379,642,643],{"class":466},"key})",[379,645,420],{"class":419},[379,647,649],{"class":381,"line":648},18,[379,650,437],{"emptyLinePlaceholder":436},[379,652,654],{"class":381,"line":653},19,[379,655,656],{"class":458},"  @override\n",[379,658,660,663,666,668,671,674],{"class":381,"line":659},20,[379,661,662],{"class":385},"  Widget",[379,664,665],{"class":462}," build",[379,667,565],{"class":466},[379,669,670],{"class":385},"BuildContext",[379,672,673],{"class":466}," context) ",[379,675,676],{"class":419},"=>\n",[379,678,680,683,686,689,691,694,697],{"class":381,"line":679},21,[379,681,682],{"class":458},"      const",[379,684,685],{"class":385}," MaterialApp",[379,687,688],{"class":466},"(home",[379,690,494],{"class":419},[379,692,693],{"class":385}," UserListScreen",[379,695,696],{"class":466},"())",[379,698,420],{"class":419},[379,700,702],{"class":381,"line":701},22,[379,703,605],{"class":466},[348,705,706,709],{},[376,707,708],{},"staleTime: 5 minutes"," signifie qu'une donnée récupérée reste fraîche cinq minutes : dans cette fenêtre, rouvrir un écran ne coûte aucun appel réseau.",[363,711,713],{"id":712},"_2-décrire-les-données-et-comment-les-récupérer","2. Décrire les données et comment les récupérer",[368,715,718],{"className":402,"code":716,"filename":717,"language":405,"meta":374,"style":374},"import 'dart:convert';\n\nimport 'package:http/http.dart' as http;\n\nclass User {\n  final int id;\n  final String name;\n  final String email;\n\n  const User({required this.id, required this.name, required this.email});\n\n  factory User.fromJson(Map\u003CString, dynamic> json) => User(\n        id: json['id'] as int,\n        name: json['name'] as String,\n        email: json['email'] as String,\n      );\n}\n\nclass UserApi {\n  static const _base = 'https://jsonplaceholder.typicode.com';\n\n  static Future\u003CList\u003CUser>> getUsers() async {\n    final res = await http.get(Uri.parse('$_base/users'));\n    if (res.statusCode != 200) throw Exception('HTTP ${res.statusCode}');\n    final list = jsonDecode(res.body) as List\u003Cdynamic>;\n    return list.map((j) => User.fromJson(j as Map\u003CString, dynamic>)).toList();\n  }\n\n  static Future\u003CUser> getUser(int id) async {\n    final res = await http.get(Uri.parse('$_base/users/$id'));\n    if (res.statusCode != 200) throw Exception('HTTP ${res.statusCode}');\n    return User.fromJson(jsonDecode(res.body) as Map\u003CString, dynamic>);\n  }\n}\n","lib/user_api.dart",[376,719,720,729,733,748,752,761,773,785,796,800,845,849,888,911,931,951,958,962,966,975,992,996,1028,1078,1133,1168,1222,1228,1233,1262,1308,1349,1388,1393],{"__ignoreMap":374},[379,721,722,724,727],{"class":381,"line":382},[379,723,413],{"class":412},[379,725,726],{"class":389}," 'dart:convert'",[379,728,420],{"class":419},[379,730,731],{"class":381,"line":423},[379,732,437],{"emptyLinePlaceholder":436},[379,734,735,737,740,743,746],{"class":381,"line":433},[379,736,413],{"class":412},[379,738,739],{"class":389}," 'package:http/http.dart'",[379,741,742],{"class":412}," as",[379,744,745],{"class":466}," http",[379,747,420],{"class":419},[379,749,750],{"class":381,"line":440},[379,751,437],{"emptyLinePlaceholder":436},[379,753,754,756,759],{"class":381,"line":450},[379,755,616],{"class":419},[379,757,758],{"class":385}," User",[379,760,627],{"class":466},[379,762,763,765,768,771],{"class":381,"line":455},[379,764,473],{"class":458},[379,766,767],{"class":385}," int",[379,769,770],{"class":466}," id",[379,772,420],{"class":419},[379,774,775,777,780,783],{"class":381,"line":470},[379,776,473],{"class":458},[379,778,779],{"class":385}," String",[379,781,782],{"class":466}," name",[379,784,420],{"class":419},[379,786,787,789,791,794],{"class":381,"line":488},[379,788,473],{"class":458},[379,790,779],{"class":385},[379,792,793],{"class":466}," email",[379,795,420],{"class":419},[379,797,798],{"class":381,"line":505},[379,799,437],{"emptyLinePlaceholder":436},[379,801,802,804,806,809,812,815,817,820,822,825,827,829,832,834,836,838,840,843],{"class":381,"line":538},[379,803,633],{"class":458},[379,805,758],{"class":385},[379,807,808],{"class":466},"({",[379,810,811],{"class":458},"required",[379,813,814],{"class":466}," this",[379,816,570],{"class":419},[379,818,819],{"class":466},"id",[379,821,584],{"class":419},[379,823,824],{"class":458}," required",[379,826,814],{"class":466},[379,828,570],{"class":419},[379,830,831],{"class":466},"name",[379,833,584],{"class":419},[379,835,824],{"class":458},[379,837,814],{"class":466},[379,839,570],{"class":419},[379,841,842],{"class":466},"email})",[379,844,420],{"class":419},[379,846,847],{"class":381,"line":546},[379,848,437],{"emptyLinePlaceholder":436},[379,850,851,854,856,858,861,863,866,869,872,875,878,881,884,886],{"class":381,"line":554},[379,852,853],{"class":419},"  factory",[379,855,758],{"class":385},[379,857,570],{"class":419},[379,859,860],{"class":462},"fromJson",[379,862,565],{"class":466},[379,864,865],{"class":385},"Map",[379,867,868],{"class":466},"\u003C",[379,870,871],{"class":385},"String",[379,873,874],{"class":466},", ",[379,876,877],{"class":385},"dynamic",[379,879,880],{"class":466},"> json) ",[379,882,883],{"class":419},"=>",[379,885,758],{"class":385},[379,887,485],{"class":466},[379,889,890,893,895,898,901,904,907,909],{"class":381,"line":559},[379,891,892],{"class":466},"        id",[379,894,494],{"class":419},[379,896,897],{"class":466}," json[",[379,899,900],{"class":389},"'id'",[379,902,903],{"class":466},"] ",[379,905,906],{"class":419},"as",[379,908,767],{"class":385},[379,910,535],{"class":419},[379,912,913,916,918,920,923,925,927,929],{"class":381,"line":602},[379,914,915],{"class":466},"        name",[379,917,494],{"class":419},[379,919,897],{"class":466},[379,921,922],{"class":389},"'name'",[379,924,903],{"class":466},[379,926,906],{"class":419},[379,928,779],{"class":385},[379,930,535],{"class":419},[379,932,933,936,938,940,943,945,947,949],{"class":381,"line":608},[379,934,935],{"class":466},"        email",[379,937,494],{"class":419},[379,939,897],{"class":466},[379,941,942],{"class":389},"'email'",[379,944,903],{"class":466},[379,946,906],{"class":419},[379,948,779],{"class":385},[379,950,535],{"class":419},[379,952,953,956],{"class":381,"line":613},[379,954,955],{"class":466},"      )",[379,957,420],{"class":419},[379,959,960],{"class":381,"line":630},[379,961,605],{"class":466},[379,963,964],{"class":381,"line":648},[379,965,437],{"emptyLinePlaceholder":436},[379,967,968,970,973],{"class":381,"line":653},[379,969,616],{"class":419},[379,971,972],{"class":385}," UserApi",[379,974,627],{"class":466},[379,976,977,980,982,985,987,990],{"class":381,"line":659},[379,978,979],{"class":458},"  static",[379,981,497],{"class":458},[379,983,984],{"class":466}," _base ",[379,986,479],{"class":419},[379,988,989],{"class":389}," 'https://jsonplaceholder.typicode.com'",[379,991,420],{"class":419},[379,993,994],{"class":381,"line":679},[379,995,437],{"emptyLinePlaceholder":436},[379,997,998,1000,1003,1005,1008,1010,1013,1016,1019,1022,1026],{"class":381,"line":701},[379,999,979],{"class":458},[379,1001,1002],{"class":385}," Future",[379,1004,868],{"class":466},[379,1006,1007],{"class":385},"List",[379,1009,868],{"class":466},[379,1011,1012],{"class":385},"User",[379,1014,1015],{"class":466},">> ",[379,1017,1018],{"class":462},"getUsers",[379,1020,1021],{"class":466},"() ",[379,1023,1025],{"class":1024},"s7zQu","async",[379,1027,627],{"class":466},[379,1029,1031,1034,1037,1039,1042,1044,1046,1049,1051,1054,1056,1059,1061,1064,1067,1071,1074,1076],{"class":381,"line":1030},23,[379,1032,1033],{"class":458},"    final",[379,1035,1036],{"class":466}," res ",[379,1038,479],{"class":419},[379,1040,1041],{"class":1024}," await",[379,1043,745],{"class":466},[379,1045,570],{"class":419},[379,1047,1048],{"class":462},"get",[379,1050,565],{"class":466},[379,1052,1053],{"class":385},"Uri",[379,1055,570],{"class":419},[379,1057,1058],{"class":462},"parse",[379,1060,565],{"class":466},[379,1062,1063],{"class":389},"'",[379,1065,1066],{"class":466},"$",[379,1068,1070],{"class":1069},"sHdIc","_base",[379,1072,1073],{"class":389},"/users'",[379,1075,532],{"class":466},[379,1077,420],{"class":419},[379,1079,1081,1084,1087,1089,1092,1095,1098,1101,1104,1107,1109,1112,1115,1118,1120,1123,1126,1128,1131],{"class":381,"line":1080},24,[379,1082,1083],{"class":1024},"    if",[379,1085,1086],{"class":466}," (res",[379,1088,570],{"class":419},[379,1090,1091],{"class":466},"statusCode ",[379,1093,1094],{"class":419},"!=",[379,1096,1097],{"class":412}," 200",[379,1099,1100],{"class":466},") ",[379,1102,1103],{"class":1024},"throw",[379,1105,1106],{"class":385}," Exception",[379,1108,565],{"class":466},[379,1110,1111],{"class":389},"'HTTP ",[379,1113,1114],{"class":466},"${",[379,1116,1117],{"class":1069},"res",[379,1119,570],{"class":466},[379,1121,1122],{"class":1069},"statusCode",[379,1124,1125],{"class":466},"}",[379,1127,1063],{"class":389},[379,1129,1130],{"class":466},")",[379,1132,420],{"class":419},[379,1134,1136,1138,1141,1143,1146,1149,1151,1154,1156,1159,1161,1163,1166],{"class":381,"line":1135},25,[379,1137,1033],{"class":458},[379,1139,1140],{"class":466}," list ",[379,1142,479],{"class":419},[379,1144,1145],{"class":462}," jsonDecode",[379,1147,1148],{"class":466},"(res",[379,1150,570],{"class":419},[379,1152,1153],{"class":466},"body) ",[379,1155,906],{"class":419},[379,1157,1158],{"class":385}," List",[379,1160,868],{"class":466},[379,1162,877],{"class":385},[379,1164,1165],{"class":466},">",[379,1167,420],{"class":419},[379,1169,1171,1174,1177,1179,1182,1185,1187,1189,1191,1193,1196,1198,1201,1203,1205,1207,1209,1212,1214,1217,1220],{"class":381,"line":1170},26,[379,1172,1173],{"class":1024},"    return",[379,1175,1176],{"class":466}," list",[379,1178,570],{"class":419},[379,1180,1181],{"class":462},"map",[379,1183,1184],{"class":466},"((j) ",[379,1186,883],{"class":419},[379,1188,758],{"class":385},[379,1190,570],{"class":419},[379,1192,860],{"class":462},[379,1194,1195],{"class":466},"(j ",[379,1197,906],{"class":419},[379,1199,1200],{"class":385}," Map",[379,1202,868],{"class":466},[379,1204,871],{"class":385},[379,1206,874],{"class":466},[379,1208,877],{"class":385},[379,1210,1211],{"class":466},">))",[379,1213,570],{"class":419},[379,1215,1216],{"class":462},"toList",[379,1218,1219],{"class":466},"()",[379,1221,420],{"class":419},[379,1223,1225],{"class":381,"line":1224},27,[379,1226,1227],{"class":466},"  }\n",[379,1229,1231],{"class":381,"line":1230},28,[379,1232,437],{"emptyLinePlaceholder":436},[379,1234,1236,1238,1240,1242,1244,1247,1250,1252,1255,1258,1260],{"class":381,"line":1235},29,[379,1237,979],{"class":458},[379,1239,1002],{"class":385},[379,1241,868],{"class":466},[379,1243,1012],{"class":385},[379,1245,1246],{"class":466},"> ",[379,1248,1249],{"class":462},"getUser",[379,1251,565],{"class":466},[379,1253,1254],{"class":385},"int",[379,1256,1257],{"class":466}," id) ",[379,1259,1025],{"class":1024},[379,1261,627],{"class":466},[379,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1298,1300,1302,1304,1306],{"class":381,"line":1264},30,[379,1266,1033],{"class":458},[379,1268,1036],{"class":466},[379,1270,479],{"class":419},[379,1272,1041],{"class":1024},[379,1274,745],{"class":466},[379,1276,570],{"class":419},[379,1278,1048],{"class":462},[379,1280,565],{"class":466},[379,1282,1053],{"class":385},[379,1284,570],{"class":419},[379,1286,1058],{"class":462},[379,1288,565],{"class":466},[379,1290,1063],{"class":389},[379,1292,1066],{"class":466},[379,1294,1070],{"class":1069},[379,1296,1297],{"class":389},"/users/",[379,1299,1066],{"class":466},[379,1301,819],{"class":1069},[379,1303,1063],{"class":389},[379,1305,532],{"class":466},[379,1307,420],{"class":419},[379,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347],{"class":381,"line":1310},31,[379,1312,1083],{"class":1024},[379,1314,1086],{"class":466},[379,1316,570],{"class":419},[379,1318,1091],{"class":466},[379,1320,1094],{"class":419},[379,1322,1097],{"class":412},[379,1324,1100],{"class":466},[379,1326,1103],{"class":1024},[379,1328,1106],{"class":385},[379,1330,565],{"class":466},[379,1332,1111],{"class":389},[379,1334,1114],{"class":466},[379,1336,1117],{"class":1069},[379,1338,570],{"class":466},[379,1340,1122],{"class":1069},[379,1342,1125],{"class":466},[379,1344,1063],{"class":389},[379,1346,1130],{"class":466},[379,1348,420],{"class":419},[379,1350,1352,1354,1356,1358,1360,1362,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1386],{"class":381,"line":1351},32,[379,1353,1173],{"class":1024},[379,1355,758],{"class":385},[379,1357,570],{"class":419},[379,1359,860],{"class":462},[379,1361,565],{"class":466},[379,1363,1364],{"class":462},"jsonDecode",[379,1366,1148],{"class":466},[379,1368,570],{"class":419},[379,1370,1153],{"class":466},[379,1372,906],{"class":419},[379,1374,1200],{"class":385},[379,1376,868],{"class":466},[379,1378,871],{"class":385},[379,1380,874],{"class":466},[379,1382,877],{"class":385},[379,1384,1385],{"class":466},">)",[379,1387,420],{"class":419},[379,1389,1391],{"class":381,"line":1390},33,[379,1392,1227],{"class":466},[379,1394,1396],{"class":381,"line":1395},34,[379,1397,605],{"class":466},[1399,1400,1401,1402,1406,1407,1410],"warning",{},"Un fetcher doit ",[1403,1404,1405],"strong",{},"lever une exception"," en cas d'échec. S'il renvoie ",[376,1408,1409],{},"null"," ou avale l'erreur, Qora voit un succès : il ne relance jamais et n'affiche pas l'erreur.",[363,1412,1414],{"id":1413},"_3-lécran-liste","3. L'écran liste",[348,1416,1417,1419,1420,1423],{},[376,1418,108],{}," récupère les données au montage, met le résultat en cache sous sa clé et se reconstruit à chaque changement. Le builder reçoit l'état, que vous matchez de façon exhaustive, et un ",[376,1421,1422],{},"FetchStatus"," qui indique si une requête est en cours.",[368,1425,1428],{"className":402,"code":1426,"filename":1427,"language":405,"meta":374,"style":374},"import 'package:flutter/material.dart';\nimport 'package:qora_flutter/qora_flutter.dart';\n\nimport 'user_api.dart';\nimport 'user_detail_screen.dart';\n\nclass UserListScreen extends StatelessWidget {\n  const UserListScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Users')),\n      body: QoraBuilder\u003CList\u003CUser>>(\n        queryKey: const ['users'],\n        fetcher: UserApi.getUsers,\n        builder: (context, state, fetchStatus) => switch (state) {\n          Success(:final data) => _UserList(users: data),\n          // Un refetch ou une erreur conserve les données précédentes : on les affiche.\n          Loading(:final previousData?) => _UserList(users: previousData),\n          Failure(:final previousData?) => _UserList(users: previousData),\n          Failure(:final error) => Center(child: Text('Could not load users: $error')),\n          _ => const Center(child: CircularProgressIndicator()),\n        },\n      ),\n    );\n  }\n}\n\nclass _UserList extends StatelessWidget {\n  const _UserList({required this.users});\n  final List\u003CUser> users;\n\n  @override\n  Widget build(BuildContext context) {\n    return RefreshIndicator(\n      // Marque la liste comme périmée : le QoraBuilder monté la recharge.\n      onRefresh: () async => context.qora.invalidate(const ['users']),\n      child: ListView.builder(\n        itemCount: users.length,\n        itemBuilder: (context, i) => ListTile(\n          title: Text(users[i].name),\n          subtitle: Text(users[i].email),\n          onTap: () => Navigator.of(context).push(MaterialPageRoute(\n            builder: (_) => UserDetailScreen(userId: users[i].id),\n          )),\n        ),\n      ),\n    );\n  }\n}\n","lib/user_list_screen.dart",[376,1429,1430,1438,1446,1450,1459,1468,1472,1484,1498,1502,1506,1519,1528,1557,1578,1598,1613,1641,1671,1677,1709,1738,1779,1801,1808,1814,1820,1824,1828,1832,1844,1863,1878,1882,1886,1899,1909,1915,1958,1976,1994,2016,2036,2055,2090,2121,2129,2137,2144,2151,2156],{"__ignoreMap":374},[379,1431,1432,1434,1436],{"class":381,"line":382},[379,1433,413],{"class":412},[379,1435,416],{"class":389},[379,1437,420],{"class":419},[379,1439,1440,1442,1444],{"class":381,"line":423},[379,1441,413],{"class":412},[379,1443,428],{"class":389},[379,1445,420],{"class":419},[379,1447,1448],{"class":381,"line":433},[379,1449,437],{"emptyLinePlaceholder":436},[379,1451,1452,1454,1457],{"class":381,"line":440},[379,1453,413],{"class":412},[379,1455,1456],{"class":389}," 'user_api.dart'",[379,1458,420],{"class":419},[379,1460,1461,1463,1466],{"class":381,"line":450},[379,1462,413],{"class":412},[379,1464,1465],{"class":389}," 'user_detail_screen.dart'",[379,1467,420],{"class":419},[379,1469,1470],{"class":381,"line":455},[379,1471,437],{"emptyLinePlaceholder":436},[379,1473,1474,1476,1478,1480,1482],{"class":381,"line":470},[379,1475,616],{"class":419},[379,1477,693],{"class":385},[379,1479,621],{"class":419},[379,1481,624],{"class":385},[379,1483,627],{"class":466},[379,1485,1486,1488,1490,1492,1494,1496],{"class":381,"line":488},[379,1487,633],{"class":458},[379,1489,693],{"class":385},[379,1491,638],{"class":466},[379,1493,570],{"class":419},[379,1495,643],{"class":466},[379,1497,420],{"class":419},[379,1499,1500],{"class":381,"line":505},[379,1501,437],{"emptyLinePlaceholder":436},[379,1503,1504],{"class":381,"line":538},[379,1505,656],{"class":458},[379,1507,1508,1510,1512,1514,1516],{"class":381,"line":546},[379,1509,662],{"class":385},[379,1511,665],{"class":462},[379,1513,565],{"class":466},[379,1515,670],{"class":385},[379,1517,1518],{"class":466}," context) {\n",[379,1520,1521,1523,1526],{"class":381,"line":554},[379,1522,1173],{"class":1024},[379,1524,1525],{"class":385}," Scaffold",[379,1527,485],{"class":466},[379,1529,1530,1533,1535,1538,1541,1543,1545,1548,1550,1553,1555],{"class":381,"line":559},[379,1531,1532],{"class":466},"      appBar",[379,1534,494],{"class":419},[379,1536,1537],{"class":385}," AppBar",[379,1539,1540],{"class":466},"(title",[379,1542,494],{"class":419},[379,1544,497],{"class":458},[379,1546,1547],{"class":385}," Text",[379,1549,565],{"class":466},[379,1551,1552],{"class":389},"'Users'",[379,1554,532],{"class":466},[379,1556,535],{"class":419},[379,1558,1559,1562,1564,1567,1569,1571,1573,1575],{"class":381,"line":602},[379,1560,1561],{"class":466},"      body",[379,1563,494],{"class":419},[379,1565,1566],{"class":385}," QoraBuilder",[379,1568,868],{"class":466},[379,1570,1007],{"class":385},[379,1572,868],{"class":466},[379,1574,1012],{"class":385},[379,1576,1577],{"class":466},">>(\n",[379,1579,1580,1583,1585,1587,1590,1593,1596],{"class":381,"line":608},[379,1581,1582],{"class":466},"        queryKey",[379,1584,494],{"class":419},[379,1586,497],{"class":458},[379,1588,1589],{"class":466}," [",[379,1591,1592],{"class":389},"'users'",[379,1594,1595],{"class":466},"]",[379,1597,535],{"class":419},[379,1599,1600,1603,1605,1607,1609,1611],{"class":381,"line":613},[379,1601,1602],{"class":466},"        fetcher",[379,1604,494],{"class":419},[379,1606,972],{"class":385},[379,1608,570],{"class":419},[379,1610,1018],{"class":466},[379,1612,535],{"class":419},[379,1614,1615,1618,1620,1623,1625,1628,1630,1633,1635,1638],{"class":381,"line":630},[379,1616,1617],{"class":466},"        builder",[379,1619,494],{"class":419},[379,1621,1622],{"class":466}," (context",[379,1624,584],{"class":419},[379,1626,1627],{"class":466}," state",[379,1629,584],{"class":419},[379,1631,1632],{"class":466}," fetchStatus) ",[379,1634,883],{"class":419},[379,1636,1637],{"class":1024}," switch",[379,1639,1640],{"class":466}," (state) {\n",[379,1642,1643,1646,1648,1650,1653,1656,1658,1661,1664,1666,1669],{"class":381,"line":648},[379,1644,1645],{"class":385},"          Success",[379,1647,565],{"class":466},[379,1649,494],{"class":419},[379,1651,1652],{"class":458},"final",[379,1654,1655],{"class":466}," data) ",[379,1657,883],{"class":419},[379,1659,1660],{"class":385}," _UserList",[379,1662,1663],{"class":466},"(users",[379,1665,494],{"class":419},[379,1667,1668],{"class":466}," data)",[379,1670,535],{"class":419},[379,1672,1673],{"class":381,"line":653},[379,1674,1676],{"class":1675},"sHwdD","          // Un refetch ou une erreur conserve les données précédentes : on les affiche.\n",[379,1678,1679,1682,1684,1686,1688,1691,1694,1696,1698,1700,1702,1704,1707],{"class":381,"line":659},[379,1680,1681],{"class":385},"          Loading",[379,1683,565],{"class":466},[379,1685,494],{"class":419},[379,1687,1652],{"class":458},[379,1689,1690],{"class":466}," previousData",[379,1692,1693],{"class":419},"?",[379,1695,1100],{"class":466},[379,1697,883],{"class":419},[379,1699,1660],{"class":385},[379,1701,1663],{"class":466},[379,1703,494],{"class":419},[379,1705,1706],{"class":466}," previousData)",[379,1708,535],{"class":419},[379,1710,1711,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736],{"class":381,"line":679},[379,1712,1713],{"class":385},"          Failure",[379,1715,565],{"class":466},[379,1717,494],{"class":419},[379,1719,1652],{"class":458},[379,1721,1690],{"class":466},[379,1723,1693],{"class":419},[379,1725,1100],{"class":466},[379,1727,883],{"class":419},[379,1729,1660],{"class":385},[379,1731,1663],{"class":466},[379,1733,494],{"class":419},[379,1735,1706],{"class":466},[379,1737,535],{"class":419},[379,1739,1740,1742,1744,1746,1748,1751,1753,1756,1759,1761,1763,1765,1768,1770,1773,1775,1777],{"class":381,"line":701},[379,1741,1713],{"class":385},[379,1743,565],{"class":466},[379,1745,494],{"class":419},[379,1747,1652],{"class":458},[379,1749,1750],{"class":466}," error) ",[379,1752,883],{"class":419},[379,1754,1755],{"class":385}," Center",[379,1757,1758],{"class":466},"(child",[379,1760,494],{"class":419},[379,1762,1547],{"class":385},[379,1764,565],{"class":466},[379,1766,1767],{"class":389},"'Could not load users: ",[379,1769,1066],{"class":466},[379,1771,1772],{"class":1069},"error",[379,1774,1063],{"class":389},[379,1776,532],{"class":466},[379,1778,535],{"class":419},[379,1780,1781,1784,1786,1788,1790,1792,1794,1797,1799],{"class":381,"line":1030},[379,1782,1783],{"class":466},"          _ ",[379,1785,883],{"class":419},[379,1787,497],{"class":458},[379,1789,1755],{"class":385},[379,1791,1758],{"class":466},[379,1793,494],{"class":419},[379,1795,1796],{"class":385}," CircularProgressIndicator",[379,1798,696],{"class":466},[379,1800,535],{"class":419},[379,1802,1803,1806],{"class":381,"line":1080},[379,1804,1805],{"class":466},"        }",[379,1807,535],{"class":419},[379,1809,1810,1812],{"class":381,"line":1135},[379,1811,955],{"class":466},[379,1813,535],{"class":419},[379,1815,1816,1818],{"class":381,"line":1170},[379,1817,541],{"class":466},[379,1819,420],{"class":419},[379,1821,1822],{"class":381,"line":1224},[379,1823,1227],{"class":466},[379,1825,1826],{"class":381,"line":1230},[379,1827,605],{"class":466},[379,1829,1830],{"class":381,"line":1235},[379,1831,437],{"emptyLinePlaceholder":436},[379,1833,1834,1836,1838,1840,1842],{"class":381,"line":1264},[379,1835,616],{"class":419},[379,1837,1660],{"class":385},[379,1839,621],{"class":419},[379,1841,624],{"class":385},[379,1843,627],{"class":466},[379,1845,1846,1848,1850,1852,1854,1856,1858,1861],{"class":381,"line":1310},[379,1847,633],{"class":458},[379,1849,1660],{"class":385},[379,1851,808],{"class":466},[379,1853,811],{"class":458},[379,1855,814],{"class":466},[379,1857,570],{"class":419},[379,1859,1860],{"class":466},"users})",[379,1862,420],{"class":419},[379,1864,1865,1867,1869,1871,1873,1876],{"class":381,"line":1351},[379,1866,473],{"class":458},[379,1868,1158],{"class":385},[379,1870,868],{"class":466},[379,1872,1012],{"class":385},[379,1874,1875],{"class":466},"> users",[379,1877,420],{"class":419},[379,1879,1880],{"class":381,"line":1390},[379,1881,437],{"emptyLinePlaceholder":436},[379,1883,1884],{"class":381,"line":1395},[379,1885,656],{"class":458},[379,1887,1889,1891,1893,1895,1897],{"class":381,"line":1888},35,[379,1890,662],{"class":385},[379,1892,665],{"class":462},[379,1894,565],{"class":466},[379,1896,670],{"class":385},[379,1898,1518],{"class":466},[379,1900,1902,1904,1907],{"class":381,"line":1901},36,[379,1903,1173],{"class":1024},[379,1905,1906],{"class":385}," RefreshIndicator",[379,1908,485],{"class":466},[379,1910,1912],{"class":381,"line":1911},37,[379,1913,1914],{"class":1675},"      // Marque la liste comme périmée : le QoraBuilder monté la recharge.\n",[379,1916,1918,1921,1923,1926,1928,1931,1934,1936,1939,1941,1944,1946,1949,1951,1953,1956],{"class":381,"line":1917},38,[379,1919,1920],{"class":466},"      onRefresh",[379,1922,494],{"class":419},[379,1924,1925],{"class":466}," () ",[379,1927,1025],{"class":1024},[379,1929,1930],{"class":419}," =>",[379,1932,1933],{"class":466}," context",[379,1935,570],{"class":419},[379,1937,1938],{"class":466},"qora",[379,1940,570],{"class":419},[379,1942,1943],{"class":462},"invalidate",[379,1945,565],{"class":466},[379,1947,1948],{"class":458},"const",[379,1950,1589],{"class":466},[379,1952,1592],{"class":389},[379,1954,1955],{"class":466},"])",[379,1957,535],{"class":419},[379,1959,1961,1964,1966,1969,1971,1974],{"class":381,"line":1960},39,[379,1962,1963],{"class":466},"      child",[379,1965,494],{"class":419},[379,1967,1968],{"class":385}," ListView",[379,1970,570],{"class":419},[379,1972,1973],{"class":462},"builder",[379,1975,485],{"class":466},[379,1977,1979,1982,1984,1987,1989,1992],{"class":381,"line":1978},40,[379,1980,1981],{"class":466},"        itemCount",[379,1983,494],{"class":419},[379,1985,1986],{"class":466}," users",[379,1988,570],{"class":419},[379,1990,1991],{"class":466},"length",[379,1993,535],{"class":419},[379,1995,1997,2000,2002,2004,2006,2009,2011,2014],{"class":381,"line":1996},41,[379,1998,1999],{"class":466},"        itemBuilder",[379,2001,494],{"class":419},[379,2003,1622],{"class":466},[379,2005,584],{"class":419},[379,2007,2008],{"class":466}," i) ",[379,2010,883],{"class":419},[379,2012,2013],{"class":385}," ListTile",[379,2015,485],{"class":466},[379,2017,2019,2022,2024,2026,2029,2031,2034],{"class":381,"line":2018},42,[379,2020,2021],{"class":466},"          title",[379,2023,494],{"class":419},[379,2025,1547],{"class":385},[379,2027,2028],{"class":466},"(users[i]",[379,2030,570],{"class":419},[379,2032,2033],{"class":466},"name)",[379,2035,535],{"class":419},[379,2037,2039,2042,2044,2046,2048,2050,2053],{"class":381,"line":2038},43,[379,2040,2041],{"class":466},"          subtitle",[379,2043,494],{"class":419},[379,2045,1547],{"class":385},[379,2047,2028],{"class":466},[379,2049,570],{"class":419},[379,2051,2052],{"class":466},"email)",[379,2054,535],{"class":419},[379,2056,2058,2061,2063,2065,2067,2070,2072,2075,2078,2080,2083,2085,2088],{"class":381,"line":2057},44,[379,2059,2060],{"class":466},"          onTap",[379,2062,494],{"class":419},[379,2064,1925],{"class":466},[379,2066,883],{"class":419},[379,2068,2069],{"class":385}," Navigator",[379,2071,570],{"class":419},[379,2073,2074],{"class":462},"of",[379,2076,2077],{"class":466},"(context)",[379,2079,570],{"class":419},[379,2081,2082],{"class":462},"push",[379,2084,565],{"class":466},[379,2086,2087],{"class":385},"MaterialPageRoute",[379,2089,485],{"class":466},[379,2091,2093,2096,2098,2101,2103,2106,2109,2111,2114,2116,2119],{"class":381,"line":2092},45,[379,2094,2095],{"class":466},"            builder",[379,2097,494],{"class":419},[379,2099,2100],{"class":466}," (_) ",[379,2102,883],{"class":419},[379,2104,2105],{"class":385}," UserDetailScreen",[379,2107,2108],{"class":466},"(userId",[379,2110,494],{"class":419},[379,2112,2113],{"class":466}," users[i]",[379,2115,570],{"class":419},[379,2117,2118],{"class":466},"id)",[379,2120,535],{"class":419},[379,2122,2124,2127],{"class":381,"line":2123},46,[379,2125,2126],{"class":466},"          ))",[379,2128,535],{"class":419},[379,2130,2132,2135],{"class":381,"line":2131},47,[379,2133,2134],{"class":466},"        )",[379,2136,535],{"class":419},[379,2138,2140,2142],{"class":381,"line":2139},48,[379,2141,955],{"class":466},[379,2143,535],{"class":419},[379,2145,2147,2149],{"class":381,"line":2146},49,[379,2148,541],{"class":466},[379,2150,420],{"class":419},[379,2152,2154],{"class":381,"line":2153},50,[379,2155,1227],{"class":466},[379,2157,2159],{"class":381,"line":2158},51,[379,2160,605],{"class":466},[363,2162,2164],{"id":2163},"_4-lécran-détail","4. L'écran détail",[348,2166,2167,2168,2171],{},"Chaque utilisateur a sa propre clé, ",[376,2169,2170],{},"['users', id]",". La clé est l'adresse dans le cache : même clé, mêmes données, partout où elle est utilisée.",[368,2173,2176],{"className":402,"code":2174,"filename":2175,"language":405,"meta":374,"style":374},"import 'package:flutter/material.dart';\nimport 'package:qora_flutter/qora_flutter.dart';\n\nimport 'user_api.dart';\n\nclass UserDetailScreen extends StatelessWidget {\n  const UserDetailScreen({super.key, required this.userId});\n  final int userId;\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('User #$userId')),\n      body: QoraBuilder\u003CUser>(\n        queryKey: ['users', userId],\n        fetcher: () => UserApi.getUser(userId),\n        builder: (context, state, fetchStatus) {\n          final user = state.dataOrNull; // conservé pendant les refetchs et les erreurs\n          if (user == null) {\n            return switch (state) {\n              Failure(:final error) => Center(child: Text('Error: $error')),\n              _ => const Center(child: CircularProgressIndicator()),\n            };\n          }\n          return ListTile(title: Text(user.name), subtitle: Text(user.email));\n        },\n      ),\n    );\n  }\n}\n","lib/user_detail_screen.dart",[376,2177,2178,2186,2194,2198,2206,2210,2222,2248,2259,2263,2267,2279,2287,2317,2332,2349,2370,2387,2410,2427,2436,2474,2495,2502,2507,2545,2551,2557,2563,2567],{"__ignoreMap":374},[379,2179,2180,2182,2184],{"class":381,"line":382},[379,2181,413],{"class":412},[379,2183,416],{"class":389},[379,2185,420],{"class":419},[379,2187,2188,2190,2192],{"class":381,"line":423},[379,2189,413],{"class":412},[379,2191,428],{"class":389},[379,2193,420],{"class":419},[379,2195,2196],{"class":381,"line":433},[379,2197,437],{"emptyLinePlaceholder":436},[379,2199,2200,2202,2204],{"class":381,"line":440},[379,2201,413],{"class":412},[379,2203,1456],{"class":389},[379,2205,420],{"class":419},[379,2207,2208],{"class":381,"line":450},[379,2209,437],{"emptyLinePlaceholder":436},[379,2211,2212,2214,2216,2218,2220],{"class":381,"line":455},[379,2213,616],{"class":419},[379,2215,2105],{"class":385},[379,2217,621],{"class":419},[379,2219,624],{"class":385},[379,2221,627],{"class":466},[379,2223,2224,2226,2228,2230,2232,2235,2237,2239,2241,2243,2246],{"class":381,"line":470},[379,2225,633],{"class":458},[379,2227,2105],{"class":385},[379,2229,638],{"class":466},[379,2231,570],{"class":419},[379,2233,2234],{"class":466},"key",[379,2236,584],{"class":419},[379,2238,824],{"class":458},[379,2240,814],{"class":466},[379,2242,570],{"class":419},[379,2244,2245],{"class":466},"userId})",[379,2247,420],{"class":419},[379,2249,2250,2252,2254,2257],{"class":381,"line":488},[379,2251,473],{"class":458},[379,2253,767],{"class":385},[379,2255,2256],{"class":466}," userId",[379,2258,420],{"class":419},[379,2260,2261],{"class":381,"line":505},[379,2262,437],{"emptyLinePlaceholder":436},[379,2264,2265],{"class":381,"line":538},[379,2266,656],{"class":458},[379,2268,2269,2271,2273,2275,2277],{"class":381,"line":546},[379,2270,662],{"class":385},[379,2272,665],{"class":462},[379,2274,565],{"class":466},[379,2276,670],{"class":385},[379,2278,1518],{"class":466},[379,2280,2281,2283,2285],{"class":381,"line":554},[379,2282,1173],{"class":1024},[379,2284,1525],{"class":385},[379,2286,485],{"class":466},[379,2288,2289,2291,2293,2295,2297,2299,2301,2303,2306,2308,2311,2313,2315],{"class":381,"line":559},[379,2290,1532],{"class":466},[379,2292,494],{"class":419},[379,2294,1537],{"class":385},[379,2296,1540],{"class":466},[379,2298,494],{"class":419},[379,2300,1547],{"class":385},[379,2302,565],{"class":466},[379,2304,2305],{"class":389},"'User #",[379,2307,1066],{"class":466},[379,2309,2310],{"class":1069},"userId",[379,2312,1063],{"class":389},[379,2314,532],{"class":466},[379,2316,535],{"class":419},[379,2318,2319,2321,2323,2325,2327,2329],{"class":381,"line":602},[379,2320,1561],{"class":466},[379,2322,494],{"class":419},[379,2324,1566],{"class":385},[379,2326,868],{"class":466},[379,2328,1012],{"class":385},[379,2330,2331],{"class":466},">(\n",[379,2333,2334,2336,2338,2340,2342,2344,2347],{"class":381,"line":608},[379,2335,1582],{"class":466},[379,2337,494],{"class":419},[379,2339,1589],{"class":466},[379,2341,1592],{"class":389},[379,2343,584],{"class":419},[379,2345,2346],{"class":466}," userId]",[379,2348,535],{"class":419},[379,2350,2351,2353,2355,2357,2359,2361,2363,2365,2368],{"class":381,"line":613},[379,2352,1602],{"class":466},[379,2354,494],{"class":419},[379,2356,1925],{"class":466},[379,2358,883],{"class":419},[379,2360,972],{"class":385},[379,2362,570],{"class":419},[379,2364,1249],{"class":462},[379,2366,2367],{"class":466},"(userId)",[379,2369,535],{"class":419},[379,2371,2372,2374,2376,2378,2380,2382,2384],{"class":381,"line":630},[379,2373,1617],{"class":466},[379,2375,494],{"class":419},[379,2377,1622],{"class":466},[379,2379,584],{"class":419},[379,2381,1627],{"class":466},[379,2383,584],{"class":419},[379,2385,2386],{"class":466}," fetchStatus) {\n",[379,2388,2389,2392,2395,2397,2399,2401,2404,2407],{"class":381,"line":648},[379,2390,2391],{"class":458},"          final",[379,2393,2394],{"class":466}," user ",[379,2396,479],{"class":419},[379,2398,1627],{"class":466},[379,2400,570],{"class":419},[379,2402,2403],{"class":466},"dataOrNull",[379,2405,2406],{"class":419},";",[379,2408,2409],{"class":1675}," // conservé pendant les refetchs et les erreurs\n",[379,2411,2412,2415,2418,2421,2424],{"class":381,"line":653},[379,2413,2414],{"class":1024},"          if",[379,2416,2417],{"class":466}," (user ",[379,2419,2420],{"class":419},"==",[379,2422,2423],{"class":419}," null",[379,2425,2426],{"class":466},") {\n",[379,2428,2429,2432,2434],{"class":381,"line":659},[379,2430,2431],{"class":1024},"            return",[379,2433,1637],{"class":1024},[379,2435,1640],{"class":466},[379,2437,2438,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2464,2466,2468,2470,2472],{"class":381,"line":679},[379,2439,2440],{"class":385},"              Failure",[379,2442,565],{"class":466},[379,2444,494],{"class":419},[379,2446,1652],{"class":458},[379,2448,1750],{"class":466},[379,2450,883],{"class":419},[379,2452,1755],{"class":385},[379,2454,1758],{"class":466},[379,2456,494],{"class":419},[379,2458,1547],{"class":385},[379,2460,565],{"class":466},[379,2462,2463],{"class":389},"'Error: ",[379,2465,1066],{"class":466},[379,2467,1772],{"class":1069},[379,2469,1063],{"class":389},[379,2471,532],{"class":466},[379,2473,535],{"class":419},[379,2475,2476,2479,2481,2483,2485,2487,2489,2491,2493],{"class":381,"line":701},[379,2477,2478],{"class":466},"              _ ",[379,2480,883],{"class":419},[379,2482,497],{"class":458},[379,2484,1755],{"class":385},[379,2486,1758],{"class":466},[379,2488,494],{"class":419},[379,2490,1796],{"class":385},[379,2492,696],{"class":466},[379,2494,535],{"class":419},[379,2496,2497,2500],{"class":381,"line":1030},[379,2498,2499],{"class":466},"            }",[379,2501,420],{"class":419},[379,2503,2504],{"class":381,"line":1080},[379,2505,2506],{"class":466},"          }\n",[379,2508,2509,2512,2514,2516,2518,2520,2523,2525,2527,2529,2532,2534,2536,2538,2540,2543],{"class":381,"line":1135},[379,2510,2511],{"class":1024},"          return",[379,2513,2013],{"class":385},[379,2515,1540],{"class":466},[379,2517,494],{"class":419},[379,2519,1547],{"class":385},[379,2521,2522],{"class":466},"(user",[379,2524,570],{"class":419},[379,2526,2033],{"class":466},[379,2528,584],{"class":419},[379,2530,2531],{"class":466}," subtitle",[379,2533,494],{"class":419},[379,2535,1547],{"class":385},[379,2537,2522],{"class":466},[379,2539,570],{"class":419},[379,2541,2542],{"class":466},"email))",[379,2544,420],{"class":419},[379,2546,2547,2549],{"class":381,"line":1170},[379,2548,1805],{"class":466},[379,2550,535],{"class":419},[379,2552,2553,2555],{"class":381,"line":1224},[379,2554,955],{"class":466},[379,2556,535],{"class":419},[379,2558,2559,2561],{"class":381,"line":1230},[379,2560,541],{"class":466},[379,2562,420],{"class":419},[379,2564,2565],{"class":381,"line":1235},[379,2566,1227],{"class":466},[379,2568,2569],{"class":381,"line":1264},[379,2570,605],{"class":466},[348,2572,2573],{},"Lancez l'application. Ouvrez un utilisateur, revenez, rouvrez-le : la deuxième fois, il s'affiche instantanément, sans spinner. Il vient du cache.",[363,2575,2577],{"id":2576},"_5-passer-hors-ligne","5. Passer hors-ligne",[348,2579,2580,2583,2584,2587,2588,2591,2592,2595],{},[376,2581,2582],{},"QoraScope.auto"," suit déjà la connectivité. Quand l'appareil est hors-ligne, les requêtes n'échouent pas : elles se mettent ",[1403,2585,2586],{},"en pause",", et ",[376,2589,2590],{},"fetchStatus"," devient ",[376,2593,2594],{},"FetchStatus.paused",". Affichez-le dans l'écran liste :",[368,2597,2599],{"className":402,"code":2598,"filename":1427,"language":405,"meta":374,"style":374},"builder: (context, state, fetchStatus) => Column(\n  children: [\n    if (fetchStatus == FetchStatus.paused)\n      Container(\n        width: double.infinity,\n        padding: const EdgeInsets.all(8),\n        color: Colors.amber.shade100,\n        child: const Text('Vous êtes hors-ligne. Données sauvegardées affichées.'),\n      ),\n    Expanded(\n      child: switch (state) {\n        Success(:final data) => _UserList(users: data),\n        Loading(:final previousData?) => _UserList(users: previousData),\n        Failure(:final previousData?) => _UserList(users: previousData),\n        Failure(:final error) => Center(child: Text('Could not load users: $error')),\n        _ => const Center(child: CircularProgressIndicator()),\n      },\n    ),\n  ],\n),\n",[376,2600,2601,2624,2634,2651,2658,2675,2701,2723,2743,2749,2756,2766,2791,2820,2849,2885,2906,2913,2919,2926],{"__ignoreMap":374},[379,2602,2603,2605,2607,2609,2611,2613,2615,2617,2619,2622],{"class":381,"line":382},[379,2604,1973],{"class":466},[379,2606,494],{"class":419},[379,2608,1622],{"class":466},[379,2610,584],{"class":419},[379,2612,1627],{"class":466},[379,2614,584],{"class":419},[379,2616,1632],{"class":466},[379,2618,883],{"class":419},[379,2620,2621],{"class":385}," Column",[379,2623,485],{"class":466},[379,2625,2626,2629,2631],{"class":381,"line":423},[379,2627,2628],{"class":466},"  children",[379,2630,494],{"class":419},[379,2632,2633],{"class":466}," [\n",[379,2635,2636,2638,2641,2643,2646,2648],{"class":381,"line":433},[379,2637,1083],{"class":1024},[379,2639,2640],{"class":466}," (fetchStatus ",[379,2642,2420],{"class":419},[379,2644,2645],{"class":385}," FetchStatus",[379,2647,570],{"class":419},[379,2649,2650],{"class":466},"paused)\n",[379,2652,2653,2656],{"class":381,"line":440},[379,2654,2655],{"class":385},"      Container",[379,2657,485],{"class":466},[379,2659,2660,2663,2665,2668,2670,2673],{"class":381,"line":450},[379,2661,2662],{"class":466},"        width",[379,2664,494],{"class":419},[379,2666,2667],{"class":385}," double",[379,2669,570],{"class":419},[379,2671,2672],{"class":466},"infinity",[379,2674,535],{"class":419},[379,2676,2677,2680,2682,2684,2687,2689,2692,2694,2697,2699],{"class":381,"line":455},[379,2678,2679],{"class":466},"        padding",[379,2681,494],{"class":419},[379,2683,497],{"class":458},[379,2685,2686],{"class":385}," EdgeInsets",[379,2688,570],{"class":419},[379,2690,2691],{"class":462},"all",[379,2693,565],{"class":466},[379,2695,2696],{"class":412},"8",[379,2698,1130],{"class":466},[379,2700,535],{"class":419},[379,2702,2703,2706,2708,2711,2713,2716,2718,2721],{"class":381,"line":470},[379,2704,2705],{"class":466},"        color",[379,2707,494],{"class":419},[379,2709,2710],{"class":385}," Colors",[379,2712,570],{"class":419},[379,2714,2715],{"class":466},"amber",[379,2717,570],{"class":419},[379,2719,2720],{"class":466},"shade100",[379,2722,535],{"class":419},[379,2724,2725,2728,2730,2732,2734,2736,2739,2741],{"class":381,"line":488},[379,2726,2727],{"class":466},"        child",[379,2729,494],{"class":419},[379,2731,497],{"class":458},[379,2733,1547],{"class":385},[379,2735,565],{"class":466},[379,2737,2738],{"class":389},"'Vous êtes hors-ligne. Données sauvegardées affichées.'",[379,2740,1130],{"class":466},[379,2742,535],{"class":419},[379,2744,2745,2747],{"class":381,"line":505},[379,2746,955],{"class":466},[379,2748,535],{"class":419},[379,2750,2751,2754],{"class":381,"line":538},[379,2752,2753],{"class":385},"    Expanded",[379,2755,485],{"class":466},[379,2757,2758,2760,2762,2764],{"class":381,"line":546},[379,2759,1963],{"class":466},[379,2761,494],{"class":419},[379,2763,1637],{"class":1024},[379,2765,1640],{"class":466},[379,2767,2768,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789],{"class":381,"line":554},[379,2769,2770],{"class":385},"        Success",[379,2772,565],{"class":466},[379,2774,494],{"class":419},[379,2776,1652],{"class":458},[379,2778,1655],{"class":466},[379,2780,883],{"class":419},[379,2782,1660],{"class":385},[379,2784,1663],{"class":466},[379,2786,494],{"class":419},[379,2788,1668],{"class":466},[379,2790,535],{"class":419},[379,2792,2793,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818],{"class":381,"line":559},[379,2794,2795],{"class":385},"        Loading",[379,2797,565],{"class":466},[379,2799,494],{"class":419},[379,2801,1652],{"class":458},[379,2803,1690],{"class":466},[379,2805,1693],{"class":419},[379,2807,1100],{"class":466},[379,2809,883],{"class":419},[379,2811,1660],{"class":385},[379,2813,1663],{"class":466},[379,2815,494],{"class":419},[379,2817,1706],{"class":466},[379,2819,535],{"class":419},[379,2821,2822,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847],{"class":381,"line":602},[379,2823,2824],{"class":385},"        Failure",[379,2826,565],{"class":466},[379,2828,494],{"class":419},[379,2830,1652],{"class":458},[379,2832,1690],{"class":466},[379,2834,1693],{"class":419},[379,2836,1100],{"class":466},[379,2838,883],{"class":419},[379,2840,1660],{"class":385},[379,2842,1663],{"class":466},[379,2844,494],{"class":419},[379,2846,1706],{"class":466},[379,2848,535],{"class":419},[379,2850,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883],{"class":381,"line":608},[379,2852,2824],{"class":385},[379,2854,565],{"class":466},[379,2856,494],{"class":419},[379,2858,1652],{"class":458},[379,2860,1750],{"class":466},[379,2862,883],{"class":419},[379,2864,1755],{"class":385},[379,2866,1758],{"class":466},[379,2868,494],{"class":419},[379,2870,1547],{"class":385},[379,2872,565],{"class":466},[379,2874,1767],{"class":389},[379,2876,1066],{"class":466},[379,2878,1772],{"class":1069},[379,2880,1063],{"class":389},[379,2882,532],{"class":466},[379,2884,535],{"class":419},[379,2886,2887,2890,2892,2894,2896,2898,2900,2902,2904],{"class":381,"line":613},[379,2888,2889],{"class":466},"        _ ",[379,2891,883],{"class":419},[379,2893,497],{"class":458},[379,2895,1755],{"class":385},[379,2897,1758],{"class":466},[379,2899,494],{"class":419},[379,2901,1796],{"class":385},[379,2903,696],{"class":466},[379,2905,535],{"class":419},[379,2907,2908,2911],{"class":381,"line":630},[379,2909,2910],{"class":466},"      }",[379,2912,535],{"class":419},[379,2914,2915,2917],{"class":381,"line":648},[379,2916,541],{"class":466},[379,2918,535],{"class":419},[379,2920,2921,2924],{"class":381,"line":653},[379,2922,2923],{"class":466},"  ]",[379,2925,535],{"class":419},[379,2927,2928,2930],{"class":381,"line":659},[379,2929,1130],{"class":466},[379,2931,535],{"class":419},[348,2933,2934],{},"Activez le mode avion et tirez pour rafraîchir : la liste reste, le bandeau apparaît. Réactivez le réseau : le fetch en pause s'exécute tout seul et le bandeau disparaît.",[363,2936,2938],{"id":2937},"ce-que-vous-obtenez-sans-rien-écrire","Ce que vous obtenez sans rien écrire",[2940,2941,2942,2955],"table",{},[2943,2944,2945],"thead",{},[2946,2947,2948,2952],"tr",{},[2949,2950,2951],"th",{},"Situation",[2949,2953,2954],{},"Ce que fait Qora",[2956,2957,2958,2974,2982,2990,3000,3008,3020,3028],"tbody",{},[2946,2959,2960,2964],{},[2961,2962,2963],"td",{},"Première visite",[2961,2965,2966,2969,2970,2973],{},[376,2967,2968],{},"Loading",", puis ",[376,2971,2972],{},"Success"," ; le résultat est mis en cache sous sa clé",[2946,2975,2976,2979],{},[2961,2977,2978],{},"Visite dans les 5 minutes",[2961,2980,2981],{},"Données du cache dès la première frame, aucun appel réseau",[2946,2983,2984,2987],{},[2961,2985,2986],{},"Visite après 5 minutes",[2961,2988,2989],{},"Données du cache dès la première frame, rafraîchies en arrière-plan",[2946,2991,2992,2995],{},[2961,2993,2994],{},"Tirer pour rafraîchir",[2961,2996,2997,2999],{},[376,2998,1943],{}," marque la clé comme périmée ; le builder monté recharge",[2946,3001,3002,3005],{},[2961,3003,3004],{},"Deux widgets, même clé",[2961,3006,3007],{},"Une seule requête, partagée",[2946,3009,3010,3013],{},[2961,3011,3012],{},"La requête échoue",[2961,3014,3015,3016,3019],{},"3 retries avec backoff, puis ",[376,3017,3018],{},"Failure"," avec les données précédentes",[2946,3021,3022,3025],{},[2961,3023,3024],{},"Appareil hors-ligne",[2961,3026,3027],{},"Les fetchs se mettent en pause et reprennent à la reconnexion ; les données restent affichées",[2946,3029,3030,3033],{},[2961,3031,3032],{},"Retour d'arrière-plan",[2961,3034,3035],{},"Les requêtes périmées affichées à l'écran se relancent",[363,3037,3039],{"id":3038},"étapes-suivantes","Étapes suivantes",[3041,3042,3043,3050,3056,3062],"ul",{},[3044,3045,3046,3049],"li",{},[355,3047,144],{"href":3048},"../recipes/mutations"," : écrire des données et invalider ce qui a changé",[3044,3051,3052,3055],{},[355,3053,153],{"href":3054},"../recipes/persistence"," : conserver le cache entre deux lancements",[3044,3057,3058,3061],{},[355,3059,57],{"href":3060},"../core-concepts/query-keys"," : structurer les clés pour garder l'invalidation simple",[3044,3063,3064,3068],{},[355,3065,3067],{"href":3066},"../examples/offline-first","Étude de cas offline-first"," : une application complète qui met les écritures en file hors-ligne",[3070,3071,3072],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":374,"searchDepth":423,"depth":423,"links":3074},[3075,3076,3077,3078,3079,3080,3081],{"id":365,"depth":423,"text":366},{"id":712,"depth":423,"text":713},{"id":1413,"depth":423,"text":1414},{"id":2163,"depth":423,"text":2164},{"id":2576,"depth":423,"text":2577},{"id":2937,"depth":423,"text":2938},{"id":3038,"depth":423,"text":3039},"Construire un écran liste et un écran détail avec Qora, voir le cache travailler, puis passer l'application hors-ligne.","md",null,{},{"icon":6},{"title":21,"description":3082},"2vAQsu6h6Rr8Q5D6f3io1BtoplNjoPsxWZAF9SGyWvk",[3090,3092],{"title":16,"path":17,"stem":18,"description":3091,"icon":19,"children":-1},"Ajouter Qora à une application Flutter ou à un projet Dart pur, et le brancher avec un seul widget.",{"title":25,"path":26,"stem":27,"description":3093,"icon":28,"children":-1},"Comment Qora se compare à flutter_query et cached_query, les autres bibliothèques de state serveur pour Flutter.",1794040404770]