[{"data":1,"prerenderedAt":896},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-core-concepts-offline":342,"-fr-core-concepts-offline-surround":891},[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":87,"body":344,"description":884,"extension":885,"links":886,"meta":887,"navigation":888,"path":88,"seo":889,"stem":89,"__hash__":890},"docs_fr/fr/02.core-concepts/8.offline.md",{"type":345,"value":346,"toc":873},"minimark",[347,366,371,391,394,417,421,424,466,471,559,569,576,588,657,666,670,681,691,694,722,730,758,762,765,784,790,794,834,837,841],[348,349,350,351,355,356,359,360,365],"p",{},"La plupart des bibliothèques traitent « hors-ligne » comme une erreur de plus. Qora le traite comme un état : les lectures se ",[352,353,354],"strong",{},"mettent en pause"," au lieu d'échouer, les écritures peuvent être ",[352,357,358],{},"mises en file",", et les deux reprennent seules au retour du réseau. Cette page décrit le modèle ; la ",[361,362,364],"a",{"href":363},"../recipes/network-aware","recette Network-Aware"," détaille la configuration.",[367,368,370],"h2",{"id":369},"comment-qora-sait-que-lappareil-est-hors-ligne","Comment Qora sait que l'appareil est hors-ligne",[348,372,373,374,378,379,382,383,386,387,390],{},"Le client écoute un ",[375,376,377],"code",{},"ConnectivityManager",". ",[375,380,381],{},"QoraScope.auto"," attache ",[375,384,385],{},"FlutterConnectivityManager",", basé sur ",[375,388,389],{},"connectivity_plus"," : une configuration Flutter standard n'a besoin de rien d'autre.",[348,392,393],{},"Deux conséquences à connaître :",[395,396,397,408],"ul",{},[398,399,400,403,404,407],"li",{},[352,401,402],{},"Sans connectivity manager, le client se considère en ligne."," Rien ne se met en pause, et rien n'est rejoué à la reconnexion. Une application Dart pure peut attacher le sien avec ",[375,405,406],{},"client.attachConnectivityManager(...)",".",[398,409,410,413,414,407],{},[352,411,412],{},"La connectivité désigne une interface réseau, pas un serveur joignable."," Derrière un portail captif ou avec l'API en panne, l'appareil compte comme en ligne : les requêtes partent, sont retentées, et finissent en ",[375,415,416],{},"Failure",[367,418,420],{"id":419},"deux-axes-ce-que-vous-avez-et-ce-qui-se-passe","Deux axes : ce que vous avez, et ce qui se passe",[348,422,423],{},"Une requête a un état et un statut de fetch, et la gestion du hors-ligne vit dans le second :",[395,425,426,448],{},[398,427,428,430,431,434,435,438,439,438,442,438,445,447],{},[375,429,211],{}," est ",[352,432,433],{},"ce que vous avez"," : ",[375,436,437],{},"Initial",", ",[375,440,441],{},"Loading",[375,443,444],{},"Success",[375,446,416],{},", chacun portant la donnée quand il y en a une.",[398,449,450,430,453,434,456,438,459,462,463,407],{},[375,451,452],{},"FetchStatus",[352,454,455],{},"ce que fait le moteur",[375,457,458],{},"fetching",[375,460,461],{},"paused"," (en attente du réseau) ou ",[375,464,465],{},"idle",[348,467,468,470],{},[375,469,108],{}," passe les deux à votre builder. Les combinaisons hors-ligne courantes :",[472,473,474,492],"table",{},[475,476,477],"thead",{},[478,479,480,484,489],"tr",{},[481,482,483],"th",{},"État",[481,485,486],{},[375,487,488],{},"fetchStatus",[481,490,491],{},"Signification",[493,494,495,513,529,546],"tbody",{},[478,496,497,506,510],{},[498,499,500,438,502,505],"td",{},[375,501,441],{},[375,503,504],{},"previousData"," renseigné",[498,507,508],{},[375,509,461],{},[498,511,512],{},"Hors-ligne, donnée en cache disponible, refetch en attente",[478,514,515,522,526],{},[498,516,517,519,520],{},[375,518,441],{},", sans ",[375,521,504],{},[498,523,524],{},[375,525,461],{},[498,527,528],{},"Hors-ligne et rien en cache : afficher un écran hors-ligne, pas un spinner",[478,530,531,535,539],{},[498,532,533],{},[375,534,444],{},[498,536,537],{},[375,538,461],{},[498,540,541,542,545],{},"Hors-ligne en mode ",[375,543,544],{},"offlineFirst"," : donnée en cache servie, refetch en attente",[478,547,548,552,556],{},[498,549,550],{},[375,551,444],{},[498,553,554],{},[375,555,465],{},[498,557,558],{},"Donnée fraîche, rien à faire",[348,560,561,562,565,566,407],{},"Un fetch lancé hors-ligne ne lève pas d'exception dans les widgets. Appelé de façon impérative, ",[375,563,564],{},"fetchQuery"," renvoie la donnée en cache s'il y en a une, et lève sinon ",[375,567,568],{},"QoraOfflineException",[367,570,572,573],{"id":571},"lectures-networkmode","Lectures : ",[375,574,575],{},"NetworkMode",[348,577,578,581,582,584,585,407],{},[375,579,580],{},"networkMode"," décide de ce que fait une requête quand elle doit charger alors que l'appareil est hors-ligne. Réglez-le par requête dans ",[375,583,215],{},", ou pour toutes les requêtes dans ",[375,586,587],{},"defaultOptions",[472,589,590,603],{},[475,591,592],{},[478,593,594,597,600],{},[481,595,596],{},"Mode",[481,598,599],{},"Hors-ligne",[481,601,602],{},"À la reconnexion",[493,604,605,625,644],{},[478,606,607,613,622],{},[498,608,609,612],{},[375,610,611],{},"online"," (défaut)",[498,614,615,616,619,620],{},"Le fetch n'est pas envoyé. L'état devient ",[375,617,618],{},"Loading(previousData: cache)",", le statut ",[375,621,461],{},[498,623,624],{},"Le fetch s'exécute",[478,626,627,631,642],{},[498,628,629],{},[375,630,544],{},[498,632,633,634,636,637,639,640],{},"Avec une donnée en cache : l'état reste ",[375,635,444],{},", statut ",[375,638,461],{},". Sans : comme ",[375,641,611],{},[498,643,624],{},[478,645,646,651,654],{},[498,647,648],{},[375,649,650],{},"always",[498,652,653],{},"Le fetch est envoyé quand même, puis retenté et en échec comme toute erreur",[498,655,656],{},"Rien de particulier",[348,658,659,660,662,663,665],{},"Utilisez ",[375,661,650],{}," pour les fetchers qui n'ont pas besoin du réseau, comme une base locale. Utilisez ",[375,664,544],{}," quand un écran ne doit jamais repasser en chargement simplement parce que l'appareil a perdu le réseau.",[367,667,669],{"id":668},"écritures-la-file-de-mutations-hors-ligne","Écritures : la file de mutations hors-ligne",[348,671,672,673,676,677,680],{},"Une mutation ne se met pas en pause. Sans activation explicite, une mutation appelée hors-ligne envoie sa requête et échoue. Avec ",[375,674,675],{},"offlineQueue: true"," dans ses ",[375,678,679],{},"MutationOptions",", elle est mise en file à la place :",[682,683,689],"pre",{"className":684,"code":686,"language":687,"meta":688},[685],"language-text","mutate(variables) hors-ligne\n  1. onMutate s'exécute tout de suite → les mises à jour optimistes marchent hors-ligne\n  2. l'appel est ajouté à la file\n  3. état : MutationSuccess(isOptimistic: true) si optimisticResponse est défini,\n            MutationPending sinon\n\nreconnexion\n  4. l'appel est envoyé, une fois, dans l'ordre de mise en file\n     succès → onSuccess, invalidates, onSettled\n     échec  → onError(error, variables, contexte de l'étape 1), onSettled\n","text","",[375,690,686],{"__ignoreMap":688},[348,692,693],{},"Trois propriétés comptent en pratique :",[395,695,696,702,716],{},[398,697,698,701],{},[352,699,700],{},"La file appartient au client, pas au widget."," Une écriture en file est envoyée même si l'écran qui l'a créée a été fermé.",[398,703,704,707,708,711,712,715],{},[352,705,706],{},"Un rejeu en échec n'est pas retenté."," ",[375,709,710],{},"onError"," s'exécute avec le snapshot de ",[375,713,714],{},"onMutate"," : le rollback écrit pour le cas en ligne couvre donc aussi celui-ci. Prévenez l'utilisateur à cet endroit.",[398,717,718,721],{},[352,719,720],{},"L'ordre est conservé, les dépendances ne sont pas vérifiées."," Si une création en file est rejetée, une mise à jour en file du même élément est quand même envoyée, et échoue à son tour.",[348,723,724,727,728,407],{},[375,725,726],{},"optimisticResponse"," ne définit que l'état propre de la mutation, par exemple pour afficher un badge « en file ». Les modifications des données en cache se font dans ",[375,729,714],{},[731,732,733,735,736,739,740,742,743,746,747,750,751,735,754,757],"note",{},[375,734,113],{}," et ",[375,737,738],{},"useMutation"," utilisent tous deux la file (",[375,741,738],{}," depuis ",[375,744,745],{},"qora_hooks"," 1.3.1). Un ",[375,748,749],{},"MutationController"," utilisé seul doit recevoir ",[375,752,753],{},"isOnline",[375,755,756],{},"offlineQueue"," explicitement.",[367,759,761],{"id":760},"reconnexion","Reconnexion",[348,763,764],{},"Quand le connectivity manager signale le retour du réseau, le client :",[766,767,768,778],"ol",{},[398,769,770,773,774,777],{},[352,771,772],{},"Rejoue les requêtes en pause"," par lots. ",[375,775,776],{},"ReconnectStrategy"," fixe la taille des lots et un délai aléatoire entre eux (par défaut : 5 à la fois, jusqu'à 100 ms), pour qu'une centaine de requêtes en pause n'atteignent pas le serveur en même temps.",[398,779,780,783],{},[352,781,782],{},"Rejoue ensuite la file de mutations",", après les lectures, une mutation à la fois.",[348,785,786,787,789],{},"Indépendamment, ",[375,788,381],{}," relance aussi les requêtes périmées affichées à l'écran quand l'application revient au premier plan.",[367,791,793],{"id":792},"entre-deux-redémarrages","Entre deux redémarrages",[472,795,796,806],{},[475,797,798],{},[478,799,800,803],{},[481,801,802],{},"Quoi",[481,804,805],{},"Survit à un redémarrage ?",[493,807,808,826],{},[478,809,810,813],{},[498,811,812],{},"Données de requêtes en cache",[498,814,815,816,818,819,822,823],{},"Oui, avec ",[375,817,229],{}," et un ",[375,820,821],{},"StorageAdapter",". Voir ",[361,824,153],{"href":825},"../recipes/persistence",[478,827,828,831],{},[498,829,830],{},"Mutations en file",[498,832,833],{},"Non. La file vit en mémoire ; sa persistance est prévue pour la 1.4",[348,835,836],{},"Une application qui ne doit pas perdre les écritures faites hors-ligne avant d'être tuée doit, pour l'instant, aussi les enregistrer elle-même (par exemple dans une table outbox locale) et les renvoyer au démarrage.",[367,838,840],{"id":839},"étapes-suivantes","Étapes suivantes",[395,842,843,854,860,867],{},[398,844,845,848,849,438,852],{},[361,846,847],{"href":363},"Recette Network-Aware"," : configuration, ",[375,850,851],{},"isOptimistic",[375,853,776],{},[398,855,856,859],{},[361,857,128],{"href":858},"../flutter-integration/network-status"," : bannières hors-ligne",[398,861,862,866],{},[361,863,865],{"href":864},"../examples/offline-first","Étude de cas : Offline-First"," : une application complète avec persistance et file",[398,868,869,872],{},[361,870,82],{"href":871},"./mutations"," : le cycle de vie des écritures sur lequel s'appuie cette page",{"title":688,"searchDepth":874,"depth":874,"links":875},2,[876,877,878,880,881,882,883],{"id":369,"depth":874,"text":370},{"id":419,"depth":874,"text":420},{"id":571,"depth":874,"text":879},"Lectures : NetworkMode",{"id":668,"depth":874,"text":669},{"id":760,"depth":874,"text":761},{"id":792,"depth":874,"text":793},{"id":839,"depth":874,"text":840},"Ce que Qora fait des lectures et des écritures quand l'appareil est hors-ligne, ce qui se passe à la reconnexion, et ce qui survit à un redémarrage.","md",null,{},{"icon":90},{"title":87,"description":884},"9Gm271gPhjRKy7ZFEZdT5WkkkX_0W4mBB1lswmQHbP8",[892,894],{"title":82,"path":83,"stem":84,"description":893,"icon":85,"children":-1},"Comment s'exécutent les écritures, dans quel ordre leurs callbacks sont appelés, et les trois façons de réaligner le cache sur le serveur ensuite.",{"title":98,"path":99,"stem":100,"description":895,"icon":101,"children":-1},"Installer qora_flutter, créer une instance QoraClient et la fournir à l'arbre de widgets avec QoraScope.",1794040393923]