[{"data":1,"prerenderedAt":1765},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-recipes-dependent-queries":342,"-fr-recipes-dependent-queries-surround":1760},[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":167,"body":344,"description":1753,"extension":1754,"links":1755,"meta":1756,"navigation":1757,"path":168,"seo":1758,"stem":169,"__hash__":1759},"docs_fr/fr/04.recipes/07.dependent-queries.md",{"type":345,"value":346,"toc":1741},"minimark",[347,356,359,367,374,582,584,588,644,646,652,658,1033,1039,1041,1050,1056,1325,1327,1331,1340,1584,1586,1592,1597,1696,1702,1704,1708,1737],[348,349,350,351,355],"p",{},"Une ",[352,353,354],"strong",{},"requête dépendante"," ne se déclenche qu'après qu'une autre requête ait chargé ses données avec succès. C'est le pattern pour la récupération de données séquentielle : charger d'abord la session, puis le profil utilisateur ; charger un projet, puis ses membres.",[357,358],"hr",{},[360,361,363],"h2",{"id":362},"dependson",[364,365,366],"code",{},"dependsOn",[348,368,369,370,373],{},"Définir ",[364,371,372],{},"QoraOptions.dependsOn"," à la clé de la requête prérequise. Qora s'abonne en interne et déclenche le fetch dépendant quand les données deviennent disponibles.",[375,376,382],"pre",{"className":377,"code":378,"filename":379,"language":380,"meta":381,"style":381},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Étape 1 : récupérer la session\nclient.watchQuery\u003CSession>(\n  key: ['session'],\n  fetcher: () => api.getSession(),\n);\n\n// Étape 2 : se déclenche automatiquement une fois que ['session'] a des données\nclient.watchQuery\u003CUser>(\n  key: ['user'],\n  fetcher: () => api.getUser(session!.userId),\n  options: QoraOptions(dependsOn: ['session']),\n);\n","main.dart","dart","",[364,383,384,393,418,440,467,476,483,489,505,521,550,575],{"__ignoreMap":381},[385,386,389],"span",{"class":387,"line":388},"line",1,[385,390,392],{"class":391},"sHwdD","// Étape 1 : récupérer la session\n",[385,394,396,400,404,408,411,415],{"class":387,"line":395},2,[385,397,399],{"class":398},"sTEyZ","client",[385,401,403],{"class":402},"sMK4o",".",[385,405,407],{"class":406},"s2Zo4","watchQuery",[385,409,410],{"class":398},"\u003C",[385,412,414],{"class":413},"sBMFI","Session",[385,416,417],{"class":398},">(\n",[385,419,421,424,427,430,434,437],{"class":387,"line":420},3,[385,422,423],{"class":398},"  key",[385,425,426],{"class":402},":",[385,428,429],{"class":398}," [",[385,431,433],{"class":432},"sfazB","'session'",[385,435,436],{"class":398},"]",[385,438,439],{"class":402},",\n",[385,441,443,446,448,451,454,457,459,462,465],{"class":387,"line":442},4,[385,444,445],{"class":398},"  fetcher",[385,447,426],{"class":402},[385,449,450],{"class":398}," () ",[385,452,453],{"class":402},"=>",[385,455,456],{"class":398}," api",[385,458,403],{"class":402},[385,460,461],{"class":406},"getSession",[385,463,464],{"class":398},"()",[385,466,439],{"class":402},[385,468,470,473],{"class":387,"line":469},5,[385,471,472],{"class":398},")",[385,474,475],{"class":402},";\n",[385,477,479],{"class":387,"line":478},6,[385,480,482],{"emptyLinePlaceholder":481},true,"\n",[385,484,486],{"class":387,"line":485},7,[385,487,488],{"class":391},"// Étape 2 : se déclenche automatiquement une fois que ['session'] a des données\n",[385,490,492,494,496,498,500,503],{"class":387,"line":491},8,[385,493,399],{"class":398},[385,495,403],{"class":402},[385,497,407],{"class":406},[385,499,410],{"class":398},[385,501,502],{"class":413},"User",[385,504,417],{"class":398},[385,506,508,510,512,514,517,519],{"class":387,"line":507},9,[385,509,423],{"class":398},[385,511,426],{"class":402},[385,513,429],{"class":398},[385,515,516],{"class":432},"'user'",[385,518,436],{"class":398},[385,520,439],{"class":402},[385,522,524,526,528,530,532,534,536,539,542,545,548],{"class":387,"line":523},10,[385,525,445],{"class":398},[385,527,426],{"class":402},[385,529,450],{"class":398},[385,531,453],{"class":402},[385,533,456],{"class":398},[385,535,403],{"class":402},[385,537,538],{"class":406},"getUser",[385,540,541],{"class":398},"(session",[385,543,544],{"class":402},"!.",[385,546,547],{"class":398},"userId)",[385,549,439],{"class":402},[385,551,553,556,558,561,564,566,568,570,573],{"class":387,"line":552},11,[385,554,555],{"class":398},"  options",[385,557,426],{"class":402},[385,559,560],{"class":413}," QoraOptions",[385,562,563],{"class":398},"(dependsOn",[385,565,426],{"class":402},[385,567,429],{"class":398},[385,569,433],{"class":432},[385,571,572],{"class":398},"])",[385,574,439],{"class":402},[385,576,578,580],{"class":387,"line":577},12,[385,579,472],{"class":398},[385,581,475],{"class":402},[357,583],{},[360,585,587],{"id":586},"comportement-par-api","Comportement par API",[589,590,591,604],"table",{},[592,593,594],"thead",{},[595,596,597,601],"tr",{},[598,599,600],"th",{},"API",[598,602,603],{},"Comportement quand la dépendance n'est pas résolue",[605,606,607,620,634],"tbody",{},[595,608,609,614],{},[610,611,612],"td",{},[364,613,407],{},[610,615,616,617],{},"S'abonne de façon réactive ; se déclenche quand la dépendance atteint ",[364,618,619],{},"Success",[595,621,622,627],{},[610,623,624],{},[364,625,626],{},"fetchQuery",[610,628,629,630,633],{},"Lève ",[364,631,632],{},"StateError"," immédiatement. Appeler après la résolution de la dépendance.",[595,635,636,641],{},[610,637,638],{},[364,639,640],{},"prefetch",[610,642,643],{},"Ignore silencieusement. Sûr à appeler de façon spéculative.",[357,645],{},[360,647,649,650],{"id":648},"dans-flutter-qorabuilder","Dans Flutter : ",[364,651,108],{},[348,653,654,655,657],{},"Le pattern Flutter le plus propre est d'imbriquer un ",[364,656,108],{}," pour la requête dépendante dans le cas success du parent :",[375,659,662],{"className":377,"code":660,"filename":661,"language":380,"meta":381,"style":381},"QoraBuilder\u003CSession>(\n  queryKey: ['session'],\n  fetcher: () => api.getSession(),\n  builder: (context, sessionState, refetch) => switch (sessionState) {\n    Loading() || Initial() => const CircularProgressIndicator(),\n    Failure(:final error) => ErrorWidget('$error'),\n    Success(:final data) => QoraBuilder\u003CUser>(\n      queryKey: ['user', data.userId],\n      fetcher: () => api.getUser(data.userId),\n      builder: (context, userState, _) => switch (userState) {\n        Success(:final data) => ProfileCard(data),\n        Loading() => const CircularProgressIndicator(),\n        Failure(:final error) => ErrorWidget('$error'),\n        Initial() => const SizedBox.shrink(),\n      },\n    ),\n  },\n)\n","profile_screen.dart",[364,663,664,674,689,709,739,768,807,832,855,881,907,930,947,979,1003,1011,1019,1027],{"__ignoreMap":381},[385,665,666,668,670,672],{"class":387,"line":388},[385,667,108],{"class":413},[385,669,410],{"class":398},[385,671,414],{"class":413},[385,673,417],{"class":398},[385,675,676,679,681,683,685,687],{"class":387,"line":395},[385,677,678],{"class":398},"  queryKey",[385,680,426],{"class":402},[385,682,429],{"class":398},[385,684,433],{"class":432},[385,686,436],{"class":398},[385,688,439],{"class":402},[385,690,691,693,695,697,699,701,703,705,707],{"class":387,"line":420},[385,692,445],{"class":398},[385,694,426],{"class":402},[385,696,450],{"class":398},[385,698,453],{"class":402},[385,700,456],{"class":398},[385,702,403],{"class":402},[385,704,461],{"class":406},[385,706,464],{"class":398},[385,708,439],{"class":402},[385,710,711,714,716,719,722,725,727,730,732,736],{"class":387,"line":442},[385,712,713],{"class":398},"  builder",[385,715,426],{"class":402},[385,717,718],{"class":398}," (context",[385,720,721],{"class":402},",",[385,723,724],{"class":398}," sessionState",[385,726,721],{"class":402},[385,728,729],{"class":398}," refetch) ",[385,731,453],{"class":402},[385,733,735],{"class":734},"s7zQu"," switch",[385,737,738],{"class":398}," (sessionState) {\n",[385,740,741,744,747,750,753,755,757,761,764,766],{"class":387,"line":469},[385,742,743],{"class":413},"    Loading",[385,745,746],{"class":398},"() ",[385,748,749],{"class":402},"||",[385,751,752],{"class":413}," Initial",[385,754,746],{"class":398},[385,756,453],{"class":402},[385,758,760],{"class":759},"spNyl"," const",[385,762,763],{"class":413}," CircularProgressIndicator",[385,765,464],{"class":398},[385,767,439],{"class":402},[385,769,770,773,776,778,781,784,786,789,791,794,797,801,803,805],{"class":387,"line":478},[385,771,772],{"class":413},"    Failure",[385,774,775],{"class":398},"(",[385,777,426],{"class":402},[385,779,780],{"class":759},"final",[385,782,783],{"class":398}," error) ",[385,785,453],{"class":402},[385,787,788],{"class":413}," ErrorWidget",[385,790,775],{"class":398},[385,792,793],{"class":432},"'",[385,795,796],{"class":398},"$",[385,798,800],{"class":799},"sHdIc","error",[385,802,793],{"class":432},[385,804,472],{"class":398},[385,806,439],{"class":402},[385,808,809,812,814,816,818,821,823,826,828,830],{"class":387,"line":485},[385,810,811],{"class":413},"    Success",[385,813,775],{"class":398},[385,815,426],{"class":402},[385,817,780],{"class":759},[385,819,820],{"class":398}," data) ",[385,822,453],{"class":402},[385,824,825],{"class":413}," QoraBuilder",[385,827,410],{"class":398},[385,829,502],{"class":413},[385,831,417],{"class":398},[385,833,834,837,839,841,843,845,848,850,853],{"class":387,"line":491},[385,835,836],{"class":398},"      queryKey",[385,838,426],{"class":402},[385,840,429],{"class":398},[385,842,516],{"class":432},[385,844,721],{"class":402},[385,846,847],{"class":398}," data",[385,849,403],{"class":402},[385,851,852],{"class":398},"userId]",[385,854,439],{"class":402},[385,856,857,860,862,864,866,868,870,872,875,877,879],{"class":387,"line":507},[385,858,859],{"class":398},"      fetcher",[385,861,426],{"class":402},[385,863,450],{"class":398},[385,865,453],{"class":402},[385,867,456],{"class":398},[385,869,403],{"class":402},[385,871,538],{"class":406},[385,873,874],{"class":398},"(data",[385,876,403],{"class":402},[385,878,547],{"class":398},[385,880,439],{"class":402},[385,882,883,886,888,890,892,895,897,900,902,904],{"class":387,"line":523},[385,884,885],{"class":398},"      builder",[385,887,426],{"class":402},[385,889,718],{"class":398},[385,891,721],{"class":402},[385,893,894],{"class":398}," userState",[385,896,721],{"class":402},[385,898,899],{"class":398}," _) ",[385,901,453],{"class":402},[385,903,735],{"class":734},[385,905,906],{"class":398}," (userState) {\n",[385,908,909,912,914,916,918,920,922,925,928],{"class":387,"line":552},[385,910,911],{"class":413},"        Success",[385,913,775],{"class":398},[385,915,426],{"class":402},[385,917,780],{"class":759},[385,919,820],{"class":398},[385,921,453],{"class":402},[385,923,924],{"class":413}," ProfileCard",[385,926,927],{"class":398},"(data)",[385,929,439],{"class":402},[385,931,932,935,937,939,941,943,945],{"class":387,"line":577},[385,933,934],{"class":413},"        Loading",[385,936,746],{"class":398},[385,938,453],{"class":402},[385,940,760],{"class":759},[385,942,763],{"class":413},[385,944,464],{"class":398},[385,946,439],{"class":402},[385,948,950,953,955,957,959,961,963,965,967,969,971,973,975,977],{"class":387,"line":949},13,[385,951,952],{"class":413},"        Failure",[385,954,775],{"class":398},[385,956,426],{"class":402},[385,958,780],{"class":759},[385,960,783],{"class":398},[385,962,453],{"class":402},[385,964,788],{"class":413},[385,966,775],{"class":398},[385,968,793],{"class":432},[385,970,796],{"class":398},[385,972,800],{"class":799},[385,974,793],{"class":432},[385,976,472],{"class":398},[385,978,439],{"class":402},[385,980,982,985,987,989,991,994,996,999,1001],{"class":387,"line":981},14,[385,983,984],{"class":413},"        Initial",[385,986,746],{"class":398},[385,988,453],{"class":402},[385,990,760],{"class":759},[385,992,993],{"class":413}," SizedBox",[385,995,403],{"class":402},[385,997,998],{"class":406},"shrink",[385,1000,464],{"class":398},[385,1002,439],{"class":402},[385,1004,1006,1009],{"class":387,"line":1005},15,[385,1007,1008],{"class":398},"      }",[385,1010,439],{"class":402},[385,1012,1014,1017],{"class":387,"line":1013},16,[385,1015,1016],{"class":398},"    )",[385,1018,439],{"class":402},[385,1020,1022,1025],{"class":387,"line":1021},17,[385,1023,1024],{"class":398},"  }",[385,1026,439],{"class":402},[385,1028,1030],{"class":387,"line":1029},18,[385,1031,1032],{"class":398},")\n",[348,1034,1035,1036,1038],{},"Le ",[364,1037,108],{}," interne ne se monte que quand la session est prête, donc le fetch dépendant ne se déclenche jamais prématurément.",[357,1040],{},[360,1042,1044,1045,1047,1048],{"id":1043},"utiliser-dependson-avec-watchquery","Utiliser ",[364,1046,366],{}," avec ",[364,1049,407],{},[348,1051,1052,1053,1055],{},"Quand les deux requêtes doivent être actives simultanément (ex. dans une couche repository sans Flutter), utiliser ",[364,1054,366],{}," :",[375,1057,1060],{"className":377,"code":1058,"filename":1059,"language":380,"meta":381,"style":381},"class UserRepository {\n  final QoraClient _client;\n\n  Stream\u003CQoraState\u003CUser>> watchCurrentUser() {\n    // S'assurer que la requête de session est en cours\n    _client.watchQuery\u003CSession>(\n      key: ['session'],\n      fetcher: () => api.getSession(),\n    );\n\n    // Cette requête attend que ['session'] ait des données avant de fetcher\n    return _client.watchQuery\u003CUser>(\n      key: ['user'],\n      fetcher: () async {\n        final session = _client.getQueryData\u003CSession>(['session'])!;\n        return api.getUser(session.userId);\n      },\n      options: const QoraOptions(dependsOn: ['session']),\n    );\n  }\n}\n","user_repository.dart",[364,1061,1062,1073,1086,1090,1112,1117,1132,1147,1167,1173,1177,1182,1199,1213,1226,1258,1277,1283,1306,1313,1319],{"__ignoreMap":381},[385,1063,1064,1067,1070],{"class":387,"line":388},[385,1065,1066],{"class":402},"class",[385,1068,1069],{"class":413}," UserRepository",[385,1071,1072],{"class":398}," {\n",[385,1074,1075,1078,1081,1084],{"class":387,"line":395},[385,1076,1077],{"class":759},"  final",[385,1079,1080],{"class":413}," QoraClient",[385,1082,1083],{"class":398}," _client",[385,1085,475],{"class":402},[385,1087,1088],{"class":387,"line":420},[385,1089,482],{"emptyLinePlaceholder":481},[385,1091,1092,1095,1097,1099,1101,1103,1106,1109],{"class":387,"line":442},[385,1093,1094],{"class":413},"  Stream",[385,1096,410],{"class":398},[385,1098,211],{"class":413},[385,1100,410],{"class":398},[385,1102,502],{"class":413},[385,1104,1105],{"class":398},">> ",[385,1107,1108],{"class":406},"watchCurrentUser",[385,1110,1111],{"class":398},"() {\n",[385,1113,1114],{"class":387,"line":469},[385,1115,1116],{"class":391},"    // S'assurer que la requête de session est en cours\n",[385,1118,1119,1122,1124,1126,1128,1130],{"class":387,"line":478},[385,1120,1121],{"class":398},"    _client",[385,1123,403],{"class":402},[385,1125,407],{"class":406},[385,1127,410],{"class":398},[385,1129,414],{"class":413},[385,1131,417],{"class":398},[385,1133,1134,1137,1139,1141,1143,1145],{"class":387,"line":485},[385,1135,1136],{"class":398},"      key",[385,1138,426],{"class":402},[385,1140,429],{"class":398},[385,1142,433],{"class":432},[385,1144,436],{"class":398},[385,1146,439],{"class":402},[385,1148,1149,1151,1153,1155,1157,1159,1161,1163,1165],{"class":387,"line":491},[385,1150,859],{"class":398},[385,1152,426],{"class":402},[385,1154,450],{"class":398},[385,1156,453],{"class":402},[385,1158,456],{"class":398},[385,1160,403],{"class":402},[385,1162,461],{"class":406},[385,1164,464],{"class":398},[385,1166,439],{"class":402},[385,1168,1169,1171],{"class":387,"line":507},[385,1170,1016],{"class":398},[385,1172,475],{"class":402},[385,1174,1175],{"class":387,"line":523},[385,1176,482],{"emptyLinePlaceholder":481},[385,1178,1179],{"class":387,"line":552},[385,1180,1181],{"class":391},"    // Cette requête attend que ['session'] ait des données avant de fetcher\n",[385,1183,1184,1187,1189,1191,1193,1195,1197],{"class":387,"line":577},[385,1185,1186],{"class":734},"    return",[385,1188,1083],{"class":398},[385,1190,403],{"class":402},[385,1192,407],{"class":406},[385,1194,410],{"class":398},[385,1196,502],{"class":413},[385,1198,417],{"class":398},[385,1200,1201,1203,1205,1207,1209,1211],{"class":387,"line":949},[385,1202,1136],{"class":398},[385,1204,426],{"class":402},[385,1206,429],{"class":398},[385,1208,516],{"class":432},[385,1210,436],{"class":398},[385,1212,439],{"class":402},[385,1214,1215,1217,1219,1221,1224],{"class":387,"line":981},[385,1216,859],{"class":398},[385,1218,426],{"class":402},[385,1220,450],{"class":398},[385,1222,1223],{"class":734},"async",[385,1225,1072],{"class":398},[385,1227,1228,1231,1234,1237,1239,1241,1244,1246,1248,1251,1253,1255],{"class":387,"line":1005},[385,1229,1230],{"class":759},"        final",[385,1232,1233],{"class":398}," session ",[385,1235,1236],{"class":402},"=",[385,1238,1083],{"class":398},[385,1240,403],{"class":402},[385,1242,1243],{"class":406},"getQueryData",[385,1245,410],{"class":398},[385,1247,414],{"class":413},[385,1249,1250],{"class":398},">([",[385,1252,433],{"class":432},[385,1254,572],{"class":398},[385,1256,1257],{"class":402},"!;\n",[385,1259,1260,1263,1265,1267,1269,1271,1273,1275],{"class":387,"line":1013},[385,1261,1262],{"class":734},"        return",[385,1264,456],{"class":398},[385,1266,403],{"class":402},[385,1268,538],{"class":406},[385,1270,541],{"class":398},[385,1272,403],{"class":402},[385,1274,547],{"class":398},[385,1276,475],{"class":402},[385,1278,1279,1281],{"class":387,"line":1021},[385,1280,1008],{"class":398},[385,1282,439],{"class":402},[385,1284,1285,1288,1290,1292,1294,1296,1298,1300,1302,1304],{"class":387,"line":1029},[385,1286,1287],{"class":398},"      options",[385,1289,426],{"class":402},[385,1291,760],{"class":759},[385,1293,560],{"class":413},[385,1295,563],{"class":398},[385,1297,426],{"class":402},[385,1299,429],{"class":398},[385,1301,433],{"class":432},[385,1303,572],{"class":398},[385,1305,439],{"class":402},[385,1307,1309,1311],{"class":387,"line":1308},19,[385,1310,1016],{"class":398},[385,1312,475],{"class":402},[385,1314,1316],{"class":387,"line":1315},20,[385,1317,1318],{"class":398},"  }\n",[385,1320,1322],{"class":387,"line":1321},21,[385,1323,1324],{"class":398},"}\n",[357,1326],{},[360,1328,1330],{"id":1329},"chaîner-plusieurs-dépendances","Chaîner plusieurs dépendances",[348,1332,1333,1334,1336,1337,1339],{},"Une requête ne peut déclarer qu'un seul ",[364,1335,366],{},". Pour une chaîne de trois requêtes, imbriquer le ",[364,1338,366],{}," à chaque étape :",[375,1341,1343],{"className":377,"code":1342,"filename":379,"language":380,"meta":381,"style":381},"// 1 : session\nclient.watchQuery\u003CSession>(key: ['session'], fetcher: () => api.getSession());\n\n// 2 : user (dépend de session)\nclient.watchQuery\u003CUser>(\n  key: ['user'],\n  fetcher: () => api.getUser(session!.userId),\n  options: const QoraOptions(dependsOn: ['session']),\n);\n\n// 3 : projects (dépend de user)\nclient.watchQuery\u003CList\u003CProject>>(\n  key: ['projects'],\n  fetcher: () => api.getProjects(user!.orgId),\n  options: const QoraOptions(dependsOn: ['user']),\n);\n",[364,1344,1345,1350,1395,1399,1404,1418,1432,1456,1478,1484,1488,1493,1514,1529,1556,1578],{"__ignoreMap":381},[385,1346,1347],{"class":387,"line":388},[385,1348,1349],{"class":391},"// 1 : session\n",[385,1351,1352,1354,1356,1358,1360,1362,1365,1367,1369,1371,1373,1375,1378,1380,1382,1384,1386,1388,1390,1393],{"class":387,"line":395},[385,1353,399],{"class":398},[385,1355,403],{"class":402},[385,1357,407],{"class":406},[385,1359,410],{"class":398},[385,1361,414],{"class":413},[385,1363,1364],{"class":398},">(key",[385,1366,426],{"class":402},[385,1368,429],{"class":398},[385,1370,433],{"class":432},[385,1372,436],{"class":398},[385,1374,721],{"class":402},[385,1376,1377],{"class":398}," fetcher",[385,1379,426],{"class":402},[385,1381,450],{"class":398},[385,1383,453],{"class":402},[385,1385,456],{"class":398},[385,1387,403],{"class":402},[385,1389,461],{"class":406},[385,1391,1392],{"class":398},"())",[385,1394,475],{"class":402},[385,1396,1397],{"class":387,"line":420},[385,1398,482],{"emptyLinePlaceholder":481},[385,1400,1401],{"class":387,"line":442},[385,1402,1403],{"class":391},"// 2 : user (dépend de session)\n",[385,1405,1406,1408,1410,1412,1414,1416],{"class":387,"line":469},[385,1407,399],{"class":398},[385,1409,403],{"class":402},[385,1411,407],{"class":406},[385,1413,410],{"class":398},[385,1415,502],{"class":413},[385,1417,417],{"class":398},[385,1419,1420,1422,1424,1426,1428,1430],{"class":387,"line":478},[385,1421,423],{"class":398},[385,1423,426],{"class":402},[385,1425,429],{"class":398},[385,1427,516],{"class":432},[385,1429,436],{"class":398},[385,1431,439],{"class":402},[385,1433,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454],{"class":387,"line":485},[385,1435,445],{"class":398},[385,1437,426],{"class":402},[385,1439,450],{"class":398},[385,1441,453],{"class":402},[385,1443,456],{"class":398},[385,1445,403],{"class":402},[385,1447,538],{"class":406},[385,1449,541],{"class":398},[385,1451,544],{"class":402},[385,1453,547],{"class":398},[385,1455,439],{"class":402},[385,1457,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476],{"class":387,"line":491},[385,1459,555],{"class":398},[385,1461,426],{"class":402},[385,1463,760],{"class":759},[385,1465,560],{"class":413},[385,1467,563],{"class":398},[385,1469,426],{"class":402},[385,1471,429],{"class":398},[385,1473,433],{"class":432},[385,1475,572],{"class":398},[385,1477,439],{"class":402},[385,1479,1480,1482],{"class":387,"line":507},[385,1481,472],{"class":398},[385,1483,475],{"class":402},[385,1485,1486],{"class":387,"line":523},[385,1487,482],{"emptyLinePlaceholder":481},[385,1489,1490],{"class":387,"line":552},[385,1491,1492],{"class":391},"// 3 : projects (dépend de user)\n",[385,1494,1495,1497,1499,1501,1503,1506,1508,1511],{"class":387,"line":577},[385,1496,399],{"class":398},[385,1498,403],{"class":402},[385,1500,407],{"class":406},[385,1502,410],{"class":398},[385,1504,1505],{"class":413},"List",[385,1507,410],{"class":398},[385,1509,1510],{"class":413},"Project",[385,1512,1513],{"class":398},">>(\n",[385,1515,1516,1518,1520,1522,1525,1527],{"class":387,"line":949},[385,1517,423],{"class":398},[385,1519,426],{"class":402},[385,1521,429],{"class":398},[385,1523,1524],{"class":432},"'projects'",[385,1526,436],{"class":398},[385,1528,439],{"class":402},[385,1530,1531,1533,1535,1537,1539,1541,1543,1546,1549,1551,1554],{"class":387,"line":981},[385,1532,445],{"class":398},[385,1534,426],{"class":402},[385,1536,450],{"class":398},[385,1538,453],{"class":402},[385,1540,456],{"class":398},[385,1542,403],{"class":402},[385,1544,1545],{"class":406},"getProjects",[385,1547,1548],{"class":398},"(user",[385,1550,544],{"class":402},[385,1552,1553],{"class":398},"orgId)",[385,1555,439],{"class":402},[385,1557,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576],{"class":387,"line":1005},[385,1559,555],{"class":398},[385,1561,426],{"class":402},[385,1563,760],{"class":759},[385,1565,560],{"class":413},[385,1567,563],{"class":398},[385,1569,426],{"class":402},[385,1571,429],{"class":398},[385,1573,516],{"class":432},[385,1575,572],{"class":398},[385,1577,439],{"class":402},[385,1579,1580,1582],{"class":387,"line":1013},[385,1581,472],{"class":398},[385,1583,475],{"class":402},[357,1585],{},[360,1587,1589,1591],{"id":1588},"fetchquery-et-dépendances",[364,1590,626],{}," et dépendances",[348,1593,1594,1596],{},[364,1595,626],{}," lève une exception immédiatement si la dépendance n'est pas résolue. L'utiliser uniquement après avoir vérifié que la dépendance a des données :",[375,1598,1600],{"className":377,"code":1599,"filename":379,"language":380,"meta":381,"style":381},"// Sûr uniquement une fois que ['session'] est à l'état Success\nfinal user = await client.fetchQuery\u003CUser>(\n  key: ['user'],\n  fetcher: () => api.getUser(session!.userId),\n  options: QoraOptions(dependsOn: ['session']),\n);\n",[364,1601,1602,1607,1632,1646,1670,1690],{"__ignoreMap":381},[385,1603,1604],{"class":387,"line":388},[385,1605,1606],{"class":391},"// Sûr uniquement une fois que ['session'] est à l'état Success\n",[385,1608,1609,1611,1614,1616,1619,1622,1624,1626,1628,1630],{"class":387,"line":395},[385,1610,780],{"class":759},[385,1612,1613],{"class":398}," user ",[385,1615,1236],{"class":402},[385,1617,1618],{"class":734}," await",[385,1620,1621],{"class":398}," client",[385,1623,403],{"class":402},[385,1625,626],{"class":406},[385,1627,410],{"class":398},[385,1629,502],{"class":413},[385,1631,417],{"class":398},[385,1633,1634,1636,1638,1640,1642,1644],{"class":387,"line":420},[385,1635,423],{"class":398},[385,1637,426],{"class":402},[385,1639,429],{"class":398},[385,1641,516],{"class":432},[385,1643,436],{"class":398},[385,1645,439],{"class":402},[385,1647,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668],{"class":387,"line":442},[385,1649,445],{"class":398},[385,1651,426],{"class":402},[385,1653,450],{"class":398},[385,1655,453],{"class":402},[385,1657,456],{"class":398},[385,1659,403],{"class":402},[385,1661,538],{"class":406},[385,1663,541],{"class":398},[385,1665,544],{"class":402},[385,1667,547],{"class":398},[385,1669,439],{"class":402},[385,1671,1672,1674,1676,1678,1680,1682,1684,1686,1688],{"class":387,"line":469},[385,1673,555],{"class":398},[385,1675,426],{"class":402},[385,1677,560],{"class":413},[385,1679,563],{"class":398},[385,1681,426],{"class":402},[385,1683,429],{"class":398},[385,1685,433],{"class":432},[385,1687,572],{"class":398},[385,1689,439],{"class":402},[385,1691,1692,1694],{"class":387,"line":478},[385,1693,472],{"class":398},[385,1695,475],{"class":402},[348,1697,1698,1699,1701],{},"Pour le code réactif, préférer ",[364,1700,407],{}," : il gère automatiquement le timing.",[357,1703],{},[360,1705,1707],{"id":1706},"voir-aussi","Voir aussi",[1709,1710,1711,1726,1732],"ul",{},[1712,1713,1714,1719,1720,1722,1723],"li",{},[1715,1716,1718],"a",{"href":1717},"../api-reference/qora-options","API QoraOptions"," : ",[364,1721,366],{},", ",[364,1724,1725],{},"enabled",[1712,1727,1728,1731],{},[1715,1729,108],{"href":1730},"../flutter-integration/qora-builder"," : Binding de requête au niveau widget",[1712,1733,1734],{},[1715,1735,21],{"href":1736},"../getting-started/quick-start",[1738,1739,1740],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .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 .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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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":381,"searchDepth":395,"depth":395,"links":1742},[1743,1744,1745,1747,1749,1750,1752],{"id":362,"depth":395,"text":366},{"id":586,"depth":395,"text":587},{"id":648,"depth":395,"text":1746},"Dans Flutter : QoraBuilder",{"id":1043,"depth":395,"text":1748},"Utiliser dependsOn avec watchQuery",{"id":1329,"depth":395,"text":1330},{"id":1588,"depth":395,"text":1751},"fetchQuery et dépendances",{"id":1706,"depth":395,"text":1707},"Utiliser QoraOptions.dependsOn pour chaîner les requêtes de sorte qu'une ne se déclenche qu'après la résolution d'une autre.","md",null,{},{"icon":170},{"title":167,"description":1753},"D2TCFZCwLtGsmgMqWW4Qn4yAY9ktgwXjptUcRtTdjRU",[1761,1763],{"title":163,"path":164,"stem":165,"description":1762,"icon":121,"children":-1},"Implémenter la pagination avant et bidirectionnelle avec InfiniteQueryObserver : chargement au scroll, pull-to-refresh, pagination fenêtrée et APIs basées sur curseur.",{"title":172,"path":173,"stem":174,"description":1764,"icon":175,"children":-1},"Utiliser CancelToken pour interrompre coopérativement les fetchs en cours : lors de la navigation, d'un timeout ou d'une action utilisateur.",1794040408813]