[{"data":1,"prerenderedAt":1021},["ShallowReactive",2],{"navigation_docs_fr":3,"landing_fr":342},[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":344,"body":345,"description":344,"extension":1013,"meta":1014,"navigation":603,"path":1015,"seo":1016,"stem":1019,"__hash__":1020},"landing_fr/fr/index.md","",{"type":346,"value":347,"toc":1011},"minimark",[348,773,825,939,997,1007],[349,350,352,362,365,375,389],"u-page-hero",{"orientation":351},"horizontal",[353,354,355,356],"template",{"v-slot:title":344},"Le state serveur pour les apps Flutter qui ",[357,358,361],"span",{"className":359},[360],"text-primary","fonctionnent hors-ligne",[353,363,364],{"v-slot:description":344},"Qora récupère, met en cache et synchronise les données serveur, et garde votre application utilisable quand le réseau ne l'est pas. Les données sauvegardées s'affichent dès le démarrage, les requêtes se mettent en pause hors-ligne et reprennent à la reconnexion, et les écritures faites hors-ligne sont mises en file puis rejouées dans l'ordre.",[353,366,367],{"v-slot:headline":344},[368,369,374],"u-badge",{"className":370,"color":372,"variant":373},[371],"rounded-full","success","outline","v1.3.1 est disponible",[353,376,377,384],{"v-slot:links":344},[378,379,383],"u-button",{"color":380,"size":381,"to":17,"trailing-icon":382},"neutral","xl","i-lucide-arrow-right","Démarrer",[378,385,388],{"color":380,"size":381,"to":386,"icon":387,"variant":373},"https://github.com/meragix/qora","simple-icons-github","Star sur GitHub",[390,391,392],"prose",{},[393,394,399],"pre",{"className":395,"code":396,"filename":397,"language":398,"meta":344,"style":344},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Données du cache dès la première frame, conservées pendant refetchs et erreurs.\nQoraBuilder\u003CUser>(\n  queryKey: ['users', userId],\n  fetcher: () => api.getUser(userId),\n  builder: (context, state, fetchStatus) => Column(children: [\n    if (fetchStatus == FetchStatus.paused) const OfflineBanner(),\n    if (state.dataOrNull case final user?) UserCard(user),\n  ]),\n)\n\n// Écrit hors-ligne : affiché tout de suite, envoyé à la reconnexion.\nQoraMutationBuilder\u003CComment, String, void>(\n  mutator: (text) => api.postComment(text),\n  options: MutationOptions(\n    offlineQueue: true,\n    optimisticResponse: (text) => Comment.draft(text),\n    invalidates: [['comments']],\n  ),\n  builder: (context, state, mutate) => SendButton(onSend: mutate),\n)\n","user_screen.dart","dart",[400,401,402,410,426,452,481,515,548,584,592,598,605,611,634,659,673,684,708,727,735,768],"code",{"__ignoreMap":344},[357,403,406],{"class":404,"line":405},"line",1,[357,407,409],{"class":408},"sHwdD","// Données du cache dès la première frame, conservées pendant refetchs et erreurs.\n",[357,411,413,416,420,423],{"class":404,"line":412},2,[357,414,108],{"class":415},"sBMFI",[357,417,419],{"class":418},"sTEyZ","\u003C",[357,421,422],{"class":415},"User",[357,424,425],{"class":418},">(\n",[357,427,429,432,436,439,443,446,449],{"class":404,"line":428},3,[357,430,431],{"class":418},"  queryKey",[357,433,435],{"class":434},"sMK4o",":",[357,437,438],{"class":418}," [",[357,440,442],{"class":441},"sfazB","'users'",[357,444,445],{"class":434},",",[357,447,448],{"class":418}," userId]",[357,450,451],{"class":434},",\n",[357,453,455,458,460,463,466,469,472,476,479],{"class":404,"line":454},4,[357,456,457],{"class":418},"  fetcher",[357,459,435],{"class":434},[357,461,462],{"class":418}," () ",[357,464,465],{"class":434},"=>",[357,467,468],{"class":418}," api",[357,470,471],{"class":434},".",[357,473,475],{"class":474},"s2Zo4","getUser",[357,477,478],{"class":418},"(userId)",[357,480,451],{"class":434},[357,482,484,487,489,492,494,497,499,502,504,507,510,512],{"class":404,"line":483},5,[357,485,486],{"class":418},"  builder",[357,488,435],{"class":434},[357,490,491],{"class":418}," (context",[357,493,445],{"class":434},[357,495,496],{"class":418}," state",[357,498,445],{"class":434},[357,500,501],{"class":418}," fetchStatus) ",[357,503,465],{"class":434},[357,505,506],{"class":415}," Column",[357,508,509],{"class":418},"(children",[357,511,435],{"class":434},[357,513,514],{"class":418}," [\n",[357,516,518,522,525,528,531,533,536,540,543,546],{"class":404,"line":517},6,[357,519,521],{"class":520},"s7zQu","    if",[357,523,524],{"class":418}," (fetchStatus ",[357,526,527],{"class":434},"==",[357,529,530],{"class":415}," FetchStatus",[357,532,471],{"class":434},[357,534,535],{"class":418},"paused) ",[357,537,539],{"class":538},"spNyl","const",[357,541,542],{"class":415}," OfflineBanner",[357,544,545],{"class":418},"()",[357,547,451],{"class":434},[357,549,551,553,556,558,561,564,567,570,573,576,579,582],{"class":404,"line":550},7,[357,552,521],{"class":520},[357,554,555],{"class":418}," (state",[357,557,471],{"class":434},[357,559,560],{"class":418},"dataOrNull ",[357,562,563],{"class":520},"case",[357,565,566],{"class":538}," final",[357,568,569],{"class":418}," user",[357,571,572],{"class":434},"?",[357,574,575],{"class":418},") ",[357,577,578],{"class":415},"UserCard",[357,580,581],{"class":418},"(user)",[357,583,451],{"class":434},[357,585,587,590],{"class":404,"line":586},8,[357,588,589],{"class":418},"  ])",[357,591,451],{"class":434},[357,593,595],{"class":404,"line":594},9,[357,596,597],{"class":418},")\n",[357,599,601],{"class":404,"line":600},10,[357,602,604],{"emptyLinePlaceholder":603},true,"\n",[357,606,608],{"class":404,"line":607},11,[357,609,610],{"class":408},"// Écrit hors-ligne : affiché tout de suite, envoyé à la reconnexion.\n",[357,612,614,616,618,621,624,627,629,632],{"class":404,"line":613},12,[357,615,113],{"class":415},[357,617,419],{"class":418},[357,619,620],{"class":415},"Comment",[357,622,623],{"class":418},", ",[357,625,626],{"class":415},"String",[357,628,623],{"class":418},[357,630,631],{"class":538},"void",[357,633,425],{"class":418},[357,635,637,640,642,645,647,649,651,654,657],{"class":404,"line":636},13,[357,638,639],{"class":418},"  mutator",[357,641,435],{"class":434},[357,643,644],{"class":418}," (text) ",[357,646,465],{"class":434},[357,648,468],{"class":418},[357,650,471],{"class":434},[357,652,653],{"class":474},"postComment",[357,655,656],{"class":418},"(text)",[357,658,451],{"class":434},[357,660,662,665,667,670],{"class":404,"line":661},14,[357,663,664],{"class":418},"  options",[357,666,435],{"class":434},[357,668,669],{"class":415}," MutationOptions",[357,671,672],{"class":418},"(\n",[357,674,676,679,681],{"class":404,"line":675},15,[357,677,678],{"class":418},"    offlineQueue",[357,680,435],{"class":434},[357,682,683],{"class":434}," true,\n",[357,685,687,690,692,694,696,699,701,704,706],{"class":404,"line":686},16,[357,688,689],{"class":418},"    optimisticResponse",[357,691,435],{"class":434},[357,693,644],{"class":418},[357,695,465],{"class":434},[357,697,698],{"class":415}," Comment",[357,700,471],{"class":434},[357,702,703],{"class":474},"draft",[357,705,656],{"class":418},[357,707,451],{"class":434},[357,709,711,714,716,719,722,725],{"class":404,"line":710},17,[357,712,713],{"class":418},"    invalidates",[357,715,435],{"class":434},[357,717,718],{"class":418}," [[",[357,720,721],{"class":441},"'comments'",[357,723,724],{"class":418},"]]",[357,726,451],{"class":434},[357,728,730,733],{"class":404,"line":729},18,[357,731,732],{"class":418},"  )",[357,734,451],{"class":434},[357,736,738,740,742,744,746,748,750,753,755,758,761,763,766],{"class":404,"line":737},19,[357,739,486],{"class":418},[357,741,435],{"class":434},[357,743,491],{"class":418},[357,745,445],{"class":434},[357,747,496],{"class":418},[357,749,445],{"class":434},[357,751,752],{"class":418}," mutate) ",[357,754,465],{"class":434},[357,756,757],{"class":415}," SendButton",[357,759,760],{"class":418},"(onSend",[357,762,435],{"class":434},[357,764,765],{"class":418}," mutate)",[357,767,451],{"class":434},[357,769,771],{"class":404,"line":770},20,[357,772,597],{"class":418},[774,775,776,779,782],"u-page-section",{},[353,777,778],{"v-slot:title":344},"Le hors-ligne, intégré",[353,780,781],{"v-slot:description":344},"Pas un simple flag de refetch à la reconnexion : trois briques qui travaillent ensemble, branchées par un seul widget.",[353,783,784,798,813],{"v-slot:features":344},[785,786,787,793],"u-page-feature",{"icon":156,"to":154},[353,788,789],{"v-slot:title":344},[357,790,792],{"className":791},[360],"Données sauvegardées au démarrage",[353,794,795,797],{"v-slot:description":344},[400,796,229],{}," écrit les fetchs réussis dans votre stockage et les restaure avant la première frame. Les entrées périmées s'affichent immédiatement et se revalident en arrière-plan.",[785,799,800,806],{"icon":90,"to":88},[353,801,802],{"v-slot:title":344},[357,803,805],{"className":804},[360],"Des requêtes qui savent qu'elles sont hors-ligne",[353,807,808,809,812],{"v-slot:description":344},"Les requêtes se mettent en pause quand l'appareil est hors-ligne et le signalent via ",[400,810,811],{},"FetchStatus.paused"," : l'UI distingue « pas de réseau » de « chargement ». Elles reprennent à la reconnexion, avec du jitter pour éviter le thundering herd.",[785,814,816,822],{"icon":815,"to":312},"i-lucide-list-ordered",[353,817,818],{"v-slot:title":344},[357,819,821],{"className":820},[360],"Des écritures qui attendent le réseau",[353,823,824],{"v-slot:description":344},"Les mutations faites hors-ligne renvoient un résultat optimiste immédiatement et sont rejouées dans l'ordre à la reconnexion. La file est en mémoire aujourd'hui ; la persister entre deux redémarrages est l'objectif de la 1.4.",[774,826,827,830],{},[353,828,829],{"v-slot:title":344},"Tout ce qu'on attend d'une bibliothèque de requêtes",[353,831,832,840,849,858,873,889,899,921,930],{"v-slot:features":344},[785,833,834,837],{"icon":70},[353,835,836],{"v-slot:title":344},"Stale-while-revalidate",[353,838,839],{"v-slot:description":344},"Les données du cache s'affichent dès la première frame ; les données fraîches les remplacent en arrière-plan.",[785,841,843,846],{"icon":842},"i-lucide-git-merge",[353,844,845],{"v-slot:title":344},"Déduplication des requêtes",[353,847,848],{"v-slot:description":344},"Dix widgets qui observent la même clé partagent une entrée de cache et un seul appel réseau.",[785,850,852,855],{"icon":851},"i-lucide-refresh-cw",[353,853,854],{"v-slot:title":344},"Invalidation précise",[353,856,857],{"v-slot:description":344},"Par clé exacte, par préfixe, par prédicat ou par tag. Les requêtes montées se relancent automatiquement.",[785,859,860,862],{"icon":151},[353,861,148],{"v-slot:title":344},[353,863,864,865,868,869,872],{"v-slot:description":344},"Mettez à jour le cache dans ",[400,866,867],{},"onMutate",", restaurez le snapshot dans ",[400,870,871],{},"onError",", invalidez en cas de succès.",[785,874,876,879],{"icon":875},"i-lucide-split",[353,877,878],{"v-slot:title":344},"État sur deux axes",[353,880,881,882,884,885,888],{"v-slot:description":344},"Un ",[400,883,211],{}," scellé à matcher de façon exhaustive, plus un ",[400,886,887],{},"FetchStatus"," séparé. Les données précédentes ne sont jamais perdues lors d'un refetch ou d'une erreur.",[785,890,891,893],{"icon":121},[353,892,163],{"v-slot:title":344},[353,894,895,896,471],{"v-slot:description":344},"Pagination par curseur ou par page avec une fenêtre mémoire ",[400,897,898],{},"maxPages",[785,900,901,904],{"icon":126},[353,902,903],{"v-slot:title":344},"Builders ou hooks",[353,905,906,907,909,910,913,914,917,918,471],{"v-slot:description":344},"Les widgets ",[400,908,108],{},", ou ",[400,911,912],{},"useQuery"," et ",[400,915,916],{},"useMutation"," avec ",[400,919,920],{},"qora_hooks",[785,922,924,927],{"icon":923},"i-lucide-monitor",[353,925,926],{"v-slot:title":344},"DevTools dans l'app",[353,928,929],{"v-slot:description":344},"Un overlay actif en debug uniquement qui affiche chaque requête, son état, sa fraîcheur et la file de mutations.",[785,931,933,936],{"icon":932},"i-lucide-package",[353,934,935],{"v-slot:title":344},"Noyau Dart pur",[353,937,938],{"v-slot:description":344},"Aucune dépendance Flutter et aucune génération de code. Fonctionne dans les CLI, les serveurs et les tests.",[774,940,941,944,947],{},[353,942,943],{"v-slot:title":344},"Compatible avec ce que vous utilisez déjà",[353,945,946],{"v-slot:description":344},"Qora gère les données serveur. Gardez votre state management pour l'état de l'UI et votre client HTTP pour le transport.",[353,948,949,958,967,982],{"v-slot:features":344},[785,950,952,955],{"icon":951,"to":274},"i-lucide-boxes",[353,953,954],{"v-slot:title":344},"Riverpod",[353,956,957],{"v-slot:description":344},"Exposer les requêtes Qora aux providers.",[785,959,961,964],{"icon":960,"to":270},"i-lucide-workflow",[353,962,963],{"v-slot:title":344},"BLoC",[353,965,966],{"v-slot:description":344},"Alimenter cubits et blocs depuis le cache.",[785,968,970,973],{"icon":969,"to":284},"i-lucide-globe",[353,971,972],{"v-slot:title":344},"Dio et GraphQL",[353,974,975,976,913,979,471],{"v-slot:description":344},"Mapper les erreurs de transport, rafraîchir les tokens, encapsuler ",[400,977,978],{},"graphql",[400,980,981],{},"ferry",[785,983,984,987],{"icon":38,"to":36},[353,985,986],{"v-slot:title":344},"Vous venez d'une autre bibliothèque",[353,988,989,990,623,993,996],{"v-slot:description":344},"Correspondance des API depuis ",[400,991,992],{},"cached_query",[400,994,995],{},"flutter_query"," et TanStack Query.",[774,998,999],{},[1000,1001],"u-page-c-t-a",{":links":1002,"className":1003,"description":1005,"title":1006},"[{\"label\":\"Lire la documentation\",\"to\":\"/fr/getting-started/installation\",\"trailingIcon\":\"i-lucide-arrow-right\",\"size\":\"xl\"},{\"label\":\"Voir sur GitHub\",\"to\":\"https://github.com/meragix/qora\",\"target\":\"_blank\",\"variant\":\"outline\",\"icon\":\"i-simple-icons-github\",\"size\":\"xl\"}]",[1004],"dark:bg-neutral-950","Ajoutez un package, enveloppez votre app avec QoraScope.auto et liez une requête à un widget. Pas de génération de code, pas d'échafaudage de providers.","Votre première requête en cinq minutes",[1008,1009,1010],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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);}",{"title":344,"searchDepth":412,"depth":412,"links":1012},[],"md",{},"/fr",{"title":1017,"description":1018},"Le state serveur pour les apps Flutter qui fonctionnent hors-ligne","Récupérer, mettre en cache et synchroniser les données serveur dans Flutter. Données sauvegardées au démarrage, requêtes en pause hors-ligne, écritures mises en file et rejouées à la reconnexion. Inspiré de TanStack Query, sans génération de code.","fr/index","RKYelel6FQ35FBBsexN1cI5RxSzB8ILH2-XNQuKH-U8",1794040391775]