[{"data":1,"prerenderedAt":3165},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-flutter-integration-best-practices":342,"-fr-flutter-integration-best-practices-surround":3160},[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":133,"body":344,"description":3153,"extension":3154,"links":3155,"meta":3156,"navigation":3157,"path":134,"seo":3158,"stem":135,"__hash__":3159},"docs_fr/fr/03.flutter-integration/8.best-practices.md",{"type":345,"value":346,"toc":3114},"minimark",[347,351,356,365,494,498,501,706,843,846,850,976,978,982,986,1400,1403,1493,1495,1502,1508,1573,1579,1619,1621,1628,1638,1882,1884,1888,1896,1905,2015,2022,2027,2187,2189,2192,2198,2582,2589,2592,2612,2614,2618,2625,2762,2774,2778,2790,2794,2806,2866,2868,2871,2878,3017,3025,3038,3077,3079,3083,3110],[348,349,57],"h2",{"id":350},"clés-de-requête",[352,353,355],"h3",{"id":354},"utiliser-des-tableaux-pas-des-chaînes","Utiliser des tableaux, pas des chaînes",[357,358,359,360,364],"p",{},"Les clés de requête sont des tableaux. Le premier élément est un ",[361,362,363],"strong",{},"espace de noms de domaine"," ; les éléments suivants sont des paramètres.",[366,367,373],"pre",{"className":368,"code":369,"filename":370,"language":371,"meta":372,"style":372},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Correct : structuré, invalidable par préfixe\n['users', userId]\n['users', userId, 'posts']\n['posts', {'page': 2, 'tag': 'flutter'}]\n\n// Éviter : opaque, difficile à invalider par groupe\n'user-$userId'\n'posts-page-2'\n","main.dart","dart","",[374,375,376,385,403,423,459,466,472,488],"code",{"__ignoreMap":372},[377,378,381],"span",{"class":379,"line":380},"line",1,[377,382,384],{"class":383},"sHwdD","// Correct : structuré, invalidable par préfixe\n",[377,386,388,392,396,400],{"class":379,"line":387},2,[377,389,391],{"class":390},"sTEyZ","[",[377,393,395],{"class":394},"sfazB","'users'",[377,397,399],{"class":398},"sMK4o",",",[377,401,402],{"class":390}," userId]\n",[377,404,406,408,410,412,415,417,420],{"class":379,"line":405},3,[377,407,391],{"class":390},[377,409,395],{"class":394},[377,411,399],{"class":398},[377,413,414],{"class":390}," userId",[377,416,399],{"class":398},[377,418,419],{"class":394}," 'posts'",[377,421,422],{"class":390},"]\n",[377,424,426,428,431,433,436,439,442,446,448,451,453,456],{"class":379,"line":425},4,[377,427,391],{"class":390},[377,429,430],{"class":394},"'posts'",[377,432,399],{"class":398},[377,434,435],{"class":390}," {",[377,437,438],{"class":394},"'page'",[377,440,441],{"class":398},":",[377,443,445],{"class":444},"sbssI"," 2",[377,447,399],{"class":398},[377,449,450],{"class":394}," 'tag'",[377,452,441],{"class":398},[377,454,455],{"class":394}," 'flutter'",[377,457,458],{"class":390},"}]\n",[377,460,462],{"class":379,"line":461},5,[377,463,465],{"emptyLinePlaceholder":464},true,"\n",[377,467,469],{"class":379,"line":468},6,[377,470,471],{"class":383},"// Éviter : opaque, difficile à invalider par groupe\n",[377,473,475,478,481,485],{"class":379,"line":474},7,[377,476,477],{"class":394},"'user-",[377,479,480],{"class":390},"$",[377,482,484],{"class":483},"sHdIc","userId",[377,486,487],{"class":394},"'\n",[377,489,491],{"class":379,"line":490},8,[377,492,493],{"class":394},"'posts-page-2'\n",[352,495,497],{"id":496},"centraliser-les-clés-dans-un-fichier","Centraliser les clés dans un fichier",[357,499,500],{},"Définir les clés à un seul endroit prévient les fautes de frappe et facilite l'invalidation en masse :",[366,502,505],{"className":368,"code":503,"filename":504,"language":371,"meta":372,"style":372},"abstract final class QueryKeys {\n  static List\u003CObject?> users() => ['users'];\n  static List\u003CObject?> user(int id) => ['users', id];\n  static List\u003CObject?> userPosts(int userId) => ['users', userId, 'posts'];\n  static List\u003CObject?> posts() => ['posts'];\n  static List\u003CObject?> post(int id) => ['posts', id];\n}\n","lib/data/query_keys.dart",[374,506,507,526,564,601,641,668,701],{"__ignoreMap":372},[377,508,509,512,516,519,523],{"class":379,"line":380},[377,510,511],{"class":398},"abstract",[377,513,515],{"class":514},"spNyl"," final",[377,517,518],{"class":398}," class",[377,520,522],{"class":521},"sBMFI"," QueryKeys",[377,524,525],{"class":390}," {\n",[377,527,528,531,534,537,540,543,547,550,553,556,558,561],{"class":379,"line":387},[377,529,530],{"class":514},"  static",[377,532,533],{"class":521}," List",[377,535,536],{"class":390},"\u003C",[377,538,539],{"class":521},"Object",[377,541,542],{"class":390},"?> ",[377,544,546],{"class":545},"s2Zo4","users",[377,548,549],{"class":390},"() ",[377,551,552],{"class":398},"=>",[377,554,555],{"class":390}," [",[377,557,395],{"class":394},[377,559,560],{"class":390},"]",[377,562,563],{"class":398},";\n",[377,565,566,568,570,572,574,576,579,582,585,588,590,592,594,596,599],{"class":379,"line":405},[377,567,530],{"class":514},[377,569,533],{"class":521},[377,571,536],{"class":390},[377,573,539],{"class":521},[377,575,542],{"class":390},[377,577,578],{"class":545},"user",[377,580,581],{"class":390},"(",[377,583,584],{"class":521},"int",[377,586,587],{"class":390}," id) ",[377,589,552],{"class":398},[377,591,555],{"class":390},[377,593,395],{"class":394},[377,595,399],{"class":398},[377,597,598],{"class":390}," id]",[377,600,563],{"class":398},[377,602,603,605,607,609,611,613,616,618,620,623,625,627,629,631,633,635,637,639],{"class":379,"line":425},[377,604,530],{"class":514},[377,606,533],{"class":521},[377,608,536],{"class":390},[377,610,539],{"class":521},[377,612,542],{"class":390},[377,614,615],{"class":545},"userPosts",[377,617,581],{"class":390},[377,619,584],{"class":521},[377,621,622],{"class":390}," userId) ",[377,624,552],{"class":398},[377,626,555],{"class":390},[377,628,395],{"class":394},[377,630,399],{"class":398},[377,632,414],{"class":390},[377,634,399],{"class":398},[377,636,419],{"class":394},[377,638,560],{"class":390},[377,640,563],{"class":398},[377,642,643,645,647,649,651,653,656,658,660,662,664,666],{"class":379,"line":461},[377,644,530],{"class":514},[377,646,533],{"class":521},[377,648,536],{"class":390},[377,650,539],{"class":521},[377,652,542],{"class":390},[377,654,655],{"class":545},"posts",[377,657,549],{"class":390},[377,659,552],{"class":398},[377,661,555],{"class":390},[377,663,430],{"class":394},[377,665,560],{"class":390},[377,667,563],{"class":398},[377,669,670,672,674,676,678,680,683,685,687,689,691,693,695,697,699],{"class":379,"line":468},[377,671,530],{"class":514},[377,673,533],{"class":521},[377,675,536],{"class":390},[377,677,539],{"class":521},[377,679,542],{"class":390},[377,681,682],{"class":545},"post",[377,684,581],{"class":390},[377,686,584],{"class":521},[377,688,587],{"class":390},[377,690,552],{"class":398},[377,692,555],{"class":390},[377,694,430],{"class":394},[377,696,399],{"class":398},[377,698,598],{"class":390},[377,700,563],{"class":398},[377,702,703],{"class":379,"line":474},[377,704,705],{"class":390},"}\n",[366,707,709],{"className":368,"code":708,"filename":370,"language":371,"meta":372,"style":372},"QoraBuilder\u003CUser>(\n  queryKey: QueryKeys.user(userId),\n  fetcher: () => api.getUser(userId),\n  builder: (context, state, fetchStatus) { ... },\n)\n\n// Invalider toutes les requêtes utilisateur après une mise à jour du profil\nclient.invalidateWhere((key) => key.firstOrNull == 'users');\n",[374,710,711,723,743,767,795,800,804,809],{"__ignoreMap":372},[377,712,713,715,717,720],{"class":379,"line":380},[377,714,108],{"class":521},[377,716,536],{"class":390},[377,718,719],{"class":521},"User",[377,721,722],{"class":390},">(\n",[377,724,725,728,730,732,735,737,740],{"class":379,"line":387},[377,726,727],{"class":390},"  queryKey",[377,729,441],{"class":398},[377,731,522],{"class":521},[377,733,734],{"class":398},".",[377,736,578],{"class":545},[377,738,739],{"class":390},"(userId)",[377,741,742],{"class":398},",\n",[377,744,745,748,750,753,755,758,760,763,765],{"class":379,"line":405},[377,746,747],{"class":390},"  fetcher",[377,749,441],{"class":398},[377,751,752],{"class":390}," () ",[377,754,552],{"class":398},[377,756,757],{"class":390}," api",[377,759,734],{"class":398},[377,761,762],{"class":545},"getUser",[377,764,739],{"class":390},[377,766,742],{"class":398},[377,768,769,772,774,777,779,782,784,787,790,793],{"class":379,"line":425},[377,770,771],{"class":390},"  builder",[377,773,441],{"class":398},[377,775,776],{"class":390}," (context",[377,778,399],{"class":398},[377,780,781],{"class":390}," state",[377,783,399],{"class":398},[377,785,786],{"class":390}," fetchStatus) { ",[377,788,789],{"class":398},"...",[377,791,792],{"class":390}," }",[377,794,742],{"class":398},[377,796,797],{"class":379,"line":461},[377,798,799],{"class":390},")\n",[377,801,802],{"class":379,"line":468},[377,803,465],{"emptyLinePlaceholder":464},[377,805,806],{"class":379,"line":474},[377,807,808],{"class":383},"// Invalider toutes les requêtes utilisateur après une mise à jour du profil\n",[377,810,811,814,816,819,822,824,827,829,832,835,838,841],{"class":379,"line":490},[377,812,813],{"class":390},"client",[377,815,734],{"class":398},[377,817,818],{"class":545},"invalidateWhere",[377,820,821],{"class":390},"((key) ",[377,823,552],{"class":398},[377,825,826],{"class":390}," key",[377,828,734],{"class":398},[377,830,831],{"class":390},"firstOrNull ",[377,833,834],{"class":398},"==",[377,836,837],{"class":394}," 'users'",[377,839,840],{"class":390},")",[377,842,563],{"class":398},[844,845],"hr",{},[348,847,849],{"id":848},"référence-rapide-de-lapi-widget","Référence rapide de l'API widget",[851,852,853,872],"table",{},[854,855,856],"thead",{},[857,858,859,863,866,869],"tr",{},[860,861,862],"th",{},"Widget",[860,864,865],{},"Param clé",[860,867,868],{},"Param fetcher",[860,870,871],{},"Signature du builder",[873,874,875,898,916,935,955],"tbody",{},[857,876,877,883,888,893],{},[878,879,880],"td",{},[374,881,882],{},"QoraBuilder\u003CT>",[878,884,885],{},[374,886,887],{},"queryKey",[878,889,890],{},[374,891,892],{},"fetcher",[878,894,895],{},[374,896,897],{},"(BuildContext, QoraState\u003CT>, FetchStatus)",[857,899,900,905,909,911],{},[878,901,902],{},[374,903,904],{},"QoraStateBuilder\u003CT>",[878,906,907],{},[374,908,887],{},[878,910,441],{},[878,912,913],{},[374,914,915],{},"(BuildContext, QoraState\u003CT>)",[857,917,918,923,925,930],{},[878,919,920],{},[374,921,922],{},"QoraMutationBuilder\u003CD,V,C>",[878,924,441],{},[878,926,927],{},[374,928,929],{},"mutator",[878,931,932],{},[374,933,934],{},"(BuildContext, MutationState\u003CD,V>, mutate)",[857,936,937,942,946,950],{},[878,938,939],{},[374,940,941],{},"InfiniteQueryBuilder\u003CD,P>",[878,943,944],{},[374,945,887],{},[878,947,948],{},[374,949,892],{},[878,951,952],{},[374,953,954],{},"(BuildContext, InfiniteQueryState\u003CD,P>, InfiniteQueryController\u003CD,P>)",[857,956,957,962,966,970],{},[878,958,959],{},[374,960,961],{},"QoraPrefetch\u003CT>",[878,963,964],{},[374,965,887],{},[878,967,968],{},[374,969,892],{},[878,971,972,973,840],{},": (encapsule ",[374,974,975],{},"child",[844,977],{},[348,979,981],{"id":980},"placement-des-fetchers","Placement des fetchers",[352,983,985],{"id":984},"garder-les-fetchers-dans-les-classes-repository-pas-dans-les-widgets","Garder les fetchers dans les classes repository, pas dans les widgets",[366,987,990],{"className":368,"code":988,"filename":989,"language":371,"meta":372,"style":372},"class UserRepository {\n  final QoraClient _client;\n  final UserApi _api;\n\n  UserRepository(this._client, this._api);\n\n  Stream\u003CQoraState\u003CUser>> watchUser(int id) => _client.watchQuery(\n        key: QueryKeys.user(id),\n        fetcher: () => _api.getUser(id),\n        options: const QoraOptions(staleTime: Duration(minutes: 5)),\n      );\n\n  Future\u003Cvoid> updateUser(int id, String name) async {\n    final snapshot = _client.getQueryData\u003CUser>(QueryKeys.user(id));\n    _client.setQueryData(QueryKeys.user(id), User(id: id, name: name));\n    try {\n      await _api.updateUser(id, name);\n    } catch (_) {\n      _client.restoreQueryData(QueryKeys.user(id), snapshot);\n      rethrow;\n    }\n  }\n}\n","lib/data/user_repository.dart",[374,991,992,1002,1015,1027,1031,1056,1060,1097,1115,1137,1172,1180,1185,1223,1261,1306,1314,1335,1347,1375,1383,1389,1395],{"__ignoreMap":372},[377,993,994,997,1000],{"class":379,"line":380},[377,995,996],{"class":398},"class",[377,998,999],{"class":521}," UserRepository",[377,1001,525],{"class":390},[377,1003,1004,1007,1010,1013],{"class":379,"line":387},[377,1005,1006],{"class":514},"  final",[377,1008,1009],{"class":521}," QoraClient",[377,1011,1012],{"class":390}," _client",[377,1014,563],{"class":398},[377,1016,1017,1019,1022,1025],{"class":379,"line":405},[377,1018,1006],{"class":514},[377,1020,1021],{"class":521}," UserApi",[377,1023,1024],{"class":390}," _api",[377,1026,563],{"class":398},[377,1028,1029],{"class":379,"line":425},[377,1030,465],{"emptyLinePlaceholder":464},[377,1032,1033,1036,1039,1041,1044,1046,1049,1051,1054],{"class":379,"line":461},[377,1034,1035],{"class":521},"  UserRepository",[377,1037,1038],{"class":390},"(this",[377,1040,734],{"class":398},[377,1042,1043],{"class":390},"_client",[377,1045,399],{"class":398},[377,1047,1048],{"class":390}," this",[377,1050,734],{"class":398},[377,1052,1053],{"class":390},"_api)",[377,1055,563],{"class":398},[377,1057,1058],{"class":379,"line":468},[377,1059,465],{"emptyLinePlaceholder":464},[377,1061,1062,1065,1067,1069,1071,1073,1076,1079,1081,1083,1085,1087,1089,1091,1094],{"class":379,"line":474},[377,1063,1064],{"class":521},"  Stream",[377,1066,536],{"class":390},[377,1068,211],{"class":521},[377,1070,536],{"class":390},[377,1072,719],{"class":521},[377,1074,1075],{"class":390},">> ",[377,1077,1078],{"class":545},"watchUser",[377,1080,581],{"class":390},[377,1082,584],{"class":521},[377,1084,587],{"class":390},[377,1086,552],{"class":398},[377,1088,1012],{"class":390},[377,1090,734],{"class":398},[377,1092,1093],{"class":545},"watchQuery",[377,1095,1096],{"class":390},"(\n",[377,1098,1099,1102,1104,1106,1108,1110,1113],{"class":379,"line":490},[377,1100,1101],{"class":390},"        key",[377,1103,441],{"class":398},[377,1105,522],{"class":521},[377,1107,734],{"class":398},[377,1109,578],{"class":545},[377,1111,1112],{"class":390},"(id)",[377,1114,742],{"class":398},[377,1116,1118,1121,1123,1125,1127,1129,1131,1133,1135],{"class":379,"line":1117},9,[377,1119,1120],{"class":390},"        fetcher",[377,1122,441],{"class":398},[377,1124,752],{"class":390},[377,1126,552],{"class":398},[377,1128,1024],{"class":390},[377,1130,734],{"class":398},[377,1132,762],{"class":545},[377,1134,1112],{"class":390},[377,1136,742],{"class":398},[377,1138,1140,1143,1145,1148,1151,1154,1156,1159,1162,1164,1167,1170],{"class":379,"line":1139},10,[377,1141,1142],{"class":390},"        options",[377,1144,441],{"class":398},[377,1146,1147],{"class":514}," const",[377,1149,1150],{"class":521}," QoraOptions",[377,1152,1153],{"class":390},"(staleTime",[377,1155,441],{"class":398},[377,1157,1158],{"class":521}," Duration",[377,1160,1161],{"class":390},"(minutes",[377,1163,441],{"class":398},[377,1165,1166],{"class":444}," 5",[377,1168,1169],{"class":390},"))",[377,1171,742],{"class":398},[377,1173,1175,1178],{"class":379,"line":1174},11,[377,1176,1177],{"class":390},"      )",[377,1179,563],{"class":398},[377,1181,1183],{"class":379,"line":1182},12,[377,1184,465],{"emptyLinePlaceholder":464},[377,1186,1188,1191,1193,1196,1199,1202,1204,1206,1209,1211,1214,1217,1221],{"class":379,"line":1187},13,[377,1189,1190],{"class":521},"  Future",[377,1192,536],{"class":390},[377,1194,1195],{"class":514},"void",[377,1197,1198],{"class":390},"> ",[377,1200,1201],{"class":545},"updateUser",[377,1203,581],{"class":390},[377,1205,584],{"class":521},[377,1207,1208],{"class":390}," id",[377,1210,399],{"class":398},[377,1212,1213],{"class":521}," String",[377,1215,1216],{"class":390}," name) ",[377,1218,1220],{"class":1219},"s7zQu","async",[377,1222,525],{"class":390},[377,1224,1226,1229,1232,1235,1237,1239,1242,1244,1246,1249,1252,1254,1256,1259],{"class":379,"line":1225},14,[377,1227,1228],{"class":514},"    final",[377,1230,1231],{"class":390}," snapshot ",[377,1233,1234],{"class":398},"=",[377,1236,1012],{"class":390},[377,1238,734],{"class":398},[377,1240,1241],{"class":545},"getQueryData",[377,1243,536],{"class":390},[377,1245,719],{"class":521},[377,1247,1248],{"class":390},">(",[377,1250,1251],{"class":521},"QueryKeys",[377,1253,734],{"class":398},[377,1255,578],{"class":545},[377,1257,1258],{"class":390},"(id))",[377,1260,563],{"class":398},[377,1262,1264,1267,1269,1272,1274,1276,1278,1280,1282,1284,1287,1290,1292,1294,1296,1299,1301,1304],{"class":379,"line":1263},15,[377,1265,1266],{"class":390},"    _client",[377,1268,734],{"class":398},[377,1270,1271],{"class":545},"setQueryData",[377,1273,581],{"class":390},[377,1275,1251],{"class":521},[377,1277,734],{"class":398},[377,1279,578],{"class":545},[377,1281,1112],{"class":390},[377,1283,399],{"class":398},[377,1285,1286],{"class":521}," User",[377,1288,1289],{"class":390},"(id",[377,1291,441],{"class":398},[377,1293,1208],{"class":390},[377,1295,399],{"class":398},[377,1297,1298],{"class":390}," name",[377,1300,441],{"class":398},[377,1302,1303],{"class":390}," name))",[377,1305,563],{"class":398},[377,1307,1309,1312],{"class":379,"line":1308},16,[377,1310,1311],{"class":1219},"    try",[377,1313,525],{"class":390},[377,1315,1317,1320,1322,1324,1326,1328,1330,1333],{"class":379,"line":1316},17,[377,1318,1319],{"class":1219},"      await",[377,1321,1024],{"class":390},[377,1323,734],{"class":398},[377,1325,1201],{"class":545},[377,1327,1289],{"class":390},[377,1329,399],{"class":398},[377,1331,1332],{"class":390}," name)",[377,1334,563],{"class":398},[377,1336,1338,1341,1344],{"class":379,"line":1337},18,[377,1339,1340],{"class":390},"    } ",[377,1342,1343],{"class":1219},"catch",[377,1345,1346],{"class":390}," (_) {\n",[377,1348,1350,1353,1355,1358,1360,1362,1364,1366,1368,1370,1373],{"class":379,"line":1349},19,[377,1351,1352],{"class":390},"      _client",[377,1354,734],{"class":398},[377,1356,1357],{"class":545},"restoreQueryData",[377,1359,581],{"class":390},[377,1361,1251],{"class":521},[377,1363,734],{"class":398},[377,1365,578],{"class":545},[377,1367,1112],{"class":390},[377,1369,399],{"class":398},[377,1371,1372],{"class":390}," snapshot)",[377,1374,563],{"class":398},[377,1376,1378,1381],{"class":379,"line":1377},20,[377,1379,1380],{"class":1219},"      rethrow",[377,1382,563],{"class":398},[377,1384,1386],{"class":379,"line":1385},21,[377,1387,1388],{"class":390},"    }\n",[377,1390,1392],{"class":379,"line":1391},22,[377,1393,1394],{"class":390},"  }\n",[377,1396,1398],{"class":379,"line":1397},23,[377,1399,705],{"class":390},[357,1401,1402],{},"Le code widget devient un simple binding :",[366,1404,1407],{"className":368,"code":1405,"filename":1406,"language":371,"meta":372,"style":372},"QoraBuilder\u003CUser>(\n  queryKey: QueryKeys.user(widget.userId),\n  fetcher: () => repo.fetchUser(widget.userId),\n  builder: (context, state, fetchStatus) { ... },\n)\n","user_screen.dart",[374,1408,1409,1419,1441,1467,1489],{"__ignoreMap":372},[377,1410,1411,1413,1415,1417],{"class":379,"line":380},[377,1412,108],{"class":521},[377,1414,536],{"class":390},[377,1416,719],{"class":521},[377,1418,722],{"class":390},[377,1420,1421,1423,1425,1427,1429,1431,1434,1436,1439],{"class":379,"line":387},[377,1422,727],{"class":390},[377,1424,441],{"class":398},[377,1426,522],{"class":521},[377,1428,734],{"class":398},[377,1430,578],{"class":545},[377,1432,1433],{"class":390},"(widget",[377,1435,734],{"class":398},[377,1437,1438],{"class":390},"userId)",[377,1440,742],{"class":398},[377,1442,1443,1445,1447,1449,1451,1454,1456,1459,1461,1463,1465],{"class":379,"line":405},[377,1444,747],{"class":390},[377,1446,441],{"class":398},[377,1448,752],{"class":390},[377,1450,552],{"class":398},[377,1452,1453],{"class":390}," repo",[377,1455,734],{"class":398},[377,1457,1458],{"class":545},"fetchUser",[377,1460,1433],{"class":390},[377,1462,734],{"class":398},[377,1464,1438],{"class":390},[377,1466,742],{"class":398},[377,1468,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487],{"class":379,"line":425},[377,1470,771],{"class":390},[377,1472,441],{"class":398},[377,1474,776],{"class":390},[377,1476,399],{"class":398},[377,1478,781],{"class":390},[377,1480,399],{"class":398},[377,1482,786],{"class":390},[377,1484,789],{"class":398},[377,1486,792],{"class":390},[377,1488,742],{"class":398},[377,1490,1491],{"class":379,"line":461},[377,1492,799],{"class":390},[844,1494],{},[348,1496,1498,1499],{"id":1497},"recommandations-pour-staletime","Recommandations pour ",[374,1500,1501],{},"staleTime",[357,1503,1504,1505,1507],{},"Configurer ",[374,1506,1501],{}," selon la fréquence de modification des données côté serveur :",[851,1509,1510,1521],{},[854,1511,1512],{},[857,1513,1514,1517],{},[860,1515,1516],{},"Type de données",[860,1518,1519],{},[374,1520,1501],{},[873,1522,1523,1533,1543,1553,1563],{},[857,1524,1525,1528],{},[878,1526,1527],{},"Prix ou flux en temps réel",[878,1529,1530],{},[374,1531,1532],{},"Duration.zero",[857,1534,1535,1538],{},[878,1536,1537],{},"Profil utilisateur / session",[878,1539,1540],{},[374,1541,1542],{},"Duration(minutes: 5)",[857,1544,1545,1548],{},[878,1546,1547],{},"Contenu d'article",[878,1549,1550],{},[374,1551,1552],{},"Duration(minutes: 10)",[857,1554,1555,1558],{},[878,1556,1557],{},"Configuration applicative",[878,1559,1560],{},[374,1561,1562],{},"Duration(hours: 1)",[857,1564,1565,1568],{},[878,1566,1567],{},"Données de référence statiques",[878,1569,1570],{},[374,1571,1572],{},"Duration(days: 1)",[357,1574,1575,1576,1578],{},"Définir les valeurs par défaut globales dans ",[374,1577,220],{}," et surcharger par requête uniquement si nécessaire :",[366,1580,1582],{"className":368,"code":1581,"filename":370,"language":371,"meta":372,"style":372},"QoraClientConfig(\n  defaultOptions: QoraOptions(staleTime: Duration(minutes: 5)),\n)\n",[374,1583,1584,1590,1615],{"__ignoreMap":372},[377,1585,1586,1588],{"class":379,"line":380},[377,1587,220],{"class":521},[377,1589,1096],{"class":390},[377,1591,1592,1595,1597,1599,1601,1603,1605,1607,1609,1611,1613],{"class":379,"line":387},[377,1593,1594],{"class":390},"  defaultOptions",[377,1596,441],{"class":398},[377,1598,1150],{"class":521},[377,1600,1153],{"class":390},[377,1602,441],{"class":398},[377,1604,1158],{"class":521},[377,1606,1161],{"class":390},[377,1608,441],{"class":398},[377,1610,1166],{"class":444},[377,1612,1169],{"class":390},[377,1614,742],{"class":398},[377,1616,1617],{"class":379,"line":405},[377,1618,799],{"class":390},[844,1620],{},[348,1622,1624,1627],{"id":1623},"fetchstatus-conscience-du-réseau",[374,1625,1626],{},"FetchStatus"," : conscience du réseau",[357,1629,1630,1631,1634,1635,1637],{},"Le troisième argument de ",[374,1632,1633],{},"QoraBuilder.builder"," est ",[374,1636,1626],{},". L'utiliser pour afficher un indicateur hors-ligne plutôt qu'un spinner :",[366,1639,1641],{"className":368,"code":1640,"filename":1406,"language":371,"meta":372,"style":372},"QoraBuilder\u003CUser>(\n  queryKey: ['users', userId],\n  fetcher: () => api.getUser(userId),\n  builder: (context, state, fetchStatus) {\n    if (fetchStatus == FetchStatus.paused) {\n      return OfflineBanner(staleData: state.dataOrNull);\n    }\n    return switch (state) {\n      Success(:final data) => UserCard(data),\n      Loading() => const CircularProgressIndicator(),\n      Failure(:final error) => ErrorWidget('$error'),\n      Initial() => const SizedBox.shrink(),\n    };\n  },\n)\n",[374,1642,1643,1653,1670,1690,1707,1725,1747,1751,1762,1787,1806,1841,1864,1871,1878],{"__ignoreMap":372},[377,1644,1645,1647,1649,1651],{"class":379,"line":380},[377,1646,108],{"class":521},[377,1648,536],{"class":390},[377,1650,719],{"class":521},[377,1652,722],{"class":390},[377,1654,1655,1657,1659,1661,1663,1665,1668],{"class":379,"line":387},[377,1656,727],{"class":390},[377,1658,441],{"class":398},[377,1660,555],{"class":390},[377,1662,395],{"class":394},[377,1664,399],{"class":398},[377,1666,1667],{"class":390}," userId]",[377,1669,742],{"class":398},[377,1671,1672,1674,1676,1678,1680,1682,1684,1686,1688],{"class":379,"line":405},[377,1673,747],{"class":390},[377,1675,441],{"class":398},[377,1677,752],{"class":390},[377,1679,552],{"class":398},[377,1681,757],{"class":390},[377,1683,734],{"class":398},[377,1685,762],{"class":545},[377,1687,739],{"class":390},[377,1689,742],{"class":398},[377,1691,1692,1694,1696,1698,1700,1702,1704],{"class":379,"line":425},[377,1693,771],{"class":390},[377,1695,441],{"class":398},[377,1697,776],{"class":390},[377,1699,399],{"class":398},[377,1701,781],{"class":390},[377,1703,399],{"class":398},[377,1705,1706],{"class":390}," fetchStatus) {\n",[377,1708,1709,1712,1715,1717,1720,1722],{"class":379,"line":461},[377,1710,1711],{"class":1219},"    if",[377,1713,1714],{"class":390}," (fetchStatus ",[377,1716,834],{"class":398},[377,1718,1719],{"class":521}," FetchStatus",[377,1721,734],{"class":398},[377,1723,1724],{"class":390},"paused) {\n",[377,1726,1727,1730,1733,1736,1738,1740,1742,1745],{"class":379,"line":468},[377,1728,1729],{"class":1219},"      return",[377,1731,1732],{"class":521}," OfflineBanner",[377,1734,1735],{"class":390},"(staleData",[377,1737,441],{"class":398},[377,1739,781],{"class":390},[377,1741,734],{"class":398},[377,1743,1744],{"class":390},"dataOrNull)",[377,1746,563],{"class":398},[377,1748,1749],{"class":379,"line":474},[377,1750,1388],{"class":390},[377,1752,1753,1756,1759],{"class":379,"line":490},[377,1754,1755],{"class":1219},"    return",[377,1757,1758],{"class":1219}," switch",[377,1760,1761],{"class":390}," (state) {\n",[377,1763,1764,1767,1769,1771,1774,1777,1779,1782,1785],{"class":379,"line":1117},[377,1765,1766],{"class":521},"      Success",[377,1768,581],{"class":390},[377,1770,441],{"class":398},[377,1772,1773],{"class":514},"final",[377,1775,1776],{"class":390}," data) ",[377,1778,552],{"class":398},[377,1780,1781],{"class":521}," UserCard",[377,1783,1784],{"class":390},"(data)",[377,1786,742],{"class":398},[377,1788,1789,1792,1794,1796,1798,1801,1804],{"class":379,"line":1139},[377,1790,1791],{"class":521},"      Loading",[377,1793,549],{"class":390},[377,1795,552],{"class":398},[377,1797,1147],{"class":514},[377,1799,1800],{"class":521}," CircularProgressIndicator",[377,1802,1803],{"class":390},"()",[377,1805,742],{"class":398},[377,1807,1808,1811,1813,1815,1817,1820,1822,1825,1827,1830,1832,1835,1837,1839],{"class":379,"line":1174},[377,1809,1810],{"class":521},"      Failure",[377,1812,581],{"class":390},[377,1814,441],{"class":398},[377,1816,1773],{"class":514},[377,1818,1819],{"class":390}," error) ",[377,1821,552],{"class":398},[377,1823,1824],{"class":521}," ErrorWidget",[377,1826,581],{"class":390},[377,1828,1829],{"class":394},"'",[377,1831,480],{"class":390},[377,1833,1834],{"class":483},"error",[377,1836,1829],{"class":394},[377,1838,840],{"class":390},[377,1840,742],{"class":398},[377,1842,1843,1846,1848,1850,1852,1855,1857,1860,1862],{"class":379,"line":1182},[377,1844,1845],{"class":521},"      Initial",[377,1847,549],{"class":390},[377,1849,552],{"class":398},[377,1851,1147],{"class":514},[377,1853,1854],{"class":521}," SizedBox",[377,1856,734],{"class":398},[377,1858,1859],{"class":545},"shrink",[377,1861,1803],{"class":390},[377,1863,742],{"class":398},[377,1865,1866,1869],{"class":379,"line":1187},[377,1867,1868],{"class":390},"    }",[377,1870,563],{"class":398},[377,1872,1873,1876],{"class":379,"line":1225},[377,1874,1875],{"class":390},"  }",[377,1877,742],{"class":398},[377,1879,1880],{"class":379,"line":1263},[377,1881,799],{"class":390},[844,1883],{},[348,1885,1887],{"id":1886},"éviter-le-sur-fetch","Éviter le sur-fetch",[352,1889,1891,1892,1895],{"id":1890},"utiliser-qorastatebuilder-pour-lui-dérivée","Utiliser ",[374,1893,1894],{},"QoraStateBuilder"," pour l'UI dérivée",[357,1897,1898,1900,1901,1904],{},[374,1899,1894],{}," s'abonne à l'état d'une requête ",[361,1902,1903],{},"sans déclencher de fetch",". À utiliser pour les composants qui affichent des données sans être responsables de leur chargement :",[366,1906,1909],{"className":368,"code":1907,"filename":1908,"language":371,"meta":372,"style":372},"QoraStateBuilder\u003CUser>(\n  queryKey: QueryKeys.user(userId),\n  builder: (context, state) => switch (state) {\n    Success(:final data) => Avatar(url: data.avatarUrl),\n    _ => const DefaultAvatar(),\n  },\n)\n","avatar_widget.dart",[374,1910,1911,1921,1937,1956,1989,2005,2011],{"__ignoreMap":372},[377,1912,1913,1915,1917,1919],{"class":379,"line":380},[377,1914,1894],{"class":521},[377,1916,536],{"class":390},[377,1918,719],{"class":521},[377,1920,722],{"class":390},[377,1922,1923,1925,1927,1929,1931,1933,1935],{"class":379,"line":387},[377,1924,727],{"class":390},[377,1926,441],{"class":398},[377,1928,522],{"class":521},[377,1930,734],{"class":398},[377,1932,578],{"class":545},[377,1934,739],{"class":390},[377,1936,742],{"class":398},[377,1938,1939,1941,1943,1945,1947,1950,1952,1954],{"class":379,"line":405},[377,1940,771],{"class":390},[377,1942,441],{"class":398},[377,1944,776],{"class":390},[377,1946,399],{"class":398},[377,1948,1949],{"class":390}," state) ",[377,1951,552],{"class":398},[377,1953,1758],{"class":1219},[377,1955,1761],{"class":390},[377,1957,1958,1961,1963,1965,1967,1969,1971,1974,1977,1979,1982,1984,1987],{"class":379,"line":425},[377,1959,1960],{"class":521},"    Success",[377,1962,581],{"class":390},[377,1964,441],{"class":398},[377,1966,1773],{"class":514},[377,1968,1776],{"class":390},[377,1970,552],{"class":398},[377,1972,1973],{"class":521}," Avatar",[377,1975,1976],{"class":390},"(url",[377,1978,441],{"class":398},[377,1980,1981],{"class":390}," data",[377,1983,734],{"class":398},[377,1985,1986],{"class":390},"avatarUrl)",[377,1988,742],{"class":398},[377,1990,1991,1994,1996,1998,2001,2003],{"class":379,"line":461},[377,1992,1993],{"class":390},"    _ ",[377,1995,552],{"class":398},[377,1997,1147],{"class":514},[377,1999,2000],{"class":521}," DefaultAvatar",[377,2002,1803],{"class":390},[377,2004,742],{"class":398},[377,2006,2007,2009],{"class":379,"line":468},[377,2008,1875],{"class":390},[377,2010,742],{"class":398},[377,2012,2013],{"class":379,"line":474},[377,2014,799],{"class":390},[352,2016,1891,2018,2021],{"id":2017},"utiliser-qoraprefetch-avant-la-navigation",[374,2019,2020],{},"QoraPrefetch"," avant la navigation",[357,2023,2024,2026],{},[374,2025,2020],{}," est un widget qui préchauffe le cache dès son montage : aucun fetch ne se déclenche dans les callbacks de build :",[366,2028,2031],{"className":368,"code":2029,"filename":2030,"language":371,"meta":372,"style":372},"MouseRegion(\n  onEnter: (_) => setState(() => _hover = true),\n  child: _hover\n      ? QoraPrefetch\u003CUser>(\n          queryKey: QueryKeys.user(user.id),\n          fetcher: () => api.getUser(user.id),\n          child: UserListTile(user: user),\n        )\n      : UserListTile(user: user),\n)\n","user_list_item.dart",[374,2032,2033,2040,2072,2082,2096,2119,2144,2163,2168,2183],{"__ignoreMap":372},[377,2034,2035,2038],{"class":379,"line":380},[377,2036,2037],{"class":521},"MouseRegion",[377,2039,1096],{"class":390},[377,2041,2042,2045,2047,2050,2052,2055,2058,2060,2063,2065,2068,2070],{"class":379,"line":387},[377,2043,2044],{"class":390},"  onEnter",[377,2046,441],{"class":398},[377,2048,2049],{"class":390}," (_) ",[377,2051,552],{"class":398},[377,2053,2054],{"class":545}," setState",[377,2056,2057],{"class":390},"(() ",[377,2059,552],{"class":398},[377,2061,2062],{"class":390}," _hover ",[377,2064,1234],{"class":398},[377,2066,2067],{"class":398}," true",[377,2069,840],{"class":390},[377,2071,742],{"class":398},[377,2073,2074,2077,2079],{"class":379,"line":405},[377,2075,2076],{"class":390},"  child",[377,2078,441],{"class":398},[377,2080,2081],{"class":390}," _hover\n",[377,2083,2084,2087,2090,2092,2094],{"class":379,"line":425},[377,2085,2086],{"class":398},"      ?",[377,2088,2089],{"class":521}," QoraPrefetch",[377,2091,536],{"class":390},[377,2093,719],{"class":521},[377,2095,722],{"class":390},[377,2097,2098,2101,2103,2105,2107,2109,2112,2114,2117],{"class":379,"line":461},[377,2099,2100],{"class":390},"          queryKey",[377,2102,441],{"class":398},[377,2104,522],{"class":521},[377,2106,734],{"class":398},[377,2108,578],{"class":545},[377,2110,2111],{"class":390},"(user",[377,2113,734],{"class":398},[377,2115,2116],{"class":390},"id)",[377,2118,742],{"class":398},[377,2120,2121,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142],{"class":379,"line":468},[377,2122,2123],{"class":390},"          fetcher",[377,2125,441],{"class":398},[377,2127,752],{"class":390},[377,2129,552],{"class":398},[377,2131,757],{"class":390},[377,2133,734],{"class":398},[377,2135,762],{"class":545},[377,2137,2111],{"class":390},[377,2139,734],{"class":398},[377,2141,2116],{"class":390},[377,2143,742],{"class":398},[377,2145,2146,2149,2151,2154,2156,2158,2161],{"class":379,"line":474},[377,2147,2148],{"class":390},"          child",[377,2150,441],{"class":398},[377,2152,2153],{"class":521}," UserListTile",[377,2155,2111],{"class":390},[377,2157,441],{"class":398},[377,2159,2160],{"class":390}," user)",[377,2162,742],{"class":398},[377,2164,2165],{"class":379,"line":490},[377,2166,2167],{"class":390},"        )\n",[377,2169,2170,2173,2175,2177,2179,2181],{"class":379,"line":1117},[377,2171,2172],{"class":398},"      :",[377,2174,2153],{"class":521},[377,2176,2111],{"class":390},[377,2178,441],{"class":398},[377,2180,2160],{"class":390},[377,2182,742],{"class":398},[377,2184,2185],{"class":379,"line":1139},[377,2186,799],{"class":390},[844,2188],{},[348,2190,144],{"id":2191},"mutations",[352,2193,2195,2196],{"id":2194},"widget-correct-qoramutationbuilder","Widget correct : ",[374,2197,113],{},[366,2199,2202],{"className":368,"code":2200,"filename":2201,"language":371,"meta":372,"style":372},"QoraMutationBuilder\u003CUser, String, User?>(\n  mutator: (name) => api.updateUser(userId, name),\n  options: MutationOptions(\n    onMutate: (name) async =>\n        QoraScope.of(context).getQueryData\u003CUser>(['users', userId]),\n    onError: (error, name, snapshot) async =>\n        QoraScope.of(context).restoreQueryData(['users', userId], snapshot),\n    onSuccess: (data, name, _) async {\n      QoraScope.of(context).setQueryData(['users', userId], data);\n      QoraScope.of(context).invalidateWhere((k) => k.firstOrNull == 'users');\n    },\n  ),\n  builder: (context, state, mutate) => ElevatedButton(\n    onPressed: state.isPending ? null : () => mutate(nameController.text),\n    child: state.isPending\n        ? const CircularProgressIndicator()\n        : const Text('Sauvegarder'),\n  ),\n)\n","update_name_form.dart",[374,2203,2204,2225,2252,2264,2278,2311,2334,2363,2386,2416,2450,2456,2463,2487,2527,2541,2553,2572,2578],{"__ignoreMap":372},[377,2205,2206,2208,2210,2212,2215,2218,2220,2222],{"class":379,"line":380},[377,2207,113],{"class":521},[377,2209,536],{"class":390},[377,2211,719],{"class":521},[377,2213,2214],{"class":390},", ",[377,2216,2217],{"class":521},"String",[377,2219,2214],{"class":390},[377,2221,719],{"class":521},[377,2223,2224],{"class":390},"?>(\n",[377,2226,2227,2230,2232,2235,2237,2239,2241,2243,2246,2248,2250],{"class":379,"line":387},[377,2228,2229],{"class":390},"  mutator",[377,2231,441],{"class":398},[377,2233,2234],{"class":390}," (name) ",[377,2236,552],{"class":398},[377,2238,757],{"class":390},[377,2240,734],{"class":398},[377,2242,1201],{"class":545},[377,2244,2245],{"class":390},"(userId",[377,2247,399],{"class":398},[377,2249,1332],{"class":390},[377,2251,742],{"class":398},[377,2253,2254,2257,2259,2262],{"class":379,"line":405},[377,2255,2256],{"class":390},"  options",[377,2258,441],{"class":398},[377,2260,2261],{"class":521}," MutationOptions",[377,2263,1096],{"class":390},[377,2265,2266,2269,2271,2273,2275],{"class":379,"line":425},[377,2267,2268],{"class":390},"    onMutate",[377,2270,441],{"class":398},[377,2272,2234],{"class":390},[377,2274,1220],{"class":1219},[377,2276,2277],{"class":398}," =>\n",[377,2279,2280,2283,2285,2288,2291,2293,2295,2297,2299,2302,2304,2306,2309],{"class":379,"line":461},[377,2281,2282],{"class":521},"        QoraScope",[377,2284,734],{"class":398},[377,2286,2287],{"class":545},"of",[377,2289,2290],{"class":390},"(context)",[377,2292,734],{"class":398},[377,2294,1241],{"class":545},[377,2296,536],{"class":390},[377,2298,719],{"class":521},[377,2300,2301],{"class":390},">([",[377,2303,395],{"class":394},[377,2305,399],{"class":398},[377,2307,2308],{"class":390}," userId])",[377,2310,742],{"class":398},[377,2312,2313,2316,2318,2321,2323,2325,2327,2330,2332],{"class":379,"line":468},[377,2314,2315],{"class":390},"    onError",[377,2317,441],{"class":398},[377,2319,2320],{"class":390}," (error",[377,2322,399],{"class":398},[377,2324,1298],{"class":390},[377,2326,399],{"class":398},[377,2328,2329],{"class":390}," snapshot) ",[377,2331,1220],{"class":1219},[377,2333,2277],{"class":398},[377,2335,2336,2338,2340,2342,2344,2346,2348,2351,2353,2355,2357,2359,2361],{"class":379,"line":474},[377,2337,2282],{"class":521},[377,2339,734],{"class":398},[377,2341,2287],{"class":545},[377,2343,2290],{"class":390},[377,2345,734],{"class":398},[377,2347,1357],{"class":545},[377,2349,2350],{"class":390},"([",[377,2352,395],{"class":394},[377,2354,399],{"class":398},[377,2356,1667],{"class":390},[377,2358,399],{"class":398},[377,2360,1372],{"class":390},[377,2362,742],{"class":398},[377,2364,2365,2368,2370,2373,2375,2377,2379,2382,2384],{"class":379,"line":490},[377,2366,2367],{"class":390},"    onSuccess",[377,2369,441],{"class":398},[377,2371,2372],{"class":390}," (data",[377,2374,399],{"class":398},[377,2376,1298],{"class":390},[377,2378,399],{"class":398},[377,2380,2381],{"class":390}," _) ",[377,2383,1220],{"class":1219},[377,2385,525],{"class":390},[377,2387,2388,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2414],{"class":379,"line":1117},[377,2389,2390],{"class":521},"      QoraScope",[377,2392,734],{"class":398},[377,2394,2287],{"class":545},[377,2396,2290],{"class":390},[377,2398,734],{"class":398},[377,2400,1271],{"class":545},[377,2402,2350],{"class":390},[377,2404,395],{"class":394},[377,2406,399],{"class":398},[377,2408,1667],{"class":390},[377,2410,399],{"class":398},[377,2412,2413],{"class":390}," data)",[377,2415,563],{"class":398},[377,2417,2418,2420,2422,2424,2426,2428,2430,2433,2435,2438,2440,2442,2444,2446,2448],{"class":379,"line":1139},[377,2419,2390],{"class":521},[377,2421,734],{"class":398},[377,2423,2287],{"class":545},[377,2425,2290],{"class":390},[377,2427,734],{"class":398},[377,2429,818],{"class":545},[377,2431,2432],{"class":390},"((k) ",[377,2434,552],{"class":398},[377,2436,2437],{"class":390}," k",[377,2439,734],{"class":398},[377,2441,831],{"class":390},[377,2443,834],{"class":398},[377,2445,837],{"class":394},[377,2447,840],{"class":390},[377,2449,563],{"class":398},[377,2451,2452,2454],{"class":379,"line":1174},[377,2453,1868],{"class":390},[377,2455,742],{"class":398},[377,2457,2458,2461],{"class":379,"line":1182},[377,2459,2460],{"class":390},"  )",[377,2462,742],{"class":398},[377,2464,2465,2467,2469,2471,2473,2475,2477,2480,2482,2485],{"class":379,"line":1187},[377,2466,771],{"class":390},[377,2468,441],{"class":398},[377,2470,776],{"class":390},[377,2472,399],{"class":398},[377,2474,781],{"class":390},[377,2476,399],{"class":398},[377,2478,2479],{"class":390}," mutate) ",[377,2481,552],{"class":398},[377,2483,2484],{"class":521}," ElevatedButton",[377,2486,1096],{"class":390},[377,2488,2489,2492,2494,2496,2498,2501,2504,2507,2510,2512,2514,2517,2520,2522,2525],{"class":379,"line":1225},[377,2490,2491],{"class":390},"    onPressed",[377,2493,441],{"class":398},[377,2495,781],{"class":390},[377,2497,734],{"class":398},[377,2499,2500],{"class":390},"isPending ",[377,2502,2503],{"class":398},"?",[377,2505,2506],{"class":398}," null",[377,2508,2509],{"class":398}," :",[377,2511,752],{"class":390},[377,2513,552],{"class":398},[377,2515,2516],{"class":545}," mutate",[377,2518,2519],{"class":390},"(nameController",[377,2521,734],{"class":398},[377,2523,2524],{"class":390},"text)",[377,2526,742],{"class":398},[377,2528,2529,2532,2534,2536,2538],{"class":379,"line":1263},[377,2530,2531],{"class":390},"    child",[377,2533,441],{"class":398},[377,2535,781],{"class":390},[377,2537,734],{"class":398},[377,2539,2540],{"class":390},"isPending\n",[377,2542,2543,2546,2548,2550],{"class":379,"line":1308},[377,2544,2545],{"class":398},"        ?",[377,2547,1147],{"class":514},[377,2549,1800],{"class":521},[377,2551,2552],{"class":390},"()\n",[377,2554,2555,2558,2560,2563,2565,2568,2570],{"class":379,"line":1316},[377,2556,2557],{"class":398},"        :",[377,2559,1147],{"class":514},[377,2561,2562],{"class":521}," Text",[377,2564,581],{"class":390},[377,2566,2567],{"class":394},"'Sauvegarder'",[377,2569,840],{"class":390},[377,2571,742],{"class":398},[377,2573,2574,2576],{"class":379,"line":1337},[377,2575,2460],{"class":390},[377,2577,742],{"class":398},[377,2579,2580],{"class":379,"line":1349},[377,2581,799],{"class":390},[352,2583,1891,2585,2588],{"id":2584},"utiliser-retrycount-0-sur-les-mutations",[374,2586,2587],{},"retryCount: 0"," sur les mutations",[357,2590,2591],{},"Les mutations ne sont pas idempotentes par défaut. Éviter les retries automatiques sauf si l'API est conçue pour les gérer :",[366,2593,2595],{"className":368,"code":2594,"filename":370,"language":371,"meta":372,"style":372},"MutationOptions(retryCount: 0)\n",[374,2596,2597],{"__ignoreMap":372},[377,2598,2599,2602,2605,2607,2610],{"class":379,"line":380},[377,2600,2601],{"class":521},"MutationOptions",[377,2603,2604],{"class":390},"(retryCount",[377,2606,441],{"class":398},[377,2608,2609],{"class":444}," 0",[377,2611,799],{"class":390},[844,2613],{},[348,2615,2617],{"id":2616},"performance","Performance",[352,2619,2621,2622,2624],{"id":2620},"placer-qorascope-près-de-la-racine","Placer ",[374,2623,103],{}," près de la racine",[366,2626,2628],{"className":368,"code":2627,"filename":370,"language":371,"meta":372,"style":372},"final client = QoraClient(\n  config: const QoraClientConfig(debugMode: kDebugMode),\n);\n\nrunApp(\n  QoraScope(\n    client: client,\n    lifecycleManager: FlutterLifecycleManager(qoraClient: client),\n    connectivityManager: FlutterConnectivityManager(),\n    child: const MyApp(),\n  ),\n);\n",[374,2629,2630,2643,2665,2671,2675,2682,2689,2701,2721,2735,2750,2756],{"__ignoreMap":372},[377,2631,2632,2634,2637,2639,2641],{"class":379,"line":380},[377,2633,1773],{"class":514},[377,2635,2636],{"class":390}," client ",[377,2638,1234],{"class":398},[377,2640,1009],{"class":521},[377,2642,1096],{"class":390},[377,2644,2645,2648,2650,2652,2655,2658,2660,2663],{"class":379,"line":387},[377,2646,2647],{"class":390},"  config",[377,2649,441],{"class":398},[377,2651,1147],{"class":514},[377,2653,2654],{"class":521}," QoraClientConfig",[377,2656,2657],{"class":390},"(debugMode",[377,2659,441],{"class":398},[377,2661,2662],{"class":390}," kDebugMode)",[377,2664,742],{"class":398},[377,2666,2667,2669],{"class":379,"line":405},[377,2668,840],{"class":390},[377,2670,563],{"class":398},[377,2672,2673],{"class":379,"line":425},[377,2674,465],{"emptyLinePlaceholder":464},[377,2676,2677,2680],{"class":379,"line":461},[377,2678,2679],{"class":545},"runApp",[377,2681,1096],{"class":390},[377,2683,2684,2687],{"class":379,"line":468},[377,2685,2686],{"class":521},"  QoraScope",[377,2688,1096],{"class":390},[377,2690,2691,2694,2696,2699],{"class":379,"line":474},[377,2692,2693],{"class":390},"    client",[377,2695,441],{"class":398},[377,2697,2698],{"class":390}," client",[377,2700,742],{"class":398},[377,2702,2703,2706,2708,2711,2714,2716,2719],{"class":379,"line":490},[377,2704,2705],{"class":390},"    lifecycleManager",[377,2707,441],{"class":398},[377,2709,2710],{"class":521}," FlutterLifecycleManager",[377,2712,2713],{"class":390},"(qoraClient",[377,2715,441],{"class":398},[377,2717,2718],{"class":390}," client)",[377,2720,742],{"class":398},[377,2722,2723,2726,2728,2731,2733],{"class":379,"line":1117},[377,2724,2725],{"class":390},"    connectivityManager",[377,2727,441],{"class":398},[377,2729,2730],{"class":521}," FlutterConnectivityManager",[377,2732,1803],{"class":390},[377,2734,742],{"class":398},[377,2736,2737,2739,2741,2743,2746,2748],{"class":379,"line":1139},[377,2738,2531],{"class":390},[377,2740,441],{"class":398},[377,2742,1147],{"class":514},[377,2744,2745],{"class":521}," MyApp",[377,2747,1803],{"class":390},[377,2749,742],{"class":398},[377,2751,2752,2754],{"class":379,"line":1174},[377,2753,2460],{"class":390},[377,2755,742],{"class":398},[377,2757,2758,2760],{"class":379,"line":1182},[377,2759,840],{"class":390},[377,2761,563],{"class":398},[357,2763,2764,2766,2767,2770,2771,2773],{},[374,2765,103],{}," dispose automatiquement le client, le lifecycle manager et le connectivity manager au démontage : ne pas appeler ",[374,2768,2769],{},"client.dispose()"," manuellement quand ",[374,2772,103],{}," est utilisé.",[352,2775,2777],{"id":2776},"un-seul-client-par-application","Un seul client par application",[357,2779,2780,2781,2783,2784,2786,2787,2789],{},"Créer ",[374,2782,202],{}," (ou ",[374,2785,229],{},") une seule fois au démarrage et le réutiliser partout via ",[374,2788,103],{},". Plusieurs instances ne partagent pas de cache.",[352,2791,2793],{"id":2792},"disposer-les-clients-dans-les-tests","Disposer les clients dans les tests",[357,2795,2796,2797,2799,2800,2802,2803,2509],{},"Dans les tests qui instancient un client directement (sans ",[374,2798,103],{},"), appeler ",[374,2801,2769],{}," dans ",[374,2804,2805],{},"tearDown",[366,2807,2810],{"className":368,"code":2808,"filename":2809,"language":371,"meta":372,"style":372},"late QoraClient client;\n\nsetUp(() => client = QoraClient());\ntearDown(() => client.dispose());\n","test/user_test.dart",[374,2811,2812,2823,2827,2847],{"__ignoreMap":372},[377,2813,2814,2817,2819,2821],{"class":379,"line":380},[377,2815,2816],{"class":514},"late",[377,2818,1009],{"class":521},[377,2820,2698],{"class":390},[377,2822,563],{"class":398},[377,2824,2825],{"class":379,"line":387},[377,2826,465],{"emptyLinePlaceholder":464},[377,2828,2829,2832,2834,2836,2838,2840,2842,2845],{"class":379,"line":405},[377,2830,2831],{"class":545},"setUp",[377,2833,2057],{"class":390},[377,2835,552],{"class":398},[377,2837,2636],{"class":390},[377,2839,1234],{"class":398},[377,2841,1009],{"class":521},[377,2843,2844],{"class":390},"())",[377,2846,563],{"class":398},[377,2848,2849,2851,2853,2855,2857,2859,2862,2864],{"class":379,"line":425},[377,2850,2805],{"class":545},[377,2852,2057],{"class":390},[377,2854,552],{"class":398},[377,2856,2698],{"class":390},[377,2858,734],{"class":398},[377,2860,2861],{"class":545},"dispose",[377,2863,2844],{"class":390},[377,2865,563],{"class":398},[844,2867],{},[348,2869,153],{"id":2870},"persistance",[352,2872,2874,2875],{"id":2873},"enregistrer-les-sérialiseurs-avant-hydrate","Enregistrer les sérialiseurs avant ",[374,2876,2877],{},"hydrate()",[366,2879,2881],{"className":368,"code":2880,"filename":370,"language":371,"meta":372,"style":372},"final client = PersistQoraClient(storage: storage);\n\nclient.registerSerializer\u003CUser>(\n  QoraSerializer(toJson: (u) => u.toJson(), fromJson: User.fromJson),\n  name: 'User', // nom stable : sûr avec --obfuscate\n);\n\nawait client.hydrate();\nrunApp(...);\n",[374,2882,2883,2904,2908,2923,2964,2979,2985,2989,3005],{"__ignoreMap":372},[377,2884,2885,2887,2889,2891,2894,2897,2899,2902],{"class":379,"line":380},[377,2886,1773],{"class":514},[377,2888,2636],{"class":390},[377,2890,1234],{"class":398},[377,2892,2893],{"class":521}," PersistQoraClient",[377,2895,2896],{"class":390},"(storage",[377,2898,441],{"class":398},[377,2900,2901],{"class":390}," storage)",[377,2903,563],{"class":398},[377,2905,2906],{"class":379,"line":387},[377,2907,465],{"emptyLinePlaceholder":464},[377,2909,2910,2912,2914,2917,2919,2921],{"class":379,"line":405},[377,2911,813],{"class":390},[377,2913,734],{"class":398},[377,2915,2916],{"class":545},"registerSerializer",[377,2918,536],{"class":390},[377,2920,719],{"class":521},[377,2922,722],{"class":390},[377,2924,2925,2928,2931,2933,2936,2938,2941,2943,2946,2948,2950,2953,2955,2957,2959,2962],{"class":379,"line":425},[377,2926,2927],{"class":521},"  QoraSerializer",[377,2929,2930],{"class":390},"(toJson",[377,2932,441],{"class":398},[377,2934,2935],{"class":390}," (u) ",[377,2937,552],{"class":398},[377,2939,2940],{"class":390}," u",[377,2942,734],{"class":398},[377,2944,2945],{"class":545},"toJson",[377,2947,1803],{"class":390},[377,2949,399],{"class":398},[377,2951,2952],{"class":390}," fromJson",[377,2954,441],{"class":398},[377,2956,1286],{"class":521},[377,2958,734],{"class":398},[377,2960,2961],{"class":390},"fromJson)",[377,2963,742],{"class":398},[377,2965,2966,2969,2971,2974,2976],{"class":379,"line":461},[377,2967,2968],{"class":390},"  name",[377,2970,441],{"class":398},[377,2972,2973],{"class":394}," 'User'",[377,2975,399],{"class":398},[377,2977,2978],{"class":383}," // nom stable : sûr avec --obfuscate\n",[377,2980,2981,2983],{"class":379,"line":468},[377,2982,840],{"class":390},[377,2984,563],{"class":398},[377,2986,2987],{"class":379,"line":474},[377,2988,465],{"emptyLinePlaceholder":464},[377,2990,2991,2994,2996,2998,3001,3003],{"class":379,"line":490},[377,2992,2993],{"class":1219},"await",[377,2995,2698],{"class":390},[377,2997,734],{"class":398},[377,2999,3000],{"class":545},"hydrate",[377,3002,1803],{"class":390},[377,3004,563],{"class":398},[377,3006,3007,3009,3011,3013,3015],{"class":379,"line":1117},[377,3008,2679],{"class":545},[377,3010,581],{"class":390},[377,3012,789],{"class":398},[377,3014,840],{"class":390},[377,3016,563],{"class":398},[352,3018,3020,3021,3024],{"id":3019},"toujours-passer-un-name-explicite","Toujours passer un ",[374,3022,3023],{},"name"," explicite",[357,3026,3027,3030,3031,3034,3035,3037],{},[374,3028,3029],{},"T.toString()"," est altéré par ",[374,3032,3033],{},"--obfuscate"," et la minification sur Flutter Web. Un ",[374,3036,3023],{}," stable survit aux mises en production :",[366,3039,3041],{"className":368,"code":3040,"filename":370,"language":371,"meta":372,"style":372},"client.registerSerializer\u003CList\u003CPost>>(serializer, name: 'List\u003CPost>');\n",[374,3042,3043],{"__ignoreMap":372},[377,3044,3045,3047,3049,3051,3053,3056,3058,3061,3064,3066,3068,3070,3073,3075],{"class":379,"line":380},[377,3046,813],{"class":390},[377,3048,734],{"class":398},[377,3050,2916],{"class":545},[377,3052,536],{"class":390},[377,3054,3055],{"class":521},"List",[377,3057,536],{"class":390},[377,3059,3060],{"class":521},"Post",[377,3062,3063],{"class":390},">>(serializer",[377,3065,399],{"class":398},[377,3067,1298],{"class":390},[377,3069,441],{"class":398},[377,3071,3072],{"class":394}," 'List\u003CPost>'",[377,3074,840],{"class":390},[377,3076,563],{"class":398},[844,3078],{},[348,3080,3082],{"id":3081},"voir-aussi","Voir aussi",[3084,3085,3086,3093,3098,3104],"ul",{},[3087,3088,3089],"li",{},[3090,3091,108],"a",{"href":3092},"./qora-builder",[3087,3094,3095],{},[3090,3096,103],{"href":3097},"./qora-scope",[3087,3099,3100],{},[3090,3101,3103],{"href":3102},"../recipes/persistence","Guide de persistance",[3087,3105,3106],{},[3090,3107,3109],{"href":3108},"../recipes/error-handling","Guide de gestion des erreurs",[3111,3112,3113],"style",{},"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}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}",{"title":372,"searchDepth":387,"depth":387,"links":3115},[3116,3120,3121,3124,3126,3128,3134,3140,3146,3152],{"id":350,"depth":387,"text":57,"children":3117},[3118,3119],{"id":354,"depth":405,"text":355},{"id":496,"depth":405,"text":497},{"id":848,"depth":387,"text":849},{"id":980,"depth":387,"text":981,"children":3122},[3123],{"id":984,"depth":405,"text":985},{"id":1497,"depth":387,"text":3125},"Recommandations pour staleTime",{"id":1623,"depth":387,"text":3127},"FetchStatus : conscience du réseau",{"id":1886,"depth":387,"text":1887,"children":3129},[3130,3132],{"id":1890,"depth":405,"text":3131},"Utiliser QoraStateBuilder pour l'UI dérivée",{"id":2017,"depth":405,"text":3133},"Utiliser QoraPrefetch avant la navigation",{"id":2191,"depth":387,"text":144,"children":3135},[3136,3138],{"id":2194,"depth":405,"text":3137},"Widget correct : QoraMutationBuilder",{"id":2584,"depth":405,"text":3139},"Utiliser retryCount: 0 sur les mutations",{"id":2616,"depth":387,"text":2617,"children":3141},[3142,3144,3145],{"id":2620,"depth":405,"text":3143},"Placer QoraScope près de la racine",{"id":2776,"depth":405,"text":2777},{"id":2792,"depth":405,"text":2793},{"id":2870,"depth":387,"text":153,"children":3147},[3148,3150],{"id":2873,"depth":405,"text":3149},"Enregistrer les sérialiseurs avant hydrate()",{"id":3019,"depth":405,"text":3151},"Toujours passer un name explicite",{"id":3081,"depth":387,"text":3082},"Patterns et conventions pour construire des applications Flutter fiables avec Qora : clés, placement des requêtes, câblage des mutations et performance.","md",null,{},{"icon":136},{"title":133,"description":3153},"9nfhfTZk4u2XCfOoWShi6UxiQzLtWtn7qPuIW5MKXqQ",[3161,3163],{"title":128,"path":129,"stem":130,"description":3162,"icon":131,"children":-1},"NetworkStatusBuilder et NetworkStatusIndicator : widgets réactifs pour afficher l'état hors-ligne dans les applications Flutter.",{"title":144,"path":145,"stem":146,"description":3164,"icon":85,"children":-1},"Effectuer des opérations d'écriture (POST, PUT, DELETE) avec un support complet du cycle de vie : mises à jour optimistes, rollback automatique, retry et observabilité DevTools.",1794040408435]