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