[{"data":1,"prerenderedAt":3857},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-api-reference-qora-client":342,"-fr-api-reference-qora-client-surround":3852},[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":202,"body":344,"description":3845,"extension":3846,"links":3847,"meta":3848,"navigation":3849,"path":203,"seo":3850,"stem":204,"__hash__":3851},"docs_fr/fr/05.api-reference/1.qora-client.md",{"type":345,"value":346,"toc":3801},"minimark",[347,352,384,388,563,566,570,576,590,593,599,629,632,683,685,689,695,785,788,794,838,849,962,967,1004,1006,1012,1092,1099,1104,1126,1131,1139,1447,1449,1454,1530,1533,1605,1607,1611,1617,1644,1669,1704,1706,1712,1739,1750,1838,1840,1844,1850,1880,1890,1920,1922,1928,1959,1968,2098,2100,2104,2109,2127,2137,2177,2179,2185,2216,2222,2338,2340,2346,2365,2372,2428,2438,2440,2446,2469,2479,2541,2754,2756,2762,2786,2793,2830,2909,2921,2923,2927,2933,2951,2957,2997,2999,3005,3020,3031,3033,3038,3052,3064,3086,3088,3092,3098,3137,3151,3161,3299,3301,3307,3345,3358,3360,3364,3370,3395,3398,3460,3462,3466,3472,3492,3509,3511,3516,3530,3537,3559,3561,3565,3797],[348,349,351],"h2",{"id":350},"constructeur","Constructeur",[353,354,360],"pre",{"className":355,"code":356,"filename":357,"language":358,"meta":359,"style":359},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","QoraClient({QoraClientConfig? config})\n","main.dart","dart","",[361,362,363],"code",{"__ignoreMap":359},[364,365,368,371,375,377,381],"span",{"class":366,"line":367},"line",1,[364,369,202],{"class":370},"sBMFI",[364,372,374],{"class":373},"sTEyZ","({",[364,376,220],{"class":370},[364,378,380],{"class":379},"sMK4o","?",[364,382,383],{"class":373}," config})\n",[385,386,387],"p",{},"Crée une nouvelle instance de client. Toutes les requêtes partagent le même cache et la même map de déduplication.",[353,389,391],{"className":355,"code":390,"filename":357,"language":358,"meta":359,"style":359},"// Minimal (tous les défauts)\nfinal client = QoraClient();\n\n// Avec configuration complète\nfinal client = QoraClient(\n  config: QoraClientConfig(\n    defaultOptions: QoraOptions(\n      staleTime: Duration(minutes: 5),\n      retryCount: 2,\n    ),\n    debugMode: kDebugMode,\n    maxCacheSize: 200,\n  ),\n);\n",[361,392,393,399,421,428,434,448,462,475,501,514,522,535,548,556],{"__ignoreMap":359},[364,394,395],{"class":366,"line":367},[364,396,398],{"class":397},"sHwdD","// Minimal (tous les défauts)\n",[364,400,402,406,409,412,415,418],{"class":366,"line":401},2,[364,403,405],{"class":404},"spNyl","final",[364,407,408],{"class":373}," client ",[364,410,411],{"class":379},"=",[364,413,414],{"class":370}," QoraClient",[364,416,417],{"class":373},"()",[364,419,420],{"class":379},";\n",[364,422,424],{"class":366,"line":423},3,[364,425,427],{"emptyLinePlaceholder":426},true,"\n",[364,429,431],{"class":366,"line":430},4,[364,432,433],{"class":397},"// Avec configuration complète\n",[364,435,437,439,441,443,445],{"class":366,"line":436},5,[364,438,405],{"class":404},[364,440,408],{"class":373},[364,442,411],{"class":379},[364,444,414],{"class":370},[364,446,447],{"class":373},"(\n",[364,449,451,454,457,460],{"class":366,"line":450},6,[364,452,453],{"class":373},"  config",[364,455,456],{"class":379},":",[364,458,459],{"class":370}," QoraClientConfig",[364,461,447],{"class":373},[364,463,465,468,470,473],{"class":366,"line":464},7,[364,466,467],{"class":373},"    defaultOptions",[364,469,456],{"class":379},[364,471,472],{"class":370}," QoraOptions",[364,474,447],{"class":373},[364,476,478,481,483,486,489,491,495,498],{"class":366,"line":477},8,[364,479,480],{"class":373},"      staleTime",[364,482,456],{"class":379},[364,484,485],{"class":370}," Duration",[364,487,488],{"class":373},"(minutes",[364,490,456],{"class":379},[364,492,494],{"class":493},"sbssI"," 5",[364,496,497],{"class":373},")",[364,499,500],{"class":379},",\n",[364,502,504,507,509,512],{"class":366,"line":503},9,[364,505,506],{"class":373},"      retryCount",[364,508,456],{"class":379},[364,510,511],{"class":493}," 2",[364,513,500],{"class":379},[364,515,517,520],{"class":366,"line":516},10,[364,518,519],{"class":373},"    )",[364,521,500],{"class":379},[364,523,525,528,530,533],{"class":366,"line":524},11,[364,526,527],{"class":373},"    debugMode",[364,529,456],{"class":379},[364,531,532],{"class":373}," kDebugMode",[364,534,500],{"class":379},[364,536,538,541,543,546],{"class":366,"line":537},12,[364,539,540],{"class":373},"    maxCacheSize",[364,542,456],{"class":379},[364,544,545],{"class":493}," 200",[364,547,500],{"class":379},[364,549,551,554],{"class":366,"line":550},13,[364,552,553],{"class":373},"  )",[364,555,500],{"class":379},[364,557,559,561],{"class":366,"line":558},14,[364,560,497],{"class":373},[364,562,420],{"class":379},[564,565],"hr",{},[348,567,569],{"id":568},"propriétés","Propriétés",[571,572,574],"h3",{"id":573},"config",[361,575,573],{},[353,577,579],{"className":355,"code":578,"language":358,"meta":359,"style":359},"final QoraClientConfig config\n",[361,580,581],{"__ignoreMap":359},[364,582,583,585,587],{"class":366,"line":367},[364,584,405],{"class":404},[364,586,459],{"class":370},[364,588,589],{"class":373}," config\n",[385,591,592],{},"La configuration résolue pour cette instance de client. Lecture seule.",[571,594,596],{"id":595},"cachedkeys",[361,597,598],{},"cachedKeys",[353,600,602],{"className":355,"code":601,"language":358,"meta":359,"style":359},"Iterable\u003CList\u003Cdynamic>> get cachedKeys\n",[361,603,604],{"__ignoreMap":359},[364,605,606,609,612,615,617,620,623,626],{"class":366,"line":367},[364,607,608],{"class":370},"Iterable",[364,610,611],{"class":373},"\u003C",[364,613,614],{"class":370},"List",[364,616,611],{"class":373},[364,618,619],{"class":370},"dynamic",[364,621,622],{"class":373},">> ",[364,624,625],{"class":379},"get",[364,627,628],{"class":373}," cachedKeys\n",[385,630,631],{},"Toutes les clés de requête actuellement en cache (normalisées). Utile pour le débogage ou l'invalidation en masse.",[353,633,635],{"className":355,"code":634,"filename":357,"language":358,"meta":359,"style":359},"for (final key in client.cachedKeys) {\n  print(key); // [users, 1], [posts], ...\n}\n",[361,636,637,663,678],{"__ignoreMap":359},[364,638,639,643,646,648,651,654,657,660],{"class":366,"line":367},[364,640,642],{"class":641},"s7zQu","for",[364,644,645],{"class":373}," (",[364,647,405],{"class":404},[364,649,650],{"class":373}," key ",[364,652,653],{"class":641},"in",[364,655,656],{"class":373}," client",[364,658,659],{"class":379},".",[364,661,662],{"class":373},"cachedKeys) {\n",[364,664,665,669,672,675],{"class":366,"line":401},[364,666,668],{"class":667},"s2Zo4","  print",[364,670,671],{"class":373},"(key)",[364,673,674],{"class":379},";",[364,676,677],{"class":397}," // [users, 1], [posts], ...\n",[364,679,680],{"class":366,"line":423},[364,681,682],{"class":373},"}\n",[564,684],{},[348,686,688],{"id":687},"récupération","Récupération",[571,690,692],{"id":691},"fetchquery",[361,693,694],{},"fetchQuery",[353,696,698],{"className":355,"code":697,"language":358,"meta":359,"style":359},"Future\u003CT> fetchQuery\u003CT>({\n  required Object key,\n  required Future\u003CT> Function() fetcher,\n  QoraOptions? options,\n  CancelToken? cancelToken,\n})\n",[361,699,700,722,735,756,768,780],{"__ignoreMap":359},[364,701,702,705,707,710,713,715,717,719],{"class":366,"line":367},[364,703,704],{"class":370},"Future",[364,706,611],{"class":373},[364,708,709],{"class":370},"T",[364,711,712],{"class":373},"> ",[364,714,694],{"class":667},[364,716,611],{"class":373},[364,718,709],{"class":370},[364,720,721],{"class":373},">({\n",[364,723,724,727,730,733],{"class":366,"line":401},[364,725,726],{"class":404},"  required",[364,728,729],{"class":370}," Object",[364,731,732],{"class":373}," key",[364,734,500],{"class":379},[364,736,737,739,742,744,746,748,751,754],{"class":366,"line":423},[364,738,726],{"class":404},[364,740,741],{"class":370}," Future",[364,743,611],{"class":373},[364,745,709],{"class":370},[364,747,712],{"class":373},[364,749,750],{"class":370},"Function",[364,752,753],{"class":373},"() fetcher",[364,755,500],{"class":379},[364,757,758,761,763,766],{"class":366,"line":430},[364,759,760],{"class":370},"  QoraOptions",[364,762,380],{"class":379},[364,764,765],{"class":373}," options",[364,767,500],{"class":379},[364,769,770,773,775,778],{"class":366,"line":436},[364,771,772],{"class":370},"  CancelToken",[364,774,380],{"class":379},[364,776,777],{"class":373}," cancelToken",[364,779,500],{"class":379},[364,781,782],{"class":366,"line":450},[364,783,784],{"class":373},"})\n",[385,786,787],{},"Récupère les données une seule fois et retourne le résultat.",[385,789,790],{},[791,792,793],"strong",{},"Comportement du cache :",[795,796,797,810],"table",{},[798,799,800],"thead",{},[801,802,803,807],"tr",{},[804,805,806],"th",{},"État du cache",[804,808,809],{},"Action",[811,812,813,822,830],"tbody",{},[801,814,815,819],{},[816,817,818],"td",{},"Frais (non périmé)",[816,820,821],{},"Retourne les données en cache : pas d'appel réseau",[801,823,824,827],{},[816,825,826],{},"Périmé",[816,828,829],{},"Retourne les données périmées immédiatement ; revalide en arrière-plan",[801,831,832,835],{},[816,833,834],{},"Absent",[816,836,837],{},"Fetch, attend et retourne le résultat",[385,839,840,841,844,845,848],{},"Les appels concurrents avec la même clé sont ",[791,842,843],{},"dédupliqués"," : tous partagent une seule requête en cours. Les fetches échoués sont relancés avec backoff exponentiel jusqu'à ",[361,846,847],{},"retryCount"," fois.",[353,850,853],{"className":355,"code":851,"filename":852,"language":358,"meta":359,"style":359},"final user = await client.fetchQuery\u003CUser>(\n  key: ['users', userId],\n  fetcher: () => api.getUser(userId),\n  options: QoraOptions(staleTime: Duration(minutes: 5)),\n);\n","user_repository.dart",[361,854,855,881,903,929,956],{"__ignoreMap":359},[364,856,857,859,862,864,867,869,871,873,875,878],{"class":366,"line":367},[364,858,405],{"class":404},[364,860,861],{"class":373}," user ",[364,863,411],{"class":379},[364,865,866],{"class":641}," await",[364,868,656],{"class":373},[364,870,659],{"class":379},[364,872,694],{"class":667},[364,874,611],{"class":373},[364,876,877],{"class":370},"User",[364,879,880],{"class":373},">(\n",[364,882,883,886,888,891,895,898,901],{"class":366,"line":401},[364,884,885],{"class":373},"  key",[364,887,456],{"class":379},[364,889,890],{"class":373}," [",[364,892,894],{"class":893},"sfazB","'users'",[364,896,897],{"class":379},",",[364,899,900],{"class":373}," userId]",[364,902,500],{"class":379},[364,904,905,908,910,913,916,919,921,924,927],{"class":366,"line":423},[364,906,907],{"class":373},"  fetcher",[364,909,456],{"class":379},[364,911,912],{"class":373}," () ",[364,914,915],{"class":379},"=>",[364,917,918],{"class":373}," api",[364,920,659],{"class":379},[364,922,923],{"class":667},"getUser",[364,925,926],{"class":373},"(userId)",[364,928,500],{"class":379},[364,930,931,934,936,938,941,943,945,947,949,951,954],{"class":366,"line":430},[364,932,933],{"class":373},"  options",[364,935,456],{"class":379},[364,937,472],{"class":370},[364,939,940],{"class":373},"(staleTime",[364,942,456],{"class":379},[364,944,485],{"class":370},[364,946,488],{"class":373},[364,948,456],{"class":379},[364,950,494],{"class":493},[364,952,953],{"class":373},"))",[364,955,500],{"class":379},[364,957,958,960],{"class":366,"line":436},[364,959,497],{"class":373},[364,961,420],{"class":379},[385,963,964],{},[791,965,966],{},"Lève :",[968,969,970,984,992,1001],"ul",{},[971,972,973,976,977,980,981],"li",{},[361,974,975],{},"StateError"," si ",[361,978,979],{},"QoraOptions.enabled"," est ",[361,982,983],{},"false",[971,985,986,976,988,991],{},[361,987,975],{},[361,989,990],{},"QoraOptions.dependsOn"," est défini et que la dépendance n'a pas encore de données",[971,993,994,976,997,1000],{},[361,995,996],{},"QoraCancelException",[361,998,999],{},"cancelToken"," est annulé avant ou pendant le fetch",[971,1002,1003],{},"L'exception du fetcher (après tous les retries) en cas d'échec",[564,1005],{},[571,1007,1009],{"id":1008},"watchquery",[361,1010,1011],{},"watchQuery",[353,1013,1015],{"className":355,"code":1014,"language":358,"meta":359,"style":359},"Stream\u003CQoraState\u003CT>> watchQuery\u003CT>({\n  required Object key,\n  required Future\u003CT> Function() fetcher,\n  QoraOptions? options,\n  CancelToken? cancelToken,\n})\n",[361,1016,1017,1040,1050,1068,1078,1088],{"__ignoreMap":359},[364,1018,1019,1022,1024,1026,1028,1030,1032,1034,1036,1038],{"class":366,"line":367},[364,1020,1021],{"class":370},"Stream",[364,1023,611],{"class":373},[364,1025,211],{"class":370},[364,1027,611],{"class":373},[364,1029,709],{"class":370},[364,1031,622],{"class":373},[364,1033,1011],{"class":667},[364,1035,611],{"class":373},[364,1037,709],{"class":370},[364,1039,721],{"class":373},[364,1041,1042,1044,1046,1048],{"class":366,"line":401},[364,1043,726],{"class":404},[364,1045,729],{"class":370},[364,1047,732],{"class":373},[364,1049,500],{"class":379},[364,1051,1052,1054,1056,1058,1060,1062,1064,1066],{"class":366,"line":423},[364,1053,726],{"class":404},[364,1055,741],{"class":370},[364,1057,611],{"class":373},[364,1059,709],{"class":370},[364,1061,712],{"class":373},[364,1063,750],{"class":370},[364,1065,753],{"class":373},[364,1067,500],{"class":379},[364,1069,1070,1072,1074,1076],{"class":366,"line":430},[364,1071,760],{"class":370},[364,1073,380],{"class":379},[364,1075,765],{"class":373},[364,1077,500],{"class":379},[364,1079,1080,1082,1084,1086],{"class":366,"line":436},[364,1081,772],{"class":370},[364,1083,380],{"class":379},[364,1085,777],{"class":373},[364,1087,500],{"class":379},[364,1089,1090],{"class":366,"line":450},[364,1091,784],{"class":373},[385,1093,1094,1095,1098],{},"Crée un ",[361,1096,1097],{},"Stream\u003CQoraState\u003CT>>"," réactif pour une requête.",[385,1100,1101],{},[791,1102,1103],{},"À l'abonnement :",[1105,1106,1107,1110,1116,1123],"ol",{},[971,1108,1109],{},"Émet immédiatement l'état en cache actuel",[971,1111,1112,1113,497],{},"Déclenche un fetch si les données sont absentes ou périmées (selon ",[361,1114,1115],{},"refetchOnMount",[971,1117,1118,1119,1122],{},"Configure un timer de polling si ",[361,1120,1121],{},"refetchInterval"," est défini",[971,1124,1125],{},"Pousse tous les futurs changements d'état : depuis n'importe quelle source",[385,1127,1128],{},[791,1129,1130],{},"À l'annulation (dernier abonné) :",[968,1132,1133,1136],{},[971,1134,1135],{},"Annule le timer de polling",[971,1137,1138],{},"Planifie un timer GC pour l'entrée de cache",[353,1140,1143],{"className":355,"code":1141,"filename":1142,"language":358,"meta":359,"style":359},"StreamBuilder\u003CQoraState\u003CUser>>(\n  stream: client.watchQuery\u003CUser>(\n    key: ['users', userId],\n    fetcher: () => api.getUser(userId),\n    options: QoraOptions(refetchInterval: Duration(seconds: 30)),\n  ),\n  builder: (context, snapshot) {\n    return switch (snapshot.data) {\n      null || Initial()             => const SizedBox.shrink(),\n      Loading(:final previousData)  => previousData != null\n          ? UserCard(previousData)\n          : const CircularProgressIndicator(),\n      Success(:final data)          => UserCard(data),\n      Failure(:final error)         => ErrorWidget('$error'),\n    };\n  },\n)\n","user_page.dart",[361,1144,1145,1161,1180,1197,1218,1246,1252,1267,1283,1314,1340,1351,1365,1388,1425,1433,1441],{"__ignoreMap":359},[364,1146,1147,1150,1152,1154,1156,1158],{"class":366,"line":367},[364,1148,1149],{"class":370},"StreamBuilder",[364,1151,611],{"class":373},[364,1153,211],{"class":370},[364,1155,611],{"class":373},[364,1157,877],{"class":370},[364,1159,1160],{"class":373},">>(\n",[364,1162,1163,1166,1168,1170,1172,1174,1176,1178],{"class":366,"line":401},[364,1164,1165],{"class":373},"  stream",[364,1167,456],{"class":379},[364,1169,656],{"class":373},[364,1171,659],{"class":379},[364,1173,1011],{"class":667},[364,1175,611],{"class":373},[364,1177,877],{"class":370},[364,1179,880],{"class":373},[364,1181,1182,1185,1187,1189,1191,1193,1195],{"class":366,"line":423},[364,1183,1184],{"class":373},"    key",[364,1186,456],{"class":379},[364,1188,890],{"class":373},[364,1190,894],{"class":893},[364,1192,897],{"class":379},[364,1194,900],{"class":373},[364,1196,500],{"class":379},[364,1198,1199,1202,1204,1206,1208,1210,1212,1214,1216],{"class":366,"line":430},[364,1200,1201],{"class":373},"    fetcher",[364,1203,456],{"class":379},[364,1205,912],{"class":373},[364,1207,915],{"class":379},[364,1209,918],{"class":373},[364,1211,659],{"class":379},[364,1213,923],{"class":667},[364,1215,926],{"class":373},[364,1217,500],{"class":379},[364,1219,1220,1223,1225,1227,1230,1232,1234,1237,1239,1242,1244],{"class":366,"line":436},[364,1221,1222],{"class":373},"    options",[364,1224,456],{"class":379},[364,1226,472],{"class":370},[364,1228,1229],{"class":373},"(refetchInterval",[364,1231,456],{"class":379},[364,1233,485],{"class":370},[364,1235,1236],{"class":373},"(seconds",[364,1238,456],{"class":379},[364,1240,1241],{"class":493}," 30",[364,1243,953],{"class":373},[364,1245,500],{"class":379},[364,1247,1248,1250],{"class":366,"line":450},[364,1249,553],{"class":373},[364,1251,500],{"class":379},[364,1253,1254,1257,1259,1262,1264],{"class":366,"line":464},[364,1255,1256],{"class":373},"  builder",[364,1258,456],{"class":379},[364,1260,1261],{"class":373}," (context",[364,1263,897],{"class":379},[364,1265,1266],{"class":373}," snapshot) {\n",[364,1268,1269,1272,1275,1278,1280],{"class":366,"line":477},[364,1270,1271],{"class":641},"    return",[364,1273,1274],{"class":641}," switch",[364,1276,1277],{"class":373}," (snapshot",[364,1279,659],{"class":379},[364,1281,1282],{"class":373},"data) {\n",[364,1284,1285,1288,1291,1294,1297,1299,1302,1305,1307,1310,1312],{"class":366,"line":503},[364,1286,1287],{"class":379},"      null",[364,1289,1290],{"class":379}," ||",[364,1292,1293],{"class":370}," Initial",[364,1295,1296],{"class":373},"()             ",[364,1298,915],{"class":379},[364,1300,1301],{"class":404}," const",[364,1303,1304],{"class":370}," SizedBox",[364,1306,659],{"class":379},[364,1308,1309],{"class":667},"shrink",[364,1311,417],{"class":373},[364,1313,500],{"class":379},[364,1315,1316,1319,1322,1324,1326,1329,1331,1334,1337],{"class":366,"line":516},[364,1317,1318],{"class":370},"      Loading",[364,1320,1321],{"class":373},"(",[364,1323,456],{"class":379},[364,1325,405],{"class":404},[364,1327,1328],{"class":373}," previousData)  ",[364,1330,915],{"class":379},[364,1332,1333],{"class":373}," previousData ",[364,1335,1336],{"class":379},"!=",[364,1338,1339],{"class":379}," null\n",[364,1341,1342,1345,1348],{"class":366,"line":524},[364,1343,1344],{"class":379},"          ?",[364,1346,1347],{"class":370}," UserCard",[364,1349,1350],{"class":373},"(previousData)\n",[364,1352,1353,1356,1358,1361,1363],{"class":366,"line":537},[364,1354,1355],{"class":379},"          :",[364,1357,1301],{"class":404},[364,1359,1360],{"class":370}," CircularProgressIndicator",[364,1362,417],{"class":373},[364,1364,500],{"class":379},[364,1366,1367,1370,1372,1374,1376,1379,1381,1383,1386],{"class":366,"line":550},[364,1368,1369],{"class":370},"      Success",[364,1371,1321],{"class":373},[364,1373,456],{"class":379},[364,1375,405],{"class":404},[364,1377,1378],{"class":373}," data)          ",[364,1380,915],{"class":379},[364,1382,1347],{"class":370},[364,1384,1385],{"class":373},"(data)",[364,1387,500],{"class":379},[364,1389,1390,1393,1395,1397,1399,1402,1404,1407,1409,1412,1415,1419,1421,1423],{"class":366,"line":558},[364,1391,1392],{"class":370},"      Failure",[364,1394,1321],{"class":373},[364,1396,456],{"class":379},[364,1398,405],{"class":404},[364,1400,1401],{"class":373}," error)         ",[364,1403,915],{"class":379},[364,1405,1406],{"class":370}," ErrorWidget",[364,1408,1321],{"class":373},[364,1410,1411],{"class":893},"'",[364,1413,1414],{"class":373},"$",[364,1416,1418],{"class":1417},"sHdIc","error",[364,1420,1411],{"class":893},[364,1422,497],{"class":373},[364,1424,500],{"class":379},[364,1426,1428,1431],{"class":366,"line":1427},15,[364,1429,1430],{"class":373},"    }",[364,1432,420],{"class":379},[364,1434,1436,1439],{"class":366,"line":1435},16,[364,1437,1438],{"class":373},"  }",[364,1440,500],{"class":379},[364,1442,1444],{"class":366,"line":1443},17,[364,1445,1446],{"class":373},")\n",[564,1448],{},[571,1450,1452],{"id":1451},"prefetch",[361,1453,1451],{},[353,1455,1457],{"className":355,"code":1456,"language":358,"meta":359,"style":359},"Future\u003Cvoid> prefetch\u003CT>({\n  required Object key,\n  required Future\u003CT> Function() fetcher,\n  QoraOptions? options,\n  CancelToken? cancelToken,\n})\n",[361,1458,1459,1478,1488,1506,1516,1526],{"__ignoreMap":359},[364,1460,1461,1463,1465,1468,1470,1472,1474,1476],{"class":366,"line":367},[364,1462,704],{"class":370},[364,1464,611],{"class":373},[364,1466,1467],{"class":404},"void",[364,1469,712],{"class":373},[364,1471,1451],{"class":667},[364,1473,611],{"class":373},[364,1475,709],{"class":370},[364,1477,721],{"class":373},[364,1479,1480,1482,1484,1486],{"class":366,"line":401},[364,1481,726],{"class":404},[364,1483,729],{"class":370},[364,1485,732],{"class":373},[364,1487,500],{"class":379},[364,1489,1490,1492,1494,1496,1498,1500,1502,1504],{"class":366,"line":423},[364,1491,726],{"class":404},[364,1493,741],{"class":370},[364,1495,611],{"class":373},[364,1497,709],{"class":370},[364,1499,712],{"class":373},[364,1501,750],{"class":370},[364,1503,753],{"class":373},[364,1505,500],{"class":379},[364,1507,1508,1510,1512,1514],{"class":366,"line":430},[364,1509,760],{"class":370},[364,1511,380],{"class":379},[364,1513,765],{"class":373},[364,1515,500],{"class":379},[364,1517,1518,1520,1522,1524],{"class":366,"line":436},[364,1519,772],{"class":370},[364,1521,380],{"class":379},[364,1523,777],{"class":373},[364,1525,500],{"class":379},[364,1527,1528],{"class":366,"line":450},[364,1529,784],{"class":373},[385,1531,1532],{},"Pré-chauffe le cache sans créer de stream. Sans effet si les données sont déjà fraîches.",[353,1534,1537],{"className":355,"code":1535,"filename":1536,"language":358,"meta":359,"style":359},"onEnter: (_) => client.prefetch\u003CUser>(\n  key: ['users', userId],\n  fetcher: () => api.getUser(userId),\n),\n","user_list_page.dart",[361,1538,1539,1563,1579,1599],{"__ignoreMap":359},[364,1540,1541,1544,1546,1549,1551,1553,1555,1557,1559,1561],{"class":366,"line":367},[364,1542,1543],{"class":373},"onEnter",[364,1545,456],{"class":379},[364,1547,1548],{"class":373}," (_) ",[364,1550,915],{"class":379},[364,1552,656],{"class":373},[364,1554,659],{"class":379},[364,1556,1451],{"class":667},[364,1558,611],{"class":373},[364,1560,877],{"class":370},[364,1562,880],{"class":373},[364,1564,1565,1567,1569,1571,1573,1575,1577],{"class":366,"line":401},[364,1566,885],{"class":373},[364,1568,456],{"class":379},[364,1570,890],{"class":373},[364,1572,894],{"class":893},[364,1574,897],{"class":379},[364,1576,900],{"class":373},[364,1578,500],{"class":379},[364,1580,1581,1583,1585,1587,1589,1591,1593,1595,1597],{"class":366,"line":423},[364,1582,907],{"class":373},[364,1584,456],{"class":379},[364,1586,912],{"class":373},[364,1588,915],{"class":379},[364,1590,918],{"class":373},[364,1592,659],{"class":379},[364,1594,923],{"class":667},[364,1596,926],{"class":373},[364,1598,500],{"class":379},[364,1600,1601,1603],{"class":366,"line":430},[364,1602,497],{"class":373},[364,1604,500],{"class":379},[564,1606],{},[348,1608,1610],{"id":1609},"lecture-du-cache","Lecture du cache",[571,1612,1614],{"id":1613},"getquerydata",[361,1615,1616],{},"getQueryData",[353,1618,1620],{"className":355,"code":1619,"language":358,"meta":359,"style":359},"T? getQueryData\u003CT>(Object key)\n",[361,1621,1622],{"__ignoreMap":359},[364,1623,1624,1626,1628,1631,1633,1635,1638,1641],{"class":366,"line":367},[364,1625,709],{"class":370},[364,1627,380],{"class":379},[364,1629,1630],{"class":667}," getQueryData",[364,1632,611],{"class":373},[364,1634,709],{"class":370},[364,1636,1637],{"class":373},">(",[364,1639,1640],{"class":370},"Object",[364,1642,1643],{"class":373}," key)\n",[385,1645,1646,1647,1650,1651,1654,1655,1650,1658,1661,1662,1665,1666,659],{},"Retourne les meilleures données disponibles pour ",[361,1648,1649],{},"key",", ou ",[361,1652,1653],{},"null",". Retourne ",[361,1656,1657],{},"Success.data",[361,1659,1660],{},"previousData"," de ",[361,1663,1664],{},"Loading","/",[361,1667,1668],{},"Failure",[353,1670,1672],{"className":355,"code":1671,"filename":357,"language":358,"meta":359,"style":359},"final user = client.getQueryData\u003CUser>(['users', userId]);\n",[361,1673,1674],{"__ignoreMap":359},[364,1675,1676,1678,1680,1682,1684,1686,1688,1690,1692,1695,1697,1699,1702],{"class":366,"line":367},[364,1677,405],{"class":404},[364,1679,861],{"class":373},[364,1681,411],{"class":379},[364,1683,656],{"class":373},[364,1685,659],{"class":379},[364,1687,1616],{"class":667},[364,1689,611],{"class":373},[364,1691,877],{"class":370},[364,1693,1694],{"class":373},">([",[364,1696,894],{"class":893},[364,1698,897],{"class":379},[364,1700,1701],{"class":373}," userId])",[364,1703,420],{"class":379},[564,1705],{},[571,1707,1709],{"id":1708},"getquerystate",[361,1710,1711],{},"getQueryState",[353,1713,1715],{"className":355,"code":1714,"language":358,"meta":359,"style":359},"QoraState\u003CT> getQueryState\u003CT>(Object key)\n",[361,1716,1717],{"__ignoreMap":359},[364,1718,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737],{"class":366,"line":367},[364,1720,211],{"class":370},[364,1722,611],{"class":373},[364,1724,709],{"class":370},[364,1726,712],{"class":373},[364,1728,1711],{"class":667},[364,1730,611],{"class":373},[364,1732,709],{"class":370},[364,1734,1637],{"class":373},[364,1736,1640],{"class":370},[364,1738,1643],{"class":373},[385,1740,1741,1742,1745,1746,1749],{},"Retourne le ",[361,1743,1744],{},"QoraState\u003CT>"," complet, ou ",[361,1747,1748],{},"Initial\u003CT>()"," si non mis en cache.",[353,1751,1753],{"className":355,"code":1752,"filename":357,"language":358,"meta":359,"style":359},"final state = client.getQueryState\u003CUser>(['users', userId]);\nif (state is Success\u003CUser>) {\n  print('Ancienneté : ${state.age}');\n}\n",[361,1754,1755,1784,1805,1834],{"__ignoreMap":359},[364,1756,1757,1759,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782],{"class":366,"line":367},[364,1758,405],{"class":404},[364,1760,1761],{"class":373}," state ",[364,1763,411],{"class":379},[364,1765,656],{"class":373},[364,1767,659],{"class":379},[364,1769,1711],{"class":667},[364,1771,611],{"class":373},[364,1773,877],{"class":370},[364,1775,1694],{"class":373},[364,1777,894],{"class":893},[364,1779,897],{"class":379},[364,1781,1701],{"class":373},[364,1783,420],{"class":379},[364,1785,1786,1789,1792,1795,1798,1800,1802],{"class":366,"line":401},[364,1787,1788],{"class":641},"if",[364,1790,1791],{"class":373}," (state ",[364,1793,1794],{"class":379},"is",[364,1796,1797],{"class":370}," Success",[364,1799,611],{"class":373},[364,1801,877],{"class":370},[364,1803,1804],{"class":373},">) {\n",[364,1806,1807,1809,1811,1814,1817,1820,1822,1825,1828,1830,1832],{"class":366,"line":423},[364,1808,668],{"class":667},[364,1810,1321],{"class":373},[364,1812,1813],{"class":893},"'Ancienneté : ",[364,1815,1816],{"class":373},"${",[364,1818,1819],{"class":1417},"state",[364,1821,659],{"class":373},[364,1823,1824],{"class":1417},"age",[364,1826,1827],{"class":373},"}",[364,1829,1411],{"class":893},[364,1831,497],{"class":373},[364,1833,420],{"class":379},[364,1835,1836],{"class":366,"line":430},[364,1837,682],{"class":373},[564,1839],{},[348,1841,1843],{"id":1842},"écriture-du-cache","Écriture du cache",[571,1845,1847],{"id":1846},"setquerydata",[361,1848,1849],{},"setQueryData",[353,1851,1853],{"className":355,"code":1852,"language":358,"meta":359,"style":359},"void setQueryData\u003CT>(Object key, T data)\n",[361,1854,1855],{"__ignoreMap":359},[364,1856,1857,1859,1862,1864,1866,1868,1870,1872,1874,1877],{"class":366,"line":367},[364,1858,1467],{"class":404},[364,1860,1861],{"class":667}," setQueryData",[364,1863,611],{"class":373},[364,1865,709],{"class":370},[364,1867,1637],{"class":373},[364,1869,1640],{"class":370},[364,1871,732],{"class":373},[364,1873,897],{"class":379},[364,1875,1876],{"class":370}," T",[364,1878,1879],{"class":373}," data)\n",[385,1881,1882,1883,1886,1887,1889],{},"Injecte des données directement dans le cache. Pousse instantanément ",[361,1884,1885],{},"Success"," vers tous les streams ",[361,1888,1011],{}," actifs.",[353,1891,1893],{"className":355,"code":1892,"filename":357,"language":358,"meta":359,"style":359},"client.setQueryData(['users', userId], updatedUser);\n",[361,1894,1895],{"__ignoreMap":359},[364,1896,1897,1900,1902,1904,1907,1909,1911,1913,1915,1918],{"class":366,"line":367},[364,1898,1899],{"class":373},"client",[364,1901,659],{"class":379},[364,1903,1849],{"class":667},[364,1905,1906],{"class":373},"([",[364,1908,894],{"class":893},[364,1910,897],{"class":379},[364,1912,900],{"class":373},[364,1914,897],{"class":379},[364,1916,1917],{"class":373}," updatedUser)",[364,1919,420],{"class":379},[564,1921],{},[571,1923,1925],{"id":1924},"restorequerydata",[361,1926,1927],{},"restoreQueryData",[353,1929,1931],{"className":355,"code":1930,"language":358,"meta":359,"style":359},"void restoreQueryData\u003CT>(Object key, T? snapshot)\n",[361,1932,1933],{"__ignoreMap":359},[364,1934,1935,1937,1940,1942,1944,1946,1948,1950,1952,1954,1956],{"class":366,"line":367},[364,1936,1467],{"class":404},[364,1938,1939],{"class":667}," restoreQueryData",[364,1941,611],{"class":373},[364,1943,709],{"class":370},[364,1945,1637],{"class":373},[364,1947,1640],{"class":370},[364,1949,732],{"class":373},[364,1951,897],{"class":379},[364,1953,1876],{"class":370},[364,1955,380],{"class":379},[364,1957,1958],{"class":373}," snapshot)\n",[385,1960,1961,1962,980,1965,1967],{},"Effectue un rollback vers un snapshot précédent. Si ",[361,1963,1964],{},"snapshot",[361,1966,1653],{},", l'entrée est supprimée du cache.",[353,1969,1971],{"className":355,"code":1970,"filename":357,"language":358,"meta":359,"style":359},"final snapshot = client.getQueryData\u003CUser>(['users', userId]);\nclient.setQueryData(['users', userId], optimisticUser);\n\ntry {\n  await api.updateUser(userId, payload);\n} catch (_) {\n  client.restoreQueryData(['users', userId], snapshot);\n}\n",[361,1972,1973,2002,2025,2029,2037,2059,2070,2094],{"__ignoreMap":359},[364,1974,1975,1977,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000],{"class":366,"line":367},[364,1976,405],{"class":404},[364,1978,1979],{"class":373}," snapshot ",[364,1981,411],{"class":379},[364,1983,656],{"class":373},[364,1985,659],{"class":379},[364,1987,1616],{"class":667},[364,1989,611],{"class":373},[364,1991,877],{"class":370},[364,1993,1694],{"class":373},[364,1995,894],{"class":893},[364,1997,897],{"class":379},[364,1999,1701],{"class":373},[364,2001,420],{"class":379},[364,2003,2004,2006,2008,2010,2012,2014,2016,2018,2020,2023],{"class":366,"line":401},[364,2005,1899],{"class":373},[364,2007,659],{"class":379},[364,2009,1849],{"class":667},[364,2011,1906],{"class":373},[364,2013,894],{"class":893},[364,2015,897],{"class":379},[364,2017,900],{"class":373},[364,2019,897],{"class":379},[364,2021,2022],{"class":373}," optimisticUser)",[364,2024,420],{"class":379},[364,2026,2027],{"class":366,"line":423},[364,2028,427],{"emptyLinePlaceholder":426},[364,2030,2031,2034],{"class":366,"line":430},[364,2032,2033],{"class":641},"try",[364,2035,2036],{"class":373}," {\n",[364,2038,2039,2042,2044,2046,2049,2052,2054,2057],{"class":366,"line":436},[364,2040,2041],{"class":641},"  await",[364,2043,918],{"class":373},[364,2045,659],{"class":379},[364,2047,2048],{"class":667},"updateUser",[364,2050,2051],{"class":373},"(userId",[364,2053,897],{"class":379},[364,2055,2056],{"class":373}," payload)",[364,2058,420],{"class":379},[364,2060,2061,2064,2067],{"class":366,"line":450},[364,2062,2063],{"class":373},"} ",[364,2065,2066],{"class":641},"catch",[364,2068,2069],{"class":373}," (_) {\n",[364,2071,2072,2075,2077,2079,2081,2083,2085,2087,2089,2092],{"class":366,"line":464},[364,2073,2074],{"class":373},"  client",[364,2076,659],{"class":379},[364,2078,1927],{"class":667},[364,2080,1906],{"class":373},[364,2082,894],{"class":893},[364,2084,897],{"class":379},[364,2086,900],{"class":373},[364,2088,897],{"class":379},[364,2090,2091],{"class":373}," snapshot)",[364,2093,420],{"class":379},[364,2095,2096],{"class":366,"line":477},[364,2097,682],{"class":373},[564,2099],{},[348,2101,2103],{"id":2102},"invalidation","Invalidation",[571,2105,2107],{"id":2106},"invalidate",[361,2108,2106],{},[353,2110,2112],{"className":355,"code":2111,"language":358,"meta":359,"style":359},"void invalidate(Object key)\n",[361,2113,2114],{"__ignoreMap":359},[364,2115,2116,2118,2121,2123,2125],{"class":366,"line":367},[364,2117,1467],{"class":404},[364,2119,2120],{"class":667}," invalidate",[364,2122,1321],{"class":373},[364,2124,1640],{"class":370},[364,2126,1643],{"class":373},[385,2128,2129,2130,2132,2133,2136],{},"Marque une requête comme périmée. Les streams ",[361,2131,1011],{}," actifs reçoivent immédiatement ",[361,2134,2135],{},"Loading(previousData: ...)",". Le prochain accès déclenche un fetch frais.",[353,2138,2140],{"className":355,"code":2139,"filename":357,"language":358,"meta":359,"style":359},"await api.createPost(payload);\nclient.invalidate(['posts']);\n",[361,2141,2142,2159],{"__ignoreMap":359},[364,2143,2144,2147,2149,2151,2154,2157],{"class":366,"line":367},[364,2145,2146],{"class":641},"await",[364,2148,918],{"class":373},[364,2150,659],{"class":379},[364,2152,2153],{"class":667},"createPost",[364,2155,2156],{"class":373},"(payload)",[364,2158,420],{"class":379},[364,2160,2161,2163,2165,2167,2169,2172,2175],{"class":366,"line":401},[364,2162,1899],{"class":373},[364,2164,659],{"class":379},[364,2166,2106],{"class":667},[364,2168,1906],{"class":373},[364,2170,2171],{"class":893},"'posts'",[364,2173,2174],{"class":373},"])",[364,2176,420],{"class":379},[564,2178],{},[571,2180,2182],{"id":2181},"invalidatewhere",[361,2183,2184],{},"invalidateWhere",[353,2186,2188],{"className":355,"code":2187,"language":358,"meta":359,"style":359},"void invalidateWhere(bool Function(List\u003Cdynamic> key) predicate)\n",[361,2189,2190],{"__ignoreMap":359},[364,2191,2192,2194,2197,2199,2202,2205,2207,2209,2211,2213],{"class":366,"line":367},[364,2193,1467],{"class":404},[364,2195,2196],{"class":667}," invalidateWhere",[364,2198,1321],{"class":373},[364,2200,2201],{"class":370},"bool",[364,2203,2204],{"class":370}," Function",[364,2206,1321],{"class":373},[364,2208,614],{"class":370},[364,2210,611],{"class":373},[364,2212,619],{"class":370},[364,2214,2215],{"class":373},"> key) predicate)\n",[385,2217,2218,2219,659],{},"Invalide toutes les requêtes dont la clé satisfait ",[361,2220,2221],{},"predicate",[353,2223,2225],{"className":355,"code":2224,"filename":357,"language":358,"meta":359,"style":359},"// Toutes les requêtes utilisateur\nclient.invalidateWhere((key) => key.firstOrNull == 'users');\n\n// Utilisateur spécifique + ses sous-ressources\nclient.invalidateWhere(\n  (key) => key.length >= 2 && key[0] == 'users' && key[1] == userId,\n);\n",[361,2226,2227,2232,2262,2266,2271,2281,2332],{"__ignoreMap":359},[364,2228,2229],{"class":366,"line":367},[364,2230,2231],{"class":397},"// Toutes les requêtes utilisateur\n",[364,2233,2234,2236,2238,2240,2243,2245,2247,2249,2252,2255,2258,2260],{"class":366,"line":401},[364,2235,1899],{"class":373},[364,2237,659],{"class":379},[364,2239,2184],{"class":667},[364,2241,2242],{"class":373},"((key) ",[364,2244,915],{"class":379},[364,2246,732],{"class":373},[364,2248,659],{"class":379},[364,2250,2251],{"class":373},"firstOrNull ",[364,2253,2254],{"class":379},"==",[364,2256,2257],{"class":893}," 'users'",[364,2259,497],{"class":373},[364,2261,420],{"class":379},[364,2263,2264],{"class":366,"line":423},[364,2265,427],{"emptyLinePlaceholder":426},[364,2267,2268],{"class":366,"line":430},[364,2269,2270],{"class":397},"// Utilisateur spécifique + ses sous-ressources\n",[364,2272,2273,2275,2277,2279],{"class":366,"line":436},[364,2274,1899],{"class":373},[364,2276,659],{"class":379},[364,2278,2184],{"class":667},[364,2280,447],{"class":373},[364,2282,2283,2286,2288,2290,2292,2295,2298,2300,2303,2306,2309,2312,2314,2316,2318,2320,2323,2325,2327,2330],{"class":366,"line":450},[364,2284,2285],{"class":373},"  (key) ",[364,2287,915],{"class":379},[364,2289,732],{"class":373},[364,2291,659],{"class":379},[364,2293,2294],{"class":373},"length ",[364,2296,2297],{"class":379},">=",[364,2299,511],{"class":493},[364,2301,2302],{"class":379}," &&",[364,2304,2305],{"class":373}," key[",[364,2307,2308],{"class":493},"0",[364,2310,2311],{"class":373},"] ",[364,2313,2254],{"class":379},[364,2315,2257],{"class":893},[364,2317,2302],{"class":379},[364,2319,2305],{"class":373},[364,2321,2322],{"class":493},"1",[364,2324,2311],{"class":373},[364,2326,2254],{"class":379},[364,2328,2329],{"class":373}," userId",[364,2331,500],{"class":379},[364,2333,2334,2336],{"class":366,"line":464},[364,2335,497],{"class":373},[364,2337,420],{"class":379},[564,2339],{},[571,2341,2343],{"id":2342},"invalidateprefix",[361,2344,2345],{},"invalidatePrefix",[353,2347,2349],{"className":355,"code":2348,"language":358,"meta":359,"style":359},"void invalidatePrefix(Object prefix)\n",[361,2350,2351],{"__ignoreMap":359},[364,2352,2353,2355,2358,2360,2362],{"class":366,"line":367},[364,2354,1467],{"class":404},[364,2356,2357],{"class":667}," invalidatePrefix",[364,2359,1321],{"class":373},[364,2361,1640],{"class":370},[364,2363,2364],{"class":373}," prefix)\n",[385,2366,2367,2368,2371],{},"Invalide toutes les requêtes dont la clé commence par ",[361,2369,2370],{},"prefix",". Les segments sont comparés avec la même égalité profonde que les clés (les maps et listes imbriquées sont comparées structurellement). Un préfixe vide correspond à toutes les requêtes. Les watchers actifs refetch.",[353,2373,2375],{"className":355,"code":2374,"filename":357,"language":358,"meta":359,"style":359},"// ['posts'], ['posts', 1], ['posts', 1, 'comments'], ...\nclient.invalidatePrefix(['posts']);\n\n// Toutes les requêtes sous l'utilisateur 42\nclient.invalidatePrefix(['users', 42]);\n",[361,2376,2377,2382,2398,2402,2407],{"__ignoreMap":359},[364,2378,2379],{"class":366,"line":367},[364,2380,2381],{"class":397},"// ['posts'], ['posts', 1], ['posts', 1, 'comments'], ...\n",[364,2383,2384,2386,2388,2390,2392,2394,2396],{"class":366,"line":401},[364,2385,1899],{"class":373},[364,2387,659],{"class":379},[364,2389,2345],{"class":667},[364,2391,1906],{"class":373},[364,2393,2171],{"class":893},[364,2395,2174],{"class":373},[364,2397,420],{"class":379},[364,2399,2400],{"class":366,"line":423},[364,2401,427],{"emptyLinePlaceholder":426},[364,2403,2404],{"class":366,"line":430},[364,2405,2406],{"class":397},"// Toutes les requêtes sous l'utilisateur 42\n",[364,2408,2409,2411,2413,2415,2417,2419,2421,2424,2426],{"class":366,"line":436},[364,2410,1899],{"class":373},[364,2412,659],{"class":379},[364,2414,2345],{"class":667},[364,2416,1906],{"class":373},[364,2418,894],{"class":893},[364,2420,897],{"class":379},[364,2422,2423],{"class":493}," 42",[364,2425,2174],{"class":373},[364,2427,420],{"class":379},[2429,2430,2431,2434,2435,2437],"note",{},[361,2432,2433],{},"invalidate(key)"," est exact. Utilisez ",[361,2436,2345],{}," pour une correspondance partielle façon TanStack.",[564,2439],{},[571,2441,2443],{"id":2442},"invalidatequeries",[361,2444,2445],{},"invalidateQueries",[353,2447,2449],{"className":355,"code":2448,"language":358,"meta":359,"style":359},"void invalidateQueries({required QueryFilter filter})\n",[361,2450,2451],{"__ignoreMap":359},[364,2452,2453,2455,2458,2460,2463,2466],{"class":366,"line":367},[364,2454,1467],{"class":404},[364,2456,2457],{"class":667}," invalidateQueries",[364,2459,374],{"class":373},[364,2461,2462],{"class":404},"required",[364,2464,2465],{"class":370}," QueryFilter",[364,2467,2468],{"class":373}," filter})\n",[385,2470,2471,2472,2475,2476,2478],{},"Invalidation en masse avec un ",[361,2473,2474],{},"QueryFilter"," : un prédicat plus riche qu'",[361,2477,2184],{}," qui reçoit également l'état actuel et les options du dernier fetch réussi.",[353,2480,2482],{"className":355,"code":2481,"language":358,"meta":359,"style":359},"typedef QueryFilter = bool Function(\n  String key,\n  QoraState\u003Cdynamic> state,\n  QoraOptions? lastOptions,\n);\n",[361,2483,2484,2501,2510,2524,2535],{"__ignoreMap":359},[364,2485,2486,2489,2491,2494,2497,2499],{"class":366,"line":367},[364,2487,2488],{"class":379},"typedef",[364,2490,2465],{"class":370},[364,2492,2493],{"class":379}," =",[364,2495,2496],{"class":370}," bool",[364,2498,2204],{"class":370},[364,2500,447],{"class":373},[364,2502,2503,2506,2508],{"class":366,"line":401},[364,2504,2505],{"class":370},"  String",[364,2507,732],{"class":373},[364,2509,500],{"class":379},[364,2511,2512,2515,2517,2519,2522],{"class":366,"line":423},[364,2513,2514],{"class":370},"  QoraState",[364,2516,611],{"class":373},[364,2518,619],{"class":370},[364,2520,2521],{"class":373},"> state",[364,2523,500],{"class":379},[364,2525,2526,2528,2530,2533],{"class":366,"line":430},[364,2527,760],{"class":370},[364,2529,380],{"class":379},[364,2531,2532],{"class":373}," lastOptions",[364,2534,500],{"class":379},[364,2536,2537,2539],{"class":366,"line":436},[364,2538,497],{"class":373},[364,2540,420],{"class":379},[353,2542,2544],{"className":355,"code":2543,"filename":357,"language":358,"meta":359,"style":359},"// Invalider toutes les requêtes en mode online pas encore en Success\nclient.invalidateQueries(\n  filter: (key, state, opts) =>\n      opts?.networkMode == NetworkMode.online && state is! Success,\n);\n\n// Invalider toutes les requêtes utilisateur dont les données ont plus de 10 minutes\nclient.invalidateQueries(\n  filter: (key, state, opts) {\n    if (state is! Success) return false;\n    return key.contains('users') &&\n        DateTime.now().difference(state.updatedAt) > const Duration(minutes: 10);\n  },\n);\n",[361,2545,2546,2551,2561,2584,2617,2623,2627,2632,2642,2659,2679,2699,2742,2748],{"__ignoreMap":359},[364,2547,2548],{"class":366,"line":367},[364,2549,2550],{"class":397},"// Invalider toutes les requêtes en mode online pas encore en Success\n",[364,2552,2553,2555,2557,2559],{"class":366,"line":401},[364,2554,1899],{"class":373},[364,2556,659],{"class":379},[364,2558,2445],{"class":667},[364,2560,447],{"class":373},[364,2562,2563,2566,2568,2571,2573,2576,2578,2581],{"class":366,"line":423},[364,2564,2565],{"class":373},"  filter",[364,2567,456],{"class":379},[364,2569,2570],{"class":373}," (key",[364,2572,897],{"class":379},[364,2574,2575],{"class":373}," state",[364,2577,897],{"class":379},[364,2579,2580],{"class":373}," opts) ",[364,2582,2583],{"class":379},"=>\n",[364,2585,2586,2589,2592,2595,2597,2600,2602,2605,2608,2610,2613,2615],{"class":366,"line":430},[364,2587,2588],{"class":373},"      opts",[364,2590,2591],{"class":379},"?.",[364,2593,2594],{"class":373},"networkMode ",[364,2596,2254],{"class":379},[364,2598,2599],{"class":370}," NetworkMode",[364,2601,659],{"class":379},[364,2603,2604],{"class":373},"online ",[364,2606,2607],{"class":379},"&&",[364,2609,1761],{"class":373},[364,2611,2612],{"class":379},"is!",[364,2614,1797],{"class":370},[364,2616,500],{"class":379},[364,2618,2619,2621],{"class":366,"line":436},[364,2620,497],{"class":373},[364,2622,420],{"class":379},[364,2624,2625],{"class":366,"line":450},[364,2626,427],{"emptyLinePlaceholder":426},[364,2628,2629],{"class":366,"line":464},[364,2630,2631],{"class":397},"// Invalider toutes les requêtes utilisateur dont les données ont plus de 10 minutes\n",[364,2633,2634,2636,2638,2640],{"class":366,"line":477},[364,2635,1899],{"class":373},[364,2637,659],{"class":379},[364,2639,2445],{"class":667},[364,2641,447],{"class":373},[364,2643,2644,2646,2648,2650,2652,2654,2656],{"class":366,"line":503},[364,2645,2565],{"class":373},[364,2647,456],{"class":379},[364,2649,2570],{"class":373},[364,2651,897],{"class":379},[364,2653,2575],{"class":373},[364,2655,897],{"class":379},[364,2657,2658],{"class":373}," opts) {\n",[364,2660,2661,2664,2666,2668,2670,2673,2676],{"class":366,"line":516},[364,2662,2663],{"class":641},"    if",[364,2665,1791],{"class":373},[364,2667,2612],{"class":379},[364,2669,1797],{"class":370},[364,2671,2672],{"class":373},") ",[364,2674,2675],{"class":641},"return",[364,2677,2678],{"class":379}," false;\n",[364,2680,2681,2683,2685,2687,2690,2692,2694,2696],{"class":366,"line":524},[364,2682,1271],{"class":641},[364,2684,732],{"class":373},[364,2686,659],{"class":379},[364,2688,2689],{"class":667},"contains",[364,2691,1321],{"class":373},[364,2693,894],{"class":893},[364,2695,2672],{"class":373},[364,2697,2698],{"class":379},"&&\n",[364,2700,2701,2704,2706,2709,2711,2713,2716,2719,2721,2724,2727,2729,2731,2733,2735,2738,2740],{"class":366,"line":537},[364,2702,2703],{"class":370},"        DateTime",[364,2705,659],{"class":379},[364,2707,2708],{"class":667},"now",[364,2710,417],{"class":373},[364,2712,659],{"class":379},[364,2714,2715],{"class":667},"difference",[364,2717,2718],{"class":373},"(state",[364,2720,659],{"class":379},[364,2722,2723],{"class":373},"updatedAt) ",[364,2725,2726],{"class":379},">",[364,2728,1301],{"class":404},[364,2730,485],{"class":370},[364,2732,488],{"class":373},[364,2734,456],{"class":379},[364,2736,2737],{"class":493}," 10",[364,2739,497],{"class":373},[364,2741,420],{"class":379},[364,2743,2744,2746],{"class":366,"line":550},[364,2745,1438],{"class":373},[364,2747,500],{"class":379},[364,2749,2750,2752],{"class":366,"line":558},[364,2751,497],{"class":373},[364,2753,420],{"class":379},[564,2755],{},[571,2757,2759],{"id":2758},"invalidatetags",[361,2760,2761],{},"invalidateTags",[353,2763,2765],{"className":355,"code":2764,"language":358,"meta":359,"style":359},"void invalidateTags(List\u003CQueryTag> tags)\n",[361,2766,2767],{"__ignoreMap":359},[364,2768,2769,2771,2774,2776,2778,2780,2783],{"class":366,"line":367},[364,2770,1467],{"class":404},[364,2772,2773],{"class":667}," invalidateTags",[364,2775,1321],{"class":373},[364,2777,614],{"class":370},[364,2779,611],{"class":373},[364,2781,2782],{"class":370},"QueryTag",[364,2784,2785],{"class":373},"> tags)\n",[385,2787,2788,2789,2792],{},"Invalide toutes les requêtes en cache qui fournissent au moins un des tags donnés. Les requêtes enregistrent des tags via ",[361,2790,2791],{},"QoraOptions.providesTags",". La correspondance suit deux règles :",[968,2794,2795,2812],{},[971,2796,2797,2800,2801,2804,2805,2808,2809,659],{},[791,2798,2799],{},"Générique"," : ",[361,2802,2803],{},"QueryTag('post')"," correspond à toute requête fournissant un tag avec ",[361,2806,2807],{},"type: 'post'",", quel que soit son ",[361,2810,2811],{},"id",[971,2813,2814,2800,2817,2820,2821,2823,2824,2823,2827,659],{},[791,2815,2816],{},"Spécifique",[361,2818,2819],{},"QueryTag('post', '123')"," correspond uniquement aux requêtes fournissant un tag avec ",[361,2822,2807],{}," ",[791,2825,2826],{},"et",[361,2828,2829],{},"id: '123'",[353,2831,2833],{"className":355,"code":2832,"filename":357,"language":358,"meta":359,"style":359},"// Revalider toutes les requêtes de posts\nclient.invalidateTags([QueryTag('post')]);\n\n// Revalider un post spécifique + son auteur\nclient.invalidateTags([QueryTag('post', postId), QueryTag('user', authorId)]);\n",[361,2834,2835,2840,2862,2866,2871],{"__ignoreMap":359},[364,2836,2837],{"class":366,"line":367},[364,2838,2839],{"class":397},"// Revalider toutes les requêtes de posts\n",[364,2841,2842,2844,2846,2848,2850,2852,2854,2857,2860],{"class":366,"line":401},[364,2843,1899],{"class":373},[364,2845,659],{"class":379},[364,2847,2761],{"class":667},[364,2849,1906],{"class":373},[364,2851,2782],{"class":370},[364,2853,1321],{"class":373},[364,2855,2856],{"class":893},"'post'",[364,2858,2859],{"class":373},")])",[364,2861,420],{"class":379},[364,2863,2864],{"class":366,"line":423},[364,2865,427],{"emptyLinePlaceholder":426},[364,2867,2868],{"class":366,"line":430},[364,2869,2870],{"class":397},"// Revalider un post spécifique + son auteur\n",[364,2872,2873,2875,2877,2879,2881,2883,2885,2887,2889,2892,2894,2897,2899,2902,2904,2907],{"class":366,"line":436},[364,2874,1899],{"class":373},[364,2876,659],{"class":379},[364,2878,2761],{"class":667},[364,2880,1906],{"class":373},[364,2882,2782],{"class":370},[364,2884,1321],{"class":373},[364,2886,2856],{"class":893},[364,2888,897],{"class":379},[364,2890,2891],{"class":373}," postId)",[364,2893,897],{"class":379},[364,2895,2896],{"class":370}," QueryTag",[364,2898,1321],{"class":373},[364,2900,2901],{"class":893},"'user'",[364,2903,897],{"class":379},[364,2905,2906],{"class":373}," authorId)])",[364,2908,420],{"class":379},[385,2910,2911,2912,2916,2917,659],{},"Voir ",[2913,2914,2791],"a",{"href":2915},"./qora-options#providestags"," et ",[2913,2918,2920],{"href":2919},"./qora-mutation#invalidatestags","MutationOptions.invalidatesTags",[564,2922],{},[348,2924,2926],{"id":2925},"suppression-du-cache","Suppression du cache",[571,2928,2930],{"id":2929},"removequery",[361,2931,2932],{},"removeQuery",[353,2934,2936],{"className":355,"code":2935,"language":358,"meta":359,"style":359},"void removeQuery(Object key)\n",[361,2937,2938],{"__ignoreMap":359},[364,2939,2940,2942,2945,2947,2949],{"class":366,"line":367},[364,2941,1467],{"class":404},[364,2943,2944],{"class":667}," removeQuery",[364,2946,1321],{"class":373},[364,2948,1640],{"class":370},[364,2950,1643],{"class":373},[385,2952,2953,2954,659],{},"Supprime une entrée du cache et annule toute requête en attente. Le prochain accès repart de ",[361,2955,2956],{},"Initial",[353,2958,2960],{"className":355,"code":2959,"filename":357,"language":358,"meta":359,"style":359},"await api.deletePost(postId);\nclient.removeQuery(['posts', postId]);\n",[361,2961,2962,2978],{"__ignoreMap":359},[364,2963,2964,2966,2968,2970,2973,2976],{"class":366,"line":367},[364,2965,2146],{"class":641},[364,2967,918],{"class":373},[364,2969,659],{"class":379},[364,2971,2972],{"class":667},"deletePost",[364,2974,2975],{"class":373},"(postId)",[364,2977,420],{"class":379},[364,2979,2980,2982,2984,2986,2988,2990,2992,2995],{"class":366,"line":401},[364,2981,1899],{"class":373},[364,2983,659],{"class":379},[364,2985,2932],{"class":667},[364,2987,1906],{"class":373},[364,2989,2171],{"class":893},[364,2991,897],{"class":379},[364,2993,2994],{"class":373}," postId])",[364,2996,420],{"class":379},[564,2998],{},[571,3000,3002],{"id":3001},"clearcache",[361,3003,3004],{},"clearCache",[353,3006,3008],{"className":355,"code":3007,"language":358,"meta":359,"style":359},"void clearCache()\n",[361,3009,3010],{"__ignoreMap":359},[364,3011,3012,3014,3017],{"class":366,"line":367},[364,3013,1467],{"class":404},[364,3015,3016],{"class":667}," clearCache",[364,3018,3019],{"class":373},"()\n",[385,3021,3022,3023,3026,3027,3030],{},"Vide uniquement le cache en mémoire. Le stockage persistant est inchangé.\nUtiliser ",[361,3024,3025],{},"clear()"," pour vider les deux (si vous utilisez la persistance), ou ",[361,3028,3029],{},"clearStorage()"," pour vider uniquement le stockage.",[564,3032],{},[571,3034,3036],{"id":3035},"clear",[361,3037,3035],{},[353,3039,3041],{"className":355,"code":3040,"language":358,"meta":359,"style":359},"void clear()\n",[361,3042,3043],{"__ignoreMap":359},[364,3044,3045,3047,3050],{"class":366,"line":367},[364,3046,1467],{"class":404},[364,3048,3049],{"class":667}," clear",[364,3051,3019],{"class":373},[385,3053,3054,3055,3057,3058,3060,3061,3063],{},"Supprime toutes les requêtes en cache et annule toutes les requêtes en attente.\nPour ",[361,3056,202],{},", cela vide le cache en mémoire (identique à ",[361,3059,3004],{},").\nPour ",[361,3062,229],{},", cela vide À LA FOIS le cache en mémoire et le stockage.",[353,3065,3067],{"className":355,"code":3066,"filename":357,"language":358,"meta":359,"style":359},"// À la déconnexion\nclient.clear();\n",[361,3068,3069,3074],{"__ignoreMap":359},[364,3070,3071],{"class":366,"line":367},[364,3072,3073],{"class":397},"// À la déconnexion\n",[364,3075,3076,3078,3080,3082,3084],{"class":366,"line":401},[364,3077,1899],{"class":373},[364,3079,659],{"class":379},[364,3081,3035],{"class":667},[364,3083,417],{"class":373},[364,3085,420],{"class":379},[564,3087],{},[348,3089,3091],{"id":3090},"hydratation","Hydratation",[571,3093,3095],{"id":3094},"queuehydration",[361,3096,3097],{},"queueHydration",[353,3099,3101],{"className":355,"code":3100,"language":358,"meta":359,"style":359},"void queueHydration(Object key, dynamic data, {DateTime? updatedAt})\n",[361,3102,3103],{"__ignoreMap":359},[364,3104,3105,3107,3110,3112,3114,3116,3118,3121,3124,3126,3129,3132,3134],{"class":366,"line":367},[364,3106,1467],{"class":404},[364,3108,3109],{"class":667}," queueHydration",[364,3111,1321],{"class":373},[364,3113,1640],{"class":370},[364,3115,732],{"class":373},[364,3117,897],{"class":379},[364,3119,3120],{"class":370}," dynamic",[364,3122,3123],{"class":373}," data",[364,3125,897],{"class":379},[364,3127,3128],{"class":373}," {",[364,3130,3131],{"class":370},"DateTime",[364,3133,380],{"class":379},[364,3135,3136],{"class":373}," updatedAt})\n",[385,3138,3139,3140,3143,3144,3147,3148,3150],{},"Met en file une valeur pré-désérialisée pour injection différée dans le cache typé. La valeur est injectée au premier appel API typé (",[361,3141,3142],{},"fetchQuery\u003CT>",", ",[361,3145,3146],{},"watchQuery\u003CT>",", etc.) pour cette clé, reportant le cast Dart jusqu'à ce que le type ",[361,3149,709],{}," soit connu.",[385,3152,3153,3154,2916,3157,3160],{},"C'est le mécanisme partagé utilisé par ",[361,3155,3156],{},"PersistQoraClient.hydrate()",[361,3158,3159],{},"SsrHydrator.hydrate()",". L'utilisation directe est réservée aux scénarios avancés (ex. sources d'hydratation personnalisées).",[353,3162,3164],{"className":355,"code":3163,"filename":357,"language":358,"meta":359,"style":359},"// Pré-peupler manuellement le cache avant runApp\nclient.queueHydration(['users', 1], User(id: 1, name: 'Ada'));\n\n// Avec un timestamp personnalisé pour que staleTime s'évalue correctement\nclient.queueHydration(\n  ['config'],\n  appConfig,\n  updatedAt: DateTime.now().subtract(const Duration(minutes: 2)),\n);\n",[361,3165,3166,3171,3217,3221,3226,3236,3248,3255,3293],{"__ignoreMap":359},[364,3167,3168],{"class":366,"line":367},[364,3169,3170],{"class":397},"// Pré-peupler manuellement le cache avant runApp\n",[364,3172,3173,3175,3177,3179,3181,3183,3185,3188,3191,3193,3196,3199,3201,3203,3205,3208,3210,3213,3215],{"class":366,"line":401},[364,3174,1899],{"class":373},[364,3176,659],{"class":379},[364,3178,3097],{"class":667},[364,3180,1906],{"class":373},[364,3182,894],{"class":893},[364,3184,897],{"class":379},[364,3186,3187],{"class":493}," 1",[364,3189,3190],{"class":373},"]",[364,3192,897],{"class":379},[364,3194,3195],{"class":370}," User",[364,3197,3198],{"class":373},"(id",[364,3200,456],{"class":379},[364,3202,3187],{"class":493},[364,3204,897],{"class":379},[364,3206,3207],{"class":373}," name",[364,3209,456],{"class":379},[364,3211,3212],{"class":893}," 'Ada'",[364,3214,953],{"class":373},[364,3216,420],{"class":379},[364,3218,3219],{"class":366,"line":423},[364,3220,427],{"emptyLinePlaceholder":426},[364,3222,3223],{"class":366,"line":430},[364,3224,3225],{"class":397},"// Avec un timestamp personnalisé pour que staleTime s'évalue correctement\n",[364,3227,3228,3230,3232,3234],{"class":366,"line":436},[364,3229,1899],{"class":373},[364,3231,659],{"class":379},[364,3233,3097],{"class":667},[364,3235,447],{"class":373},[364,3237,3238,3241,3244,3246],{"class":366,"line":450},[364,3239,3240],{"class":373},"  [",[364,3242,3243],{"class":893},"'config'",[364,3245,3190],{"class":373},[364,3247,500],{"class":379},[364,3249,3250,3253],{"class":366,"line":464},[364,3251,3252],{"class":373},"  appConfig",[364,3254,500],{"class":379},[364,3256,3257,3260,3262,3265,3267,3269,3271,3273,3276,3278,3281,3283,3285,3287,3289,3291],{"class":366,"line":477},[364,3258,3259],{"class":373},"  updatedAt",[364,3261,456],{"class":379},[364,3263,3264],{"class":370}," DateTime",[364,3266,659],{"class":379},[364,3268,2708],{"class":667},[364,3270,417],{"class":373},[364,3272,659],{"class":379},[364,3274,3275],{"class":667},"subtract",[364,3277,1321],{"class":373},[364,3279,3280],{"class":404},"const",[364,3282,485],{"class":370},[364,3284,488],{"class":373},[364,3286,456],{"class":379},[364,3288,511],{"class":493},[364,3290,953],{"class":373},[364,3292,500],{"class":379},[364,3294,3295,3297],{"class":366,"line":503},[364,3296,497],{"class":373},[364,3298,420],{"class":379},[564,3300],{},[571,3302,3304],{"id":3303},"hydratequery",[361,3305,3306],{},"hydrateQuery",[353,3308,3310],{"className":355,"code":3309,"language":358,"meta":359,"style":359},"void hydrateQuery\u003CT>(Object key, T data, {DateTime? updatedAt})\n",[361,3311,3312],{"__ignoreMap":359},[364,3313,3314,3316,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337,3339,3341,3343],{"class":366,"line":367},[364,3315,1467],{"class":404},[364,3317,3318],{"class":667}," hydrateQuery",[364,3320,611],{"class":373},[364,3322,709],{"class":370},[364,3324,1637],{"class":373},[364,3326,1640],{"class":370},[364,3328,732],{"class":373},[364,3330,897],{"class":379},[364,3332,1876],{"class":370},[364,3334,3123],{"class":373},[364,3336,897],{"class":379},[364,3338,3128],{"class":373},[364,3340,3131],{"class":370},[364,3342,380],{"class":379},[364,3344,3136],{"class":373},[385,3346,3347,3348,3351,3352,3354,3355,3357],{},"Injecte un ",[361,3349,3350],{},"Success\u003CT>"," typé directement dans une entrée ",[361,3353,2956],{}," du cache. Sans effet si l'entrée a déjà des données. Utilisé en interne ; préférer ",[361,3356,3097],{}," quand le type n'est pas connu à l'appel.",[564,3359],{},[348,3361,3363],{"id":3362},"débogage","Débogage",[571,3365,3367],{"id":3366},"debuginfo",[361,3368,3369],{},"debugInfo",[353,3371,3373],{"className":355,"code":3372,"language":358,"meta":359,"style":359},"Map\u003CString, dynamic> debugInfo()\n",[361,3374,3375],{"__ignoreMap":359},[364,3376,3377,3380,3382,3385,3387,3389,3391,3393],{"class":366,"line":367},[364,3378,3379],{"class":370},"Map",[364,3381,611],{"class":373},[364,3383,3384],{"class":370},"String",[364,3386,3143],{"class":373},[364,3388,619],{"class":370},[364,3390,712],{"class":373},[364,3392,3369],{"class":667},[364,3394,3019],{"class":373},[385,3396,3397],{},"Retourne un snapshot de débogage de l'état actuel du cache.",[353,3399,3401],{"className":355,"code":3400,"filename":357,"language":358,"meta":359,"style":359},"print(client.debugInfo());\n// {\n//   total_queries: 12,\n//   active_queries: 3,\n//   inactive_queries: 9,\n//   pending_requests: 1,\n//   max_size: 200,\n//   keys: [['users', 1], ['posts'], ...]\n// }\n",[361,3402,3403,3420,3425,3430,3435,3440,3445,3450,3455],{"__ignoreMap":359},[364,3404,3405,3408,3411,3413,3415,3418],{"class":366,"line":367},[364,3406,3407],{"class":667},"print",[364,3409,3410],{"class":373},"(client",[364,3412,659],{"class":379},[364,3414,3369],{"class":667},[364,3416,3417],{"class":373},"())",[364,3419,420],{"class":379},[364,3421,3422],{"class":366,"line":401},[364,3423,3424],{"class":397},"// {\n",[364,3426,3427],{"class":366,"line":423},[364,3428,3429],{"class":397},"//   total_queries: 12,\n",[364,3431,3432],{"class":366,"line":430},[364,3433,3434],{"class":397},"//   active_queries: 3,\n",[364,3436,3437],{"class":366,"line":436},[364,3438,3439],{"class":397},"//   inactive_queries: 9,\n",[364,3441,3442],{"class":366,"line":450},[364,3443,3444],{"class":397},"//   pending_requests: 1,\n",[364,3446,3447],{"class":366,"line":464},[364,3448,3449],{"class":397},"//   max_size: 200,\n",[364,3451,3452],{"class":366,"line":477},[364,3453,3454],{"class":397},"//   keys: [['users', 1], ['posts'], ...]\n",[364,3456,3457],{"class":366,"line":503},[364,3458,3459],{"class":397},"// }\n",[564,3461],{},[348,3463,3465],{"id":3464},"cycle-de-vie","Cycle de vie",[571,3467,3469],{"id":3468},"attachlifecyclemanager",[361,3470,3471],{},"attachLifecycleManager",[353,3473,3475],{"className":355,"code":3474,"language":358,"meta":359,"style":359},"void attachLifecycleManager(LifecycleManager manager)\n",[361,3476,3477],{"__ignoreMap":359},[364,3478,3479,3481,3484,3486,3489],{"class":366,"line":367},[364,3480,1467],{"class":404},[364,3482,3483],{"class":667}," attachLifecycleManager",[364,3485,1321],{"class":373},[364,3487,3488],{"class":370},"LifecycleManager",[364,3490,3491],{"class":373}," manager)\n",[385,3493,3494,3495,3497,3498,3501,3502,3504,3505,3508],{},"Enregistre un ",[361,3496,3488],{}," auprès du client. Quand l'application passe à ",[361,3499,3500],{},"LifecycleState.resumed",", le client revalide toutes les entrées périmées ayant des abonnés actifs. ",[361,3503,103],{}," appelle cela automatiquement quand un ",[361,3506,3507],{},"FlutterLifecycleManager"," est fourni. L'utilisation directe est uniquement nécessaire dans des scénarios d'intégration personnalisés.",[564,3510],{},[571,3512,3514],{"id":3513},"dispose",[361,3515,3513],{},[353,3517,3519],{"className":355,"code":3518,"language":358,"meta":359,"style":359},"void dispose()\n",[361,3520,3521],{"__ignoreMap":359},[364,3522,3523,3525,3528],{"class":366,"line":367},[364,3524,1467],{"class":404},[364,3526,3527],{"class":667}," dispose",[364,3529,3019],{"class":373},[385,3531,3532,3533,3536],{},"Libère toutes les ressources. Arrête le timer d'éviction, dispose toutes les entrées du cache, annule les requêtes en attente. Le client ",[791,3534,3535],{},"ne doit pas"," être utilisé après cet appel.",[353,3538,3540],{"className":355,"code":3539,"filename":357,"language":358,"meta":359,"style":359},"// Dans un teardown DI ou un tearDown de test\nclient.dispose();\n",[361,3541,3542,3547],{"__ignoreMap":359},[364,3543,3544],{"class":366,"line":367},[364,3545,3546],{"class":397},"// Dans un teardown DI ou un tearDown de test\n",[364,3548,3549,3551,3553,3555,3557],{"class":366,"line":401},[364,3550,1899],{"class":373},[364,3552,659],{"class":379},[364,3554,3513],{"class":667},[364,3556,417],{"class":373},[364,3558,420],{"class":379},[564,3560],{},[348,3562,3564],{"id":3563},"configuration-recommandée","Configuration recommandée",[353,3566,3569],{"className":355,"code":3567,"filename":3568,"language":358,"meta":359,"style":359},"import 'package:flutter/foundation.dart';\nimport 'package:qora/qora.dart';\n\n/// Singleton : créer une fois, injecter partout via DI ou QoraScope.\nfinal qoraClient = QoraClient(\n  config: QoraClientConfig(\n    defaultOptions: QoraOptions(\n      staleTime: Duration(minutes: 5),\n      gcTime: Duration(minutes: 10),\n      retryCount: 3,\n    ),\n    debugMode: kDebugMode,\n    maxCacheSize: 200,\n    refetchOnMount: true,\n    errorMapper: (error, stack) => QoraException(\n      '$error',\n      originalError: error,\n      stackTrace: stack,\n    ),\n  ),\n);\n","lib/core/qora.dart",[361,3570,3571,3581,3590,3594,3599,3612,3622,3632,3650,3669,3680,3686,3696,3706,3716,3738,3751,3763,3776,3783,3790],{"__ignoreMap":359},[364,3572,3573,3576,3579],{"class":366,"line":367},[364,3574,3575],{"class":493},"import",[364,3577,3578],{"class":893}," 'package:flutter/foundation.dart'",[364,3580,420],{"class":379},[364,3582,3583,3585,3588],{"class":366,"line":401},[364,3584,3575],{"class":493},[364,3586,3587],{"class":893}," 'package:qora/qora.dart'",[364,3589,420],{"class":379},[364,3591,3592],{"class":366,"line":423},[364,3593,427],{"emptyLinePlaceholder":426},[364,3595,3596],{"class":366,"line":430},[364,3597,3598],{"class":397},"/// Singleton : créer une fois, injecter partout via DI ou QoraScope.\n",[364,3600,3601,3603,3606,3608,3610],{"class":366,"line":436},[364,3602,405],{"class":404},[364,3604,3605],{"class":373}," qoraClient ",[364,3607,411],{"class":379},[364,3609,414],{"class":370},[364,3611,447],{"class":373},[364,3613,3614,3616,3618,3620],{"class":366,"line":450},[364,3615,453],{"class":373},[364,3617,456],{"class":379},[364,3619,459],{"class":370},[364,3621,447],{"class":373},[364,3623,3624,3626,3628,3630],{"class":366,"line":464},[364,3625,467],{"class":373},[364,3627,456],{"class":379},[364,3629,472],{"class":370},[364,3631,447],{"class":373},[364,3633,3634,3636,3638,3640,3642,3644,3646,3648],{"class":366,"line":477},[364,3635,480],{"class":373},[364,3637,456],{"class":379},[364,3639,485],{"class":370},[364,3641,488],{"class":373},[364,3643,456],{"class":379},[364,3645,494],{"class":493},[364,3647,497],{"class":373},[364,3649,500],{"class":379},[364,3651,3652,3655,3657,3659,3661,3663,3665,3667],{"class":366,"line":503},[364,3653,3654],{"class":373},"      gcTime",[364,3656,456],{"class":379},[364,3658,485],{"class":370},[364,3660,488],{"class":373},[364,3662,456],{"class":379},[364,3664,2737],{"class":493},[364,3666,497],{"class":373},[364,3668,500],{"class":379},[364,3670,3671,3673,3675,3678],{"class":366,"line":516},[364,3672,506],{"class":373},[364,3674,456],{"class":379},[364,3676,3677],{"class":493}," 3",[364,3679,500],{"class":379},[364,3681,3682,3684],{"class":366,"line":524},[364,3683,519],{"class":373},[364,3685,500],{"class":379},[364,3687,3688,3690,3692,3694],{"class":366,"line":537},[364,3689,527],{"class":373},[364,3691,456],{"class":379},[364,3693,532],{"class":373},[364,3695,500],{"class":379},[364,3697,3698,3700,3702,3704],{"class":366,"line":550},[364,3699,540],{"class":373},[364,3701,456],{"class":379},[364,3703,545],{"class":493},[364,3705,500],{"class":379},[364,3707,3708,3711,3713],{"class":366,"line":558},[364,3709,3710],{"class":373},"    refetchOnMount",[364,3712,456],{"class":379},[364,3714,3715],{"class":379}," true,\n",[364,3717,3718,3721,3723,3726,3728,3731,3733,3736],{"class":366,"line":1427},[364,3719,3720],{"class":373},"    errorMapper",[364,3722,456],{"class":379},[364,3724,3725],{"class":373}," (error",[364,3727,897],{"class":379},[364,3729,3730],{"class":373}," stack) ",[364,3732,915],{"class":379},[364,3734,3735],{"class":370}," QoraException",[364,3737,447],{"class":373},[364,3739,3740,3743,3745,3747,3749],{"class":366,"line":1435},[364,3741,3742],{"class":893},"      '",[364,3744,1414],{"class":373},[364,3746,1418],{"class":1417},[364,3748,1411],{"class":893},[364,3750,500],{"class":379},[364,3752,3753,3756,3758,3761],{"class":366,"line":1443},[364,3754,3755],{"class":373},"      originalError",[364,3757,456],{"class":379},[364,3759,3760],{"class":373}," error",[364,3762,500],{"class":379},[364,3764,3766,3769,3771,3774],{"class":366,"line":3765},18,[364,3767,3768],{"class":373},"      stackTrace",[364,3770,456],{"class":379},[364,3772,3773],{"class":373}," stack",[364,3775,500],{"class":379},[364,3777,3779,3781],{"class":366,"line":3778},19,[364,3780,519],{"class":373},[364,3782,500],{"class":379},[364,3784,3786,3788],{"class":366,"line":3785},20,[364,3787,553],{"class":373},[364,3789,500],{"class":379},[364,3791,3793,3795],{"class":366,"line":3792},21,[364,3794,497],{"class":373},[364,3796,420],{"class":379},[3798,3799,3800],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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}",{"title":359,"searchDepth":401,"depth":401,"links":3802},[3803,3804,3808,3813,3817,3821,3828,3833,3837,3840,3844],{"id":350,"depth":401,"text":351},{"id":568,"depth":401,"text":569,"children":3805},[3806,3807],{"id":573,"depth":423,"text":573},{"id":595,"depth":423,"text":598},{"id":687,"depth":401,"text":688,"children":3809},[3810,3811,3812],{"id":691,"depth":423,"text":694},{"id":1008,"depth":423,"text":1011},{"id":1451,"depth":423,"text":1451},{"id":1609,"depth":401,"text":1610,"children":3814},[3815,3816],{"id":1613,"depth":423,"text":1616},{"id":1708,"depth":423,"text":1711},{"id":1842,"depth":401,"text":1843,"children":3818},[3819,3820],{"id":1846,"depth":423,"text":1849},{"id":1924,"depth":423,"text":1927},{"id":2102,"depth":401,"text":2103,"children":3822},[3823,3824,3825,3826,3827],{"id":2106,"depth":423,"text":2106},{"id":2181,"depth":423,"text":2184},{"id":2342,"depth":423,"text":2345},{"id":2442,"depth":423,"text":2445},{"id":2758,"depth":423,"text":2761},{"id":2925,"depth":401,"text":2926,"children":3829},[3830,3831,3832],{"id":2929,"depth":423,"text":2932},{"id":3001,"depth":423,"text":3004},{"id":3035,"depth":423,"text":3035},{"id":3090,"depth":401,"text":3091,"children":3834},[3835,3836],{"id":3094,"depth":423,"text":3097},{"id":3303,"depth":423,"text":3306},{"id":3362,"depth":401,"text":3363,"children":3838},[3839],{"id":3366,"depth":423,"text":3369},{"id":3464,"depth":401,"text":3465,"children":3841},[3842,3843],{"id":3468,"depth":423,"text":3471},{"id":3513,"depth":423,"text":3513},{"id":3563,"depth":401,"text":3564},"Le moteur central de Qora : gère les requêtes, le cache, la déduplication, les retries et l'état réactif.","md",null,{},{"icon":205},{"title":202,"description":3845},"sEydKLcqArALwwJDWyKkUCGHhFEPRE4JPfbsHD03EzM",[3853,3855],{"title":192,"path":193,"stem":194,"description":3854,"children":-1},"[object Object]",{"title":207,"path":208,"stem":209,"description":3856,"icon":60,"children":-1},"Clé de requête typée et immuable avec égalité structurelle. Supporte à la fois la syntaxe List brute et QoraKey.",1794040404764]