[{"data":1,"prerenderedAt":2932},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-flutter-integration-hooks":342,"-fr-flutter-integration-hooks-surround":2927},[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":123,"body":344,"description":2920,"extension":2921,"links":2922,"meta":2923,"navigation":2924,"path":124,"seo":2925,"stem":125,"__hash__":2926},"docs_fr/fr/03.flutter-integration/6.hooks.md",{"type":345,"value":346,"toc":2897},"minimark",[347,364,368,425,429,439,826,831,898,902,922,925,929,932,1179,1183,1226,1230,1236,1401,1403,1407,1413,1455,1461,1463,1467,1476,1609,1613,1628,1630,1634,1646,1857,1861,1873,1875,1879,1885,2255,2259,2333,2337,2342,2447,2449,2453,2463,2863,2865,2893],[348,349,350,351,358,359,363],"p",{},"Si votre projet utilise ",[352,353,357],"a",{"href":354,"rel":355},"https://pub.dev/packages/flutter_hooks",[356],"nofollow","flutter_hooks",",\n",[360,361,362],"code",{},"qora_hooks"," fournit une API basée sur les hooks avec des primitives composables pour les écrans complexes.",[365,366,16],"h2",{"id":367},"installation",[369,370,371],"code-group",{},[372,373,379],"pre",{"className":374,"code":375,"filename":376,"language":377,"meta":378,"style":378},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Il n'est pas nécessaire d'ajouter `qora` : il est inclus transitivement.\ndependencies:\n  flutter_hooks: ^0.21.0\n  qora_hooks: ^ 1.3.1\n","pubspec.yaml","yaml","",[360,380,381,390,401,414],{"__ignoreMap":378},[382,383,386],"span",{"class":384,"line":385},"line",1,[382,387,389],{"class":388},"sHwdD","# Il n'est pas nécessaire d'ajouter `qora` : il est inclus transitivement.\n",[382,391,393,397],{"class":384,"line":392},2,[382,394,396],{"class":395},"swJcz","dependencies",[382,398,400],{"class":399},"sMK4o",":\n",[382,402,404,407,410],{"class":384,"line":403},3,[382,405,406],{"class":395},"  flutter_hooks",[382,408,409],{"class":399},":",[382,411,413],{"class":412},"sfazB"," ^0.21.0\n",[382,415,417,420,422],{"class":384,"line":416},4,[382,418,419],{"class":395},"  qora_hooks",[382,421,409],{"class":399},[382,423,424],{"class":412}," ^ 1.3.1\n",[365,426,428],{"id":427},"usequery","useQuery",[348,430,431,432,434,435,438],{},"Récupère les données et reconstruit le widget à chaque changement d'état.\nÉquivalent à ",[360,433,108],{}," sans callback ",[360,436,437],{},"builder"," imbriqué.",[372,440,444],{"className":441,"code":442,"language":443,"meta":378,"style":378},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","class UserScreen extends HookWidget {\n  final String userId;\n  const UserScreen({super.key, required this.userId});\n\n  @override\n  Widget build(BuildContext context) {\n    final state = useQuery\u003CUser>(\n      key: ['users', userId],\n      fetcher: () => Api.getUser(userId),\n      options: const QoraOptions(staleTime: Duration(minutes: 5)),\n    );\n\n    return switch (state) {\n      Initial()                    => const SizedBox.shrink(),\n      Loading(:final previousData) => previousData != null\n          ? UserCard(previousData)\n          : const CircularProgressIndicator(),\n      Success(:final data)         => UserCard(data),\n      Failure(:final error)        => ErrorView(error),\n    };\n  }\n}\n","dart",[360,445,446,465,480,512,518,524,543,567,588,615,651,659,664,677,703,730,742,757,781,806,814,820],{"__ignoreMap":378},[382,447,448,451,455,458,461],{"class":384,"line":385},[382,449,450],{"class":399},"class",[382,452,454],{"class":453},"sBMFI"," UserScreen",[382,456,457],{"class":399}," extends",[382,459,460],{"class":453}," HookWidget",[382,462,464],{"class":463},"sTEyZ"," {\n",[382,466,467,471,474,477],{"class":384,"line":392},[382,468,470],{"class":469},"spNyl","  final",[382,472,473],{"class":453}," String",[382,475,476],{"class":463}," userId",[382,478,479],{"class":399},";\n",[382,481,482,485,487,490,493,496,499,502,505,507,510],{"class":384,"line":403},[382,483,484],{"class":469},"  const",[382,486,454],{"class":453},[382,488,489],{"class":463},"({super",[382,491,492],{"class":399},".",[382,494,495],{"class":463},"key",[382,497,498],{"class":399},",",[382,500,501],{"class":469}," required",[382,503,504],{"class":463}," this",[382,506,492],{"class":399},[382,508,509],{"class":463},"userId})",[382,511,479],{"class":399},[382,513,514],{"class":384,"line":416},[382,515,517],{"emptyLinePlaceholder":516},true,"\n",[382,519,521],{"class":384,"line":520},5,[382,522,523],{"class":469},"  @override\n",[382,525,527,530,534,537,540],{"class":384,"line":526},6,[382,528,529],{"class":453},"  Widget",[382,531,533],{"class":532},"s2Zo4"," build",[382,535,536],{"class":463},"(",[382,538,539],{"class":453},"BuildContext",[382,541,542],{"class":463}," context) {\n",[382,544,546,549,552,555,558,561,564],{"class":384,"line":545},7,[382,547,548],{"class":469},"    final",[382,550,551],{"class":463}," state ",[382,553,554],{"class":399},"=",[382,556,557],{"class":532}," useQuery",[382,559,560],{"class":463},"\u003C",[382,562,563],{"class":453},"User",[382,565,566],{"class":463},">(\n",[382,568,570,573,575,578,581,583,586],{"class":384,"line":569},8,[382,571,572],{"class":463},"      key",[382,574,409],{"class":399},[382,576,577],{"class":463}," [",[382,579,580],{"class":412},"'users'",[382,582,498],{"class":399},[382,584,585],{"class":463}," userId]",[382,587,358],{"class":399},[382,589,591,594,596,599,602,605,607,610,613],{"class":384,"line":590},9,[382,592,593],{"class":463},"      fetcher",[382,595,409],{"class":399},[382,597,598],{"class":463}," () ",[382,600,601],{"class":399},"=>",[382,603,604],{"class":453}," Api",[382,606,492],{"class":399},[382,608,609],{"class":532},"getUser",[382,611,612],{"class":463},"(userId)",[382,614,358],{"class":399},[382,616,618,621,623,626,629,632,634,637,640,642,646,649],{"class":384,"line":617},10,[382,619,620],{"class":463},"      options",[382,622,409],{"class":399},[382,624,625],{"class":469}," const",[382,627,628],{"class":453}," QoraOptions",[382,630,631],{"class":463},"(staleTime",[382,633,409],{"class":399},[382,635,636],{"class":453}," Duration",[382,638,639],{"class":463},"(minutes",[382,641,409],{"class":399},[382,643,645],{"class":644},"sbssI"," 5",[382,647,648],{"class":463},"))",[382,650,358],{"class":399},[382,652,654,657],{"class":384,"line":653},11,[382,655,656],{"class":463},"    )",[382,658,479],{"class":399},[382,660,662],{"class":384,"line":661},12,[382,663,517],{"emptyLinePlaceholder":516},[382,665,667,671,674],{"class":384,"line":666},13,[382,668,670],{"class":669},"s7zQu","    return",[382,672,673],{"class":669}," switch",[382,675,676],{"class":463}," (state) {\n",[382,678,680,683,686,688,690,693,695,698,701],{"class":384,"line":679},14,[382,681,682],{"class":453},"      Initial",[382,684,685],{"class":463},"()                    ",[382,687,601],{"class":399},[382,689,625],{"class":469},[382,691,692],{"class":453}," SizedBox",[382,694,492],{"class":399},[382,696,697],{"class":532},"shrink",[382,699,700],{"class":463},"()",[382,702,358],{"class":399},[382,704,706,709,711,713,716,719,721,724,727],{"class":384,"line":705},15,[382,707,708],{"class":453},"      Loading",[382,710,536],{"class":463},[382,712,409],{"class":399},[382,714,715],{"class":469},"final",[382,717,718],{"class":463}," previousData) ",[382,720,601],{"class":399},[382,722,723],{"class":463}," previousData ",[382,725,726],{"class":399},"!=",[382,728,729],{"class":399}," null\n",[382,731,733,736,739],{"class":384,"line":732},16,[382,734,735],{"class":399},"          ?",[382,737,738],{"class":453}," UserCard",[382,740,741],{"class":463},"(previousData)\n",[382,743,745,748,750,753,755],{"class":384,"line":744},17,[382,746,747],{"class":399},"          :",[382,749,625],{"class":469},[382,751,752],{"class":453}," CircularProgressIndicator",[382,754,700],{"class":463},[382,756,358],{"class":399},[382,758,760,763,765,767,769,772,774,776,779],{"class":384,"line":759},18,[382,761,762],{"class":453},"      Success",[382,764,536],{"class":463},[382,766,409],{"class":399},[382,768,715],{"class":469},[382,770,771],{"class":463}," data)         ",[382,773,601],{"class":399},[382,775,738],{"class":453},[382,777,778],{"class":463},"(data)",[382,780,358],{"class":399},[382,782,784,787,789,791,793,796,798,801,804],{"class":384,"line":783},19,[382,785,786],{"class":453},"      Failure",[382,788,536],{"class":463},[382,790,409],{"class":399},[382,792,715],{"class":469},[382,794,795],{"class":463}," error)        ",[382,797,601],{"class":399},[382,799,800],{"class":453}," ErrorView",[382,802,803],{"class":463},"(error)",[382,805,358],{"class":399},[382,807,809,812],{"class":384,"line":808},20,[382,810,811],{"class":463},"    }",[382,813,479],{"class":399},[382,815,817],{"class":384,"line":816},21,[382,818,819],{"class":463},"  }\n",[382,821,823],{"class":384,"line":822},22,[382,824,825],{"class":463},"}\n",[827,828,830],"h3",{"id":829},"paramètres-de-usequery","Paramètres de useQuery",[832,833,834,850],"table",{},[835,836,837],"thead",{},[838,839,840,844,847],"tr",{},[841,842,843],"th",{},"Paramètre",[841,845,846],{},"Type",[841,848,849],{},"Description",[851,852,853,868,883],"tbody",{},[838,854,855,860,865],{},[856,857,858],"td",{},[360,859,495],{},[856,861,862],{},[360,863,864],{},"List\u003CObject?>",[856,866,867],{},"Identifiant de requête. Un changement déclenche un refetch.",[838,869,870,875,880],{},[856,871,872],{},[360,873,874],{},"fetcher",[856,876,877],{},[360,878,879],{},"Future\u003CT> Function()",[856,881,882],{},"Fonction asynchrone retournant les données.",[838,884,885,890,895],{},[856,886,887],{},[360,888,889],{},"options",[856,891,892],{},[360,893,894],{},"QoraOptions?",[856,896,897],{},"Configuration de cache et de retry par requête.",[827,899,901],{"id":900},"valeur-de-retour-de-usequery","Valeur de retour de useQuery",[348,903,904,905,908,909,912,913,912,916,912,919,492],{},"Retourne un ",[360,906,907],{},"QoraState\u003CT>"," : classe scellée à quatre variantes :\n",[360,910,911],{},"Initial",", ",[360,914,915],{},"Loading",[360,917,918],{},"Success",[360,920,921],{},"Failure",[923,924],"hr",{},[365,926,928],{"id":927},"usemutation","useMutation",[348,930,931],{},"Déclenche une mutation et suit son état.",[372,933,935],{"className":441,"code":934,"language":443,"meta":378,"style":378},"class EditProfileScreen extends HookWidget {\n  @override\n  Widget build(BuildContext context) {\n    final mutation = useMutation\u003CUser, UpdateUserInput>(\n      mutator: (input) => Api.updateUser(input),\n      options: MutationOptions(\n        invalidates: [['users', currentUserId]],\n      ),\n    );\n\n    return ElevatedButton(\n      onPressed: mutation.isPending\n          ? null\n          : () => mutation.mutate(UpdateUserInput(name: 'Alice')),\n      child: mutation.isPending\n          ? const CircularProgressIndicator()\n          : const Text('Sauvegarder'),\n    );\n  }\n}\n",[360,936,937,950,954,966,989,1013,1025,1044,1051,1057,1061,1070,1085,1091,1122,1135,1146,1165,1171,1175],{"__ignoreMap":378},[382,938,939,941,944,946,948],{"class":384,"line":385},[382,940,450],{"class":399},[382,942,943],{"class":453}," EditProfileScreen",[382,945,457],{"class":399},[382,947,460],{"class":453},[382,949,464],{"class":463},[382,951,952],{"class":384,"line":392},[382,953,523],{"class":469},[382,955,956,958,960,962,964],{"class":384,"line":403},[382,957,529],{"class":453},[382,959,533],{"class":532},[382,961,536],{"class":463},[382,963,539],{"class":453},[382,965,542],{"class":463},[382,967,968,970,973,975,978,980,982,984,987],{"class":384,"line":416},[382,969,548],{"class":469},[382,971,972],{"class":463}," mutation ",[382,974,554],{"class":399},[382,976,977],{"class":532}," useMutation",[382,979,560],{"class":463},[382,981,563],{"class":453},[382,983,912],{"class":463},[382,985,986],{"class":453},"UpdateUserInput",[382,988,566],{"class":463},[382,990,991,994,996,999,1001,1003,1005,1008,1011],{"class":384,"line":520},[382,992,993],{"class":463},"      mutator",[382,995,409],{"class":399},[382,997,998],{"class":463}," (input) ",[382,1000,601],{"class":399},[382,1002,604],{"class":453},[382,1004,492],{"class":399},[382,1006,1007],{"class":532},"updateUser",[382,1009,1010],{"class":463},"(input)",[382,1012,358],{"class":399},[382,1014,1015,1017,1019,1022],{"class":384,"line":526},[382,1016,620],{"class":463},[382,1018,409],{"class":399},[382,1020,1021],{"class":453}," MutationOptions",[382,1023,1024],{"class":463},"(\n",[382,1026,1027,1030,1032,1035,1037,1039,1042],{"class":384,"line":545},[382,1028,1029],{"class":463},"        invalidates",[382,1031,409],{"class":399},[382,1033,1034],{"class":463}," [[",[382,1036,580],{"class":412},[382,1038,498],{"class":399},[382,1040,1041],{"class":463}," currentUserId]]",[382,1043,358],{"class":399},[382,1045,1046,1049],{"class":384,"line":569},[382,1047,1048],{"class":463},"      )",[382,1050,358],{"class":399},[382,1052,1053,1055],{"class":384,"line":590},[382,1054,656],{"class":463},[382,1056,479],{"class":399},[382,1058,1059],{"class":384,"line":617},[382,1060,517],{"emptyLinePlaceholder":516},[382,1062,1063,1065,1068],{"class":384,"line":653},[382,1064,670],{"class":669},[382,1066,1067],{"class":453}," ElevatedButton",[382,1069,1024],{"class":463},[382,1071,1072,1075,1077,1080,1082],{"class":384,"line":661},[382,1073,1074],{"class":463},"      onPressed",[382,1076,409],{"class":399},[382,1078,1079],{"class":463}," mutation",[382,1081,492],{"class":399},[382,1083,1084],{"class":463},"isPending\n",[382,1086,1087,1089],{"class":384,"line":666},[382,1088,735],{"class":399},[382,1090,729],{"class":399},[382,1092,1093,1095,1097,1099,1101,1103,1106,1108,1110,1113,1115,1118,1120],{"class":384,"line":679},[382,1094,747],{"class":399},[382,1096,598],{"class":463},[382,1098,601],{"class":399},[382,1100,1079],{"class":463},[382,1102,492],{"class":399},[382,1104,1105],{"class":532},"mutate",[382,1107,536],{"class":463},[382,1109,986],{"class":453},[382,1111,1112],{"class":463},"(name",[382,1114,409],{"class":399},[382,1116,1117],{"class":412}," 'Alice'",[382,1119,648],{"class":463},[382,1121,358],{"class":399},[382,1123,1124,1127,1129,1131,1133],{"class":384,"line":705},[382,1125,1126],{"class":463},"      child",[382,1128,409],{"class":399},[382,1130,1079],{"class":463},[382,1132,492],{"class":399},[382,1134,1084],{"class":463},[382,1136,1137,1139,1141,1143],{"class":384,"line":732},[382,1138,735],{"class":399},[382,1140,625],{"class":469},[382,1142,752],{"class":453},[382,1144,1145],{"class":463},"()\n",[382,1147,1148,1150,1152,1155,1157,1160,1163],{"class":384,"line":744},[382,1149,747],{"class":399},[382,1151,625],{"class":469},[382,1153,1154],{"class":453}," Text",[382,1156,536],{"class":463},[382,1158,1159],{"class":412},"'Sauvegarder'",[382,1161,1162],{"class":463},")",[382,1164,358],{"class":399},[382,1166,1167,1169],{"class":384,"line":759},[382,1168,656],{"class":463},[382,1170,479],{"class":399},[382,1172,1173],{"class":384,"line":783},[382,1174,819],{"class":463},[382,1176,1177],{"class":384,"line":808},[382,1178,825],{"class":463},[827,1180,1182],{"id":1181},"paramètres-de-usemutation","Paramètres de useMutation",[832,1184,1185,1195],{},[835,1186,1187],{},[838,1188,1189,1191,1193],{},[841,1190,843],{},[841,1192,846],{},[841,1194,849],{},[851,1196,1197,1212],{},[838,1198,1199,1204,1209],{},[856,1200,1201],{},[360,1202,1203],{},"mutator",[856,1205,1206],{},[360,1207,1208],{},"Future\u003CTData> Function(TVariables)",[856,1210,1211],{},"Fonction asynchrone exécutant la mutation.",[838,1213,1214,1218,1223],{},[856,1215,1216],{},[360,1217,889],{},[856,1219,1220],{},[360,1221,1222],{},"MutationOptions?",[856,1224,1225],{},"Callbacks de cycle de vie et configuration de retry.",[827,1227,1229],{"id":1228},"valeur-de-retour-de-usemutation","Valeur de retour de useMutation",[348,1231,904,1232,1235],{},[360,1233,1234],{},"MutationHandle\u003CTData, TVariables>"," :",[832,1237,1238,1249],{},[835,1239,1240],{},[838,1241,1242,1245,1247],{},[841,1243,1244],{},"Propriété",[841,1246,846],{},[841,1248,849],{},[851,1250,1251,1265,1284,1302,1320,1336,1352,1368,1385],{},[838,1252,1253,1257,1262],{},[856,1254,1255],{},[360,1256,1105],{},[856,1258,1259],{},[360,1260,1261],{},"void Function(TVariables)",[856,1263,1264],{},"Déclenche sans attendre ; les erreurs vont dans l'état.",[838,1266,1267,1272,1277],{},[856,1268,1269],{},[360,1270,1271],{},"mutateAsync",[856,1273,1274],{},[360,1275,1276],{},"Future\u003CTData?> Function(TVariables)",[856,1278,1279,1280,1283],{},"Retourne le résultat ou ",[360,1281,1282],{},"null"," en cas d'échec.",[838,1285,1286,1291,1296],{},[856,1287,1288],{},[360,1289,1290],{},"reset",[856,1292,1293],{},[360,1294,1295],{},"void Function()",[856,1297,1298,1299,492],{},"Réinitialise l'état à ",[360,1300,1301],{},"MutationIdle",[838,1303,1304,1309,1314],{},[856,1305,1306],{},[360,1307,1308],{},"isIdle",[856,1310,1311],{},[360,1312,1313],{},"bool",[856,1315,1316,1319],{},[360,1317,1318],{},"true"," quand aucune mutation n'a encore été exécutée.",[838,1321,1322,1327,1331],{},[856,1323,1324],{},[360,1325,1326],{},"isPending",[856,1328,1329],{},[360,1330,1313],{},[856,1332,1333,1335],{},[360,1334,1318],{}," pendant l'exécution de la mutation.",[838,1337,1338,1343,1347],{},[856,1339,1340],{},[360,1341,1342],{},"isSuccess",[856,1344,1345],{},[360,1346,1313],{},[856,1348,1349,1351],{},[360,1350,1318],{}," après une complétion réussie.",[838,1353,1354,1359,1363],{},[856,1355,1356],{},[360,1357,1358],{},"isError",[856,1360,1361],{},[360,1362,1313],{},[856,1364,1365,1367],{},[360,1366,1318],{}," après un échec.",[838,1369,1370,1375,1380],{},[856,1371,1372],{},[360,1373,1374],{},"data",[856,1376,1377],{},[360,1378,1379],{},"TData?",[856,1381,1382,1383,492],{},"Disponible quand ",[360,1384,1342],{},[838,1386,1387,1392,1397],{},[856,1388,1389],{},[360,1390,1391],{},"error",[856,1393,1394],{},[360,1395,1396],{},"Object?",[856,1398,1382,1399,492],{},[360,1400,1358],{},[923,1402],{},[365,1404,1406],{"id":1405},"usequeryclient","useQueryClient",[348,1408,1409,1410,1412],{},"Retourne le ",[360,1411,202],{}," le plus proche dans l'arbre de widgets.",[372,1414,1416],{"className":441,"code":1415,"language":443,"meta":378,"style":378},"final client = useQueryClient();\nclient.invalidate(['posts']);\n",[360,1417,1418,1434],{"__ignoreMap":378},[382,1419,1420,1422,1425,1427,1430,1432],{"class":384,"line":385},[382,1421,715],{"class":469},[382,1423,1424],{"class":463}," client ",[382,1426,554],{"class":399},[382,1428,1429],{"class":532}," useQueryClient",[382,1431,700],{"class":463},[382,1433,479],{"class":399},[382,1435,1436,1439,1441,1444,1447,1450,1453],{"class":384,"line":392},[382,1437,1438],{"class":463},"client",[382,1440,492],{"class":399},[382,1442,1443],{"class":532},"invalidate",[382,1445,1446],{"class":463},"([",[382,1448,1449],{"class":412},"'posts'",[382,1451,1452],{"class":463},"])",[382,1454,479],{"class":399},[348,1456,1457,1458,1460],{},"Le widget doit être encapsulé dans un ",[360,1459,103],{}," pour que cela fonctionne.",[923,1462],{},[365,1464,1466],{"id":1465},"useisfetching","useIsFetching",[348,1468,1469,1470,1472,1473,1475],{},"Retourne ",[360,1471,1318],{}," tant qu'au moins une requête gérée par le ",[360,1474,202],{}," le plus proche\na une requête réseau en cours. Utile pour un indicateur de chargement global en haut\nde l'écran sans le coupler à une requête individuelle.",[372,1477,1479],{"className":441,"code":1478,"language":443,"meta":378,"style":378},"class AppLoadingBar extends HookWidget {\n  @override\n  Widget build(BuildContext context) {\n    final isFetching = useIsFetching();\n    return AnimatedOpacity(\n      opacity: isFetching ? 1.0 : 0.0,\n      duration: const Duration(milliseconds: 200),\n      child: const LinearProgressIndicator(),\n    );\n  }\n}\n",[360,1480,1481,1494,1498,1510,1526,1535,1557,1580,1595,1601,1605],{"__ignoreMap":378},[382,1482,1483,1485,1488,1490,1492],{"class":384,"line":385},[382,1484,450],{"class":399},[382,1486,1487],{"class":453}," AppLoadingBar",[382,1489,457],{"class":399},[382,1491,460],{"class":453},[382,1493,464],{"class":463},[382,1495,1496],{"class":384,"line":392},[382,1497,523],{"class":469},[382,1499,1500,1502,1504,1506,1508],{"class":384,"line":403},[382,1501,529],{"class":453},[382,1503,533],{"class":532},[382,1505,536],{"class":463},[382,1507,539],{"class":453},[382,1509,542],{"class":463},[382,1511,1512,1514,1517,1519,1522,1524],{"class":384,"line":416},[382,1513,548],{"class":469},[382,1515,1516],{"class":463}," isFetching ",[382,1518,554],{"class":399},[382,1520,1521],{"class":532}," useIsFetching",[382,1523,700],{"class":463},[382,1525,479],{"class":399},[382,1527,1528,1530,1533],{"class":384,"line":520},[382,1529,670],{"class":669},[382,1531,1532],{"class":453}," AnimatedOpacity",[382,1534,1024],{"class":463},[382,1536,1537,1540,1542,1544,1547,1550,1552,1555],{"class":384,"line":526},[382,1538,1539],{"class":463},"      opacity",[382,1541,409],{"class":399},[382,1543,1516],{"class":463},[382,1545,1546],{"class":399},"?",[382,1548,1549],{"class":644}," 1.0",[382,1551,1235],{"class":399},[382,1553,1554],{"class":644}," 0.0",[382,1556,358],{"class":399},[382,1558,1559,1562,1564,1566,1568,1571,1573,1576,1578],{"class":384,"line":545},[382,1560,1561],{"class":463},"      duration",[382,1563,409],{"class":399},[382,1565,625],{"class":469},[382,1567,636],{"class":453},[382,1569,1570],{"class":463},"(milliseconds",[382,1572,409],{"class":399},[382,1574,1575],{"class":644}," 200",[382,1577,1162],{"class":463},[382,1579,358],{"class":399},[382,1581,1582,1584,1586,1588,1591,1593],{"class":384,"line":569},[382,1583,1126],{"class":463},[382,1585,409],{"class":399},[382,1587,625],{"class":469},[382,1589,1590],{"class":453}," LinearProgressIndicator",[382,1592,700],{"class":463},[382,1594,358],{"class":399},[382,1596,1597,1599],{"class":384,"line":590},[382,1598,656],{"class":463},[382,1600,479],{"class":399},[382,1602,1603],{"class":384,"line":617},[382,1604,819],{"class":463},[382,1606,1607],{"class":384,"line":653},[382,1608,825],{"class":463},[827,1610,1612],{"id":1611},"valeur-de-retour-de-useisfetching","Valeur de retour de useIsFetching",[348,1614,1615,1617,1618,1620,1621,912,1624,1627],{},[360,1616,1313],{}," : ",[360,1619,1318],{}," quand ",[360,1622,1623],{},"isFetchingCount > 0",[360,1625,1626],{},"false"," sinon.\nReconstruit le widget uniquement quand la valeur franchit la limite zéro.",[923,1629],{},[365,1631,1633],{"id":1632},"useismutating","useIsMutating",[348,1635,1469,1636,1638,1639,1641,1642,1645],{},[360,1637,1318],{}," tant qu'au moins une mutation gérée par le ",[360,1640,202],{}," le plus proche\nest à l'état ",[360,1643,1644],{},"MutationPending",". Pratique pour désactiver un bouton de soumission global\npendant qu'une opération d'écriture est en cours.",[372,1647,1649],{"className":441,"code":1648,"language":443,"meta":378,"style":378},"class SubmitButton extends HookWidget {\n  final VoidCallback onPressed;\n  const SubmitButton({super.key, required this.onPressed});\n\n  @override\n  Widget build(BuildContext context) {\n    final isMutating = useIsMutating();\n    return FilledButton(\n      onPressed: isMutating ? null : onPressed,\n      child: isMutating\n          ? const SizedBox.square(\n              dimension: 18,\n              child: CircularProgressIndicator(strokeWidth: 2),\n            )\n          : const Text('Sauvegarder'),\n    );\n  }\n}\n",[360,1650,1651,1664,1676,1701,1705,1709,1721,1737,1746,1765,1774,1789,1801,1822,1827,1843,1849,1853],{"__ignoreMap":378},[382,1652,1653,1655,1658,1660,1662],{"class":384,"line":385},[382,1654,450],{"class":399},[382,1656,1657],{"class":453}," SubmitButton",[382,1659,457],{"class":399},[382,1661,460],{"class":453},[382,1663,464],{"class":463},[382,1665,1666,1668,1671,1674],{"class":384,"line":392},[382,1667,470],{"class":469},[382,1669,1670],{"class":453}," VoidCallback",[382,1672,1673],{"class":463}," onPressed",[382,1675,479],{"class":399},[382,1677,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1699],{"class":384,"line":403},[382,1679,484],{"class":469},[382,1681,1657],{"class":453},[382,1683,489],{"class":463},[382,1685,492],{"class":399},[382,1687,495],{"class":463},[382,1689,498],{"class":399},[382,1691,501],{"class":469},[382,1693,504],{"class":463},[382,1695,492],{"class":399},[382,1697,1698],{"class":463},"onPressed})",[382,1700,479],{"class":399},[382,1702,1703],{"class":384,"line":416},[382,1704,517],{"emptyLinePlaceholder":516},[382,1706,1707],{"class":384,"line":520},[382,1708,523],{"class":469},[382,1710,1711,1713,1715,1717,1719],{"class":384,"line":526},[382,1712,529],{"class":453},[382,1714,533],{"class":532},[382,1716,536],{"class":463},[382,1718,539],{"class":453},[382,1720,542],{"class":463},[382,1722,1723,1725,1728,1730,1733,1735],{"class":384,"line":545},[382,1724,548],{"class":469},[382,1726,1727],{"class":463}," isMutating ",[382,1729,554],{"class":399},[382,1731,1732],{"class":532}," useIsMutating",[382,1734,700],{"class":463},[382,1736,479],{"class":399},[382,1738,1739,1741,1744],{"class":384,"line":569},[382,1740,670],{"class":669},[382,1742,1743],{"class":453}," FilledButton",[382,1745,1024],{"class":463},[382,1747,1748,1750,1752,1754,1756,1759,1761,1763],{"class":384,"line":590},[382,1749,1074],{"class":463},[382,1751,409],{"class":399},[382,1753,1727],{"class":463},[382,1755,1546],{"class":399},[382,1757,1758],{"class":399}," null",[382,1760,1235],{"class":399},[382,1762,1673],{"class":463},[382,1764,358],{"class":399},[382,1766,1767,1769,1771],{"class":384,"line":617},[382,1768,1126],{"class":463},[382,1770,409],{"class":399},[382,1772,1773],{"class":463}," isMutating\n",[382,1775,1776,1778,1780,1782,1784,1787],{"class":384,"line":653},[382,1777,735],{"class":399},[382,1779,625],{"class":469},[382,1781,692],{"class":453},[382,1783,492],{"class":399},[382,1785,1786],{"class":532},"square",[382,1788,1024],{"class":463},[382,1790,1791,1794,1796,1799],{"class":384,"line":661},[382,1792,1793],{"class":463},"              dimension",[382,1795,409],{"class":399},[382,1797,1798],{"class":644}," 18",[382,1800,358],{"class":399},[382,1802,1803,1806,1808,1810,1813,1815,1818,1820],{"class":384,"line":666},[382,1804,1805],{"class":463},"              child",[382,1807,409],{"class":399},[382,1809,752],{"class":453},[382,1811,1812],{"class":463},"(strokeWidth",[382,1814,409],{"class":399},[382,1816,1817],{"class":644}," 2",[382,1819,1162],{"class":463},[382,1821,358],{"class":399},[382,1823,1824],{"class":384,"line":679},[382,1825,1826],{"class":463},"            )\n",[382,1828,1829,1831,1833,1835,1837,1839,1841],{"class":384,"line":705},[382,1830,747],{"class":399},[382,1832,625],{"class":469},[382,1834,1154],{"class":453},[382,1836,536],{"class":463},[382,1838,1159],{"class":412},[382,1840,1162],{"class":463},[382,1842,358],{"class":399},[382,1844,1845,1847],{"class":384,"line":732},[382,1846,656],{"class":463},[382,1848,479],{"class":399},[382,1850,1851],{"class":384,"line":744},[382,1852,819],{"class":463},[382,1854,1855],{"class":384,"line":759},[382,1856,825],{"class":463},[827,1858,1860],{"id":1859},"valeur-de-retour-de-useismutating","Valeur de retour de useIsMutating",[348,1862,1863,1617,1865,1620,1867,912,1870,1872],{},[360,1864,1313],{},[360,1866,1318],{},[360,1868,1869],{},"activeMutations.length > 0",[360,1871,1626],{}," sinon.",[923,1874],{},[365,1876,1878],{"id":1877},"useinfinitequery","useInfiniteQuery",[348,1880,1881,1882,492],{},"Gère les données paginées : accumule les pages et expose une\nfonction ",[360,1883,1884],{},"fetchNextPage",[372,1886,1888],{"className":441,"code":1887,"language":443,"meta":378,"style":378},"class PostsScreen extends HookWidget {\n  @override\n  Widget build(BuildContext context) {\n    final query = useInfiniteQuery\u003CPostsPage, String?>(\n      key: const ['posts'],\n      fetcher: (cursor) => Api.getPosts(cursor: cursor),\n      getNextPageParam: (page) => page.nextCursor,\n      initialPageParam: null,\n    );\n\n    final posts = query.pages.expand((p) => p.posts).toList();\n\n    return ListView.builder(\n      itemCount: posts.length + (query.hasNextPage ? 1 : 0),\n      itemBuilder: (context, i) {\n        if (i == posts.length) {\n          if (!query.isFetchingNextPage) query.fetchNextPage();\n          return const Center(child: CircularProgressIndicator());\n        }\n        return PostTile(posts[i]);\n      },\n    );\n  }\n}\n",[360,1889,1890,1903,1907,1919,1944,1961,1989,2011,2021,2027,2031,2075,2079,2092,2132,2147,2165,2192,2214,2219,2232,2239,2245,2250],{"__ignoreMap":378},[382,1891,1892,1894,1897,1899,1901],{"class":384,"line":385},[382,1893,450],{"class":399},[382,1895,1896],{"class":453}," PostsScreen",[382,1898,457],{"class":399},[382,1900,460],{"class":453},[382,1902,464],{"class":463},[382,1904,1905],{"class":384,"line":392},[382,1906,523],{"class":469},[382,1908,1909,1911,1913,1915,1917],{"class":384,"line":403},[382,1910,529],{"class":453},[382,1912,533],{"class":532},[382,1914,536],{"class":463},[382,1916,539],{"class":453},[382,1918,542],{"class":463},[382,1920,1921,1923,1926,1928,1931,1933,1936,1938,1941],{"class":384,"line":416},[382,1922,548],{"class":469},[382,1924,1925],{"class":463}," query ",[382,1927,554],{"class":399},[382,1929,1930],{"class":532}," useInfiniteQuery",[382,1932,560],{"class":463},[382,1934,1935],{"class":453},"PostsPage",[382,1937,912],{"class":463},[382,1939,1940],{"class":453},"String",[382,1942,1943],{"class":463},"?>(\n",[382,1945,1946,1948,1950,1952,1954,1956,1959],{"class":384,"line":520},[382,1947,572],{"class":463},[382,1949,409],{"class":399},[382,1951,625],{"class":469},[382,1953,577],{"class":463},[382,1955,1449],{"class":412},[382,1957,1958],{"class":463},"]",[382,1960,358],{"class":399},[382,1962,1963,1965,1967,1970,1972,1974,1976,1979,1982,1984,1987],{"class":384,"line":526},[382,1964,593],{"class":463},[382,1966,409],{"class":399},[382,1968,1969],{"class":463}," (cursor) ",[382,1971,601],{"class":399},[382,1973,604],{"class":453},[382,1975,492],{"class":399},[382,1977,1978],{"class":532},"getPosts",[382,1980,1981],{"class":463},"(cursor",[382,1983,409],{"class":399},[382,1985,1986],{"class":463}," cursor)",[382,1988,358],{"class":399},[382,1990,1991,1994,1996,1999,2001,2004,2006,2009],{"class":384,"line":545},[382,1992,1993],{"class":463},"      getNextPageParam",[382,1995,409],{"class":399},[382,1997,1998],{"class":463}," (page) ",[382,2000,601],{"class":399},[382,2002,2003],{"class":463}," page",[382,2005,492],{"class":399},[382,2007,2008],{"class":463},"nextCursor",[382,2010,358],{"class":399},[382,2012,2013,2016,2018],{"class":384,"line":569},[382,2014,2015],{"class":463},"      initialPageParam",[382,2017,409],{"class":399},[382,2019,2020],{"class":399}," null,\n",[382,2022,2023,2025],{"class":384,"line":590},[382,2024,656],{"class":463},[382,2026,479],{"class":399},[382,2028,2029],{"class":384,"line":617},[382,2030,517],{"emptyLinePlaceholder":516},[382,2032,2033,2035,2038,2040,2043,2045,2048,2050,2053,2056,2058,2061,2063,2066,2068,2071,2073],{"class":384,"line":653},[382,2034,548],{"class":469},[382,2036,2037],{"class":463}," posts ",[382,2039,554],{"class":399},[382,2041,2042],{"class":463}," query",[382,2044,492],{"class":399},[382,2046,2047],{"class":463},"pages",[382,2049,492],{"class":399},[382,2051,2052],{"class":532},"expand",[382,2054,2055],{"class":463},"((p) ",[382,2057,601],{"class":399},[382,2059,2060],{"class":463}," p",[382,2062,492],{"class":399},[382,2064,2065],{"class":463},"posts)",[382,2067,492],{"class":399},[382,2069,2070],{"class":532},"toList",[382,2072,700],{"class":463},[382,2074,479],{"class":399},[382,2076,2077],{"class":384,"line":661},[382,2078,517],{"emptyLinePlaceholder":516},[382,2080,2081,2083,2086,2088,2090],{"class":384,"line":666},[382,2082,670],{"class":669},[382,2084,2085],{"class":453}," ListView",[382,2087,492],{"class":399},[382,2089,437],{"class":532},[382,2091,1024],{"class":463},[382,2093,2094,2097,2099,2102,2104,2107,2110,2113,2115,2118,2120,2123,2125,2128,2130],{"class":384,"line":679},[382,2095,2096],{"class":463},"      itemCount",[382,2098,409],{"class":399},[382,2100,2101],{"class":463}," posts",[382,2103,492],{"class":399},[382,2105,2106],{"class":463},"length ",[382,2108,2109],{"class":399},"+",[382,2111,2112],{"class":463}," (query",[382,2114,492],{"class":399},[382,2116,2117],{"class":463},"hasNextPage ",[382,2119,1546],{"class":399},[382,2121,2122],{"class":644}," 1",[382,2124,1235],{"class":399},[382,2126,2127],{"class":644}," 0",[382,2129,1162],{"class":463},[382,2131,358],{"class":399},[382,2133,2134,2137,2139,2142,2144],{"class":384,"line":705},[382,2135,2136],{"class":463},"      itemBuilder",[382,2138,409],{"class":399},[382,2140,2141],{"class":463}," (context",[382,2143,498],{"class":399},[382,2145,2146],{"class":463}," i) {\n",[382,2148,2149,2152,2155,2158,2160,2162],{"class":384,"line":732},[382,2150,2151],{"class":669},"        if",[382,2153,2154],{"class":463}," (i ",[382,2156,2157],{"class":399},"==",[382,2159,2101],{"class":463},[382,2161,492],{"class":399},[382,2163,2164],{"class":463},"length) {\n",[382,2166,2167,2170,2173,2176,2179,2181,2184,2186,2188,2190],{"class":384,"line":744},[382,2168,2169],{"class":669},"          if",[382,2171,2172],{"class":463}," (",[382,2174,2175],{"class":399},"!",[382,2177,2178],{"class":463},"query",[382,2180,492],{"class":399},[382,2182,2183],{"class":463},"isFetchingNextPage) query",[382,2185,492],{"class":399},[382,2187,1884],{"class":532},[382,2189,700],{"class":463},[382,2191,479],{"class":399},[382,2193,2194,2197,2199,2202,2205,2207,2209,2212],{"class":384,"line":759},[382,2195,2196],{"class":669},"          return",[382,2198,625],{"class":469},[382,2200,2201],{"class":453}," Center",[382,2203,2204],{"class":463},"(child",[382,2206,409],{"class":399},[382,2208,752],{"class":453},[382,2210,2211],{"class":463},"())",[382,2213,479],{"class":399},[382,2215,2216],{"class":384,"line":783},[382,2217,2218],{"class":463},"        }\n",[382,2220,2221,2224,2227,2230],{"class":384,"line":808},[382,2222,2223],{"class":669},"        return",[382,2225,2226],{"class":453}," PostTile",[382,2228,2229],{"class":463},"(posts[i])",[382,2231,479],{"class":399},[382,2233,2234,2237],{"class":384,"line":816},[382,2235,2236],{"class":463},"      }",[382,2238,358],{"class":399},[382,2240,2241,2243],{"class":384,"line":822},[382,2242,656],{"class":463},[382,2244,479],{"class":399},[382,2246,2248],{"class":384,"line":2247},23,[382,2249,819],{"class":463},[382,2251,2253],{"class":384,"line":2252},24,[382,2254,825],{"class":463},[827,2256,2258],{"id":2257},"paramètres-de-useinfinitequery","Paramètres de useInfiniteQuery",[832,2260,2261,2271],{},[835,2262,2263],{},[838,2264,2265,2267,2269],{},[841,2266,843],{},[841,2268,846],{},[841,2270,849],{},[851,2272,2273,2285,2299,2316],{},[838,2274,2275,2279,2283],{},[856,2276,2277],{},[360,2278,495],{},[856,2280,2281],{},[360,2282,864],{},[856,2284,867],{},[838,2286,2287,2291,2296],{},[856,2288,2289],{},[360,2290,874],{},[856,2292,2293],{},[360,2294,2295],{},"Future\u003CTData> Function(TPageParam)",[856,2297,2298],{},"Appelé avec le paramètre de page pour chaque page.",[838,2300,2301,2306,2311],{},[856,2302,2303],{},[360,2304,2305],{},"getNextPageParam",[856,2307,2308],{},[360,2309,2310],{},"TPageParam? Function(TData)",[856,2312,1469,2313,2315],{},[360,2314,1282],{}," pour signaler la dernière page.",[838,2317,2318,2323,2328],{},[856,2319,2320],{},[360,2321,2322],{},"initialPageParam",[856,2324,2325],{},[360,2326,2327],{},"TPageParam",[856,2329,2330,2331,492],{},"Premier paramètre de page passé à ",[360,2332,874],{},[827,2334,2336],{"id":2335},"valeur-de-retour-de-useinfinitequery","Valeur de retour de useInfiniteQuery",[348,2338,904,2339,1235],{},[360,2340,2341],{},"InfiniteQueryHandle\u003CTData, TPageParam>",[832,2343,2344,2354],{},[835,2345,2346],{},[838,2347,2348,2350,2352],{},[841,2349,1244],{},[841,2351,846],{},[841,2353,849],{},[851,2355,2356,2370,2386,2402,2418,2432],{},[838,2357,2358,2362,2367],{},[856,2359,2360],{},[360,2361,2047],{},[856,2363,2364],{},[360,2365,2366],{},"List\u003CTData>",[856,2368,2369],{},"Toutes les pages récupérées dans l'ordre.",[838,2371,2372,2377,2381],{},[856,2373,2374],{},[360,2375,2376],{},"isLoading",[856,2378,2379],{},[360,2380,1313],{},[856,2382,2383,2385],{},[360,2384,1318],{}," pendant le chargement de la première page.",[838,2387,2388,2393,2397],{},[856,2389,2390],{},[360,2391,2392],{},"isFetchingNextPage",[856,2394,2395],{},[360,2396,1313],{},[856,2398,2399,2401],{},[360,2400,1318],{}," pendant le chargement d'une page suivante.",[838,2403,2404,2409,2413],{},[856,2405,2406],{},[360,2407,2408],{},"hasNextPage",[856,2410,2411],{},[360,2412,1313],{},[856,2414,2415,2417],{},[360,2416,1626],{}," quand plus aucune page n'est disponible.",[838,2419,2420,2424,2429],{},[856,2421,2422],{},[360,2423,1884],{},[856,2425,2426],{},[360,2427,2428],{},"Future\u003Cvoid> Function()",[856,2430,2431],{},"Charge la page suivante. Sans effet si occupé.",[838,2433,2434,2438,2442],{},[856,2435,2436],{},[360,2437,1391],{},[856,2439,2440],{},[360,2441,1396],{},[856,2443,2444,2445,492],{},"Dernière erreur, ou ",[360,2446,1282],{},[923,2448],{},[365,2450,2452],{"id":2451},"composition-de-hooks","Composition de hooks",[348,2454,2455,2456,2459,2460,492],{},"Les hooks se composent naturellement. L'exemple suivant récupère un utilisateur, met à jour son profil et affiche une erreur inline dans un seul widget, sans ",[360,2457,2458],{},"setState"," ni ",[360,2461,2462],{},"StreamBuilder",[372,2464,2466],{"className":441,"code":2465,"language":443,"meta":378,"style":378},"class ProfileScreen extends HookWidget {\n  final String userId;\n  const ProfileScreen({super.key, required this.userId});\n\n  @override\n  Widget build(BuildContext context) {\n    final client = useQueryClient();\n    final userQuery = useQuery\u003CUser>(\n      key: ['users', userId],\n      fetcher: () => Api.getUser(userId),\n    );\n    final updateMutation = useMutation\u003CUser, UpdateUserInput>(\n      mutator: Api.updateUser,\n      options: MutationOptions(\n        invalidates: [['users', userId]],\n      ),\n    );\n\n    return switch (userQuery) {\n      Loading()             => const CircularProgressIndicator(),\n      Failure(:final error) => ErrorView(error),\n      Success(:final data)  => ProfileForm(\n        user: data,\n        isSaving: updateMutation.isPending,\n        saveError: updateMutation.error,\n        onSave: (input) => updateMutation.mutate(input),\n      ),\n      _ => const SizedBox.shrink(),\n    };\n  }\n}\n",[360,2467,2468,2481,2491,2515,2519,2523,2535,2549,2566,2582,2602,2608,2629,2643,2653,2670,2676,2682,2686,2695,2712,2733,2753,2765,2781,2797,2819,2826,2846,2853,2858],{"__ignoreMap":378},[382,2469,2470,2472,2475,2477,2479],{"class":384,"line":385},[382,2471,450],{"class":399},[382,2473,2474],{"class":453}," ProfileScreen",[382,2476,457],{"class":399},[382,2478,460],{"class":453},[382,2480,464],{"class":463},[382,2482,2483,2485,2487,2489],{"class":384,"line":392},[382,2484,470],{"class":469},[382,2486,473],{"class":453},[382,2488,476],{"class":463},[382,2490,479],{"class":399},[382,2492,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513],{"class":384,"line":403},[382,2494,484],{"class":469},[382,2496,2474],{"class":453},[382,2498,489],{"class":463},[382,2500,492],{"class":399},[382,2502,495],{"class":463},[382,2504,498],{"class":399},[382,2506,501],{"class":469},[382,2508,504],{"class":463},[382,2510,492],{"class":399},[382,2512,509],{"class":463},[382,2514,479],{"class":399},[382,2516,2517],{"class":384,"line":416},[382,2518,517],{"emptyLinePlaceholder":516},[382,2520,2521],{"class":384,"line":520},[382,2522,523],{"class":469},[382,2524,2525,2527,2529,2531,2533],{"class":384,"line":526},[382,2526,529],{"class":453},[382,2528,533],{"class":532},[382,2530,536],{"class":463},[382,2532,539],{"class":453},[382,2534,542],{"class":463},[382,2536,2537,2539,2541,2543,2545,2547],{"class":384,"line":545},[382,2538,548],{"class":469},[382,2540,1424],{"class":463},[382,2542,554],{"class":399},[382,2544,1429],{"class":532},[382,2546,700],{"class":463},[382,2548,479],{"class":399},[382,2550,2551,2553,2556,2558,2560,2562,2564],{"class":384,"line":569},[382,2552,548],{"class":469},[382,2554,2555],{"class":463}," userQuery ",[382,2557,554],{"class":399},[382,2559,557],{"class":532},[382,2561,560],{"class":463},[382,2563,563],{"class":453},[382,2565,566],{"class":463},[382,2567,2568,2570,2572,2574,2576,2578,2580],{"class":384,"line":590},[382,2569,572],{"class":463},[382,2571,409],{"class":399},[382,2573,577],{"class":463},[382,2575,580],{"class":412},[382,2577,498],{"class":399},[382,2579,585],{"class":463},[382,2581,358],{"class":399},[382,2583,2584,2586,2588,2590,2592,2594,2596,2598,2600],{"class":384,"line":617},[382,2585,593],{"class":463},[382,2587,409],{"class":399},[382,2589,598],{"class":463},[382,2591,601],{"class":399},[382,2593,604],{"class":453},[382,2595,492],{"class":399},[382,2597,609],{"class":532},[382,2599,612],{"class":463},[382,2601,358],{"class":399},[382,2603,2604,2606],{"class":384,"line":653},[382,2605,656],{"class":463},[382,2607,479],{"class":399},[382,2609,2610,2612,2615,2617,2619,2621,2623,2625,2627],{"class":384,"line":661},[382,2611,548],{"class":469},[382,2613,2614],{"class":463}," updateMutation ",[382,2616,554],{"class":399},[382,2618,977],{"class":532},[382,2620,560],{"class":463},[382,2622,563],{"class":453},[382,2624,912],{"class":463},[382,2626,986],{"class":453},[382,2628,566],{"class":463},[382,2630,2631,2633,2635,2637,2639,2641],{"class":384,"line":666},[382,2632,993],{"class":463},[382,2634,409],{"class":399},[382,2636,604],{"class":453},[382,2638,492],{"class":399},[382,2640,1007],{"class":463},[382,2642,358],{"class":399},[382,2644,2645,2647,2649,2651],{"class":384,"line":679},[382,2646,620],{"class":463},[382,2648,409],{"class":399},[382,2650,1021],{"class":453},[382,2652,1024],{"class":463},[382,2654,2655,2657,2659,2661,2663,2665,2668],{"class":384,"line":705},[382,2656,1029],{"class":463},[382,2658,409],{"class":399},[382,2660,1034],{"class":463},[382,2662,580],{"class":412},[382,2664,498],{"class":399},[382,2666,2667],{"class":463}," userId]]",[382,2669,358],{"class":399},[382,2671,2672,2674],{"class":384,"line":732},[382,2673,1048],{"class":463},[382,2675,358],{"class":399},[382,2677,2678,2680],{"class":384,"line":744},[382,2679,656],{"class":463},[382,2681,479],{"class":399},[382,2683,2684],{"class":384,"line":759},[382,2685,517],{"emptyLinePlaceholder":516},[382,2687,2688,2690,2692],{"class":384,"line":783},[382,2689,670],{"class":669},[382,2691,673],{"class":669},[382,2693,2694],{"class":463}," (userQuery) {\n",[382,2696,2697,2699,2702,2704,2706,2708,2710],{"class":384,"line":808},[382,2698,708],{"class":453},[382,2700,2701],{"class":463},"()             ",[382,2703,601],{"class":399},[382,2705,625],{"class":469},[382,2707,752],{"class":453},[382,2709,700],{"class":463},[382,2711,358],{"class":399},[382,2713,2714,2716,2718,2720,2722,2725,2727,2729,2731],{"class":384,"line":816},[382,2715,786],{"class":453},[382,2717,536],{"class":463},[382,2719,409],{"class":399},[382,2721,715],{"class":469},[382,2723,2724],{"class":463}," error) ",[382,2726,601],{"class":399},[382,2728,800],{"class":453},[382,2730,803],{"class":463},[382,2732,358],{"class":399},[382,2734,2735,2737,2739,2741,2743,2746,2748,2751],{"class":384,"line":822},[382,2736,762],{"class":453},[382,2738,536],{"class":463},[382,2740,409],{"class":399},[382,2742,715],{"class":469},[382,2744,2745],{"class":463}," data)  ",[382,2747,601],{"class":399},[382,2749,2750],{"class":453}," ProfileForm",[382,2752,1024],{"class":463},[382,2754,2755,2758,2760,2763],{"class":384,"line":2247},[382,2756,2757],{"class":463},"        user",[382,2759,409],{"class":399},[382,2761,2762],{"class":463}," data",[382,2764,358],{"class":399},[382,2766,2767,2770,2772,2775,2777,2779],{"class":384,"line":2252},[382,2768,2769],{"class":463},"        isSaving",[382,2771,409],{"class":399},[382,2773,2774],{"class":463}," updateMutation",[382,2776,492],{"class":399},[382,2778,1326],{"class":463},[382,2780,358],{"class":399},[382,2782,2784,2787,2789,2791,2793,2795],{"class":384,"line":2783},25,[382,2785,2786],{"class":463},"        saveError",[382,2788,409],{"class":399},[382,2790,2774],{"class":463},[382,2792,492],{"class":399},[382,2794,1391],{"class":463},[382,2796,358],{"class":399},[382,2798,2800,2803,2805,2807,2809,2811,2813,2815,2817],{"class":384,"line":2799},26,[382,2801,2802],{"class":463},"        onSave",[382,2804,409],{"class":399},[382,2806,998],{"class":463},[382,2808,601],{"class":399},[382,2810,2774],{"class":463},[382,2812,492],{"class":399},[382,2814,1105],{"class":532},[382,2816,1010],{"class":463},[382,2818,358],{"class":399},[382,2820,2822,2824],{"class":384,"line":2821},27,[382,2823,1048],{"class":463},[382,2825,358],{"class":399},[382,2827,2829,2832,2834,2836,2838,2840,2842,2844],{"class":384,"line":2828},28,[382,2830,2831],{"class":463},"      _ ",[382,2833,601],{"class":399},[382,2835,625],{"class":469},[382,2837,692],{"class":453},[382,2839,492],{"class":399},[382,2841,697],{"class":532},[382,2843,700],{"class":463},[382,2845,358],{"class":399},[382,2847,2849,2851],{"class":384,"line":2848},29,[382,2850,811],{"class":463},[382,2852,479],{"class":399},[382,2854,2856],{"class":384,"line":2855},30,[382,2857,819],{"class":463},[382,2859,2861],{"class":384,"line":2860},31,[382,2862,825],{"class":463},[923,2864],{},[2866,2867,2869,2871,2872,2875,2876,2879,2880,2883,2884,2887,2888,2883,2890,2892],"callout",{"type":2868},"info",[360,2870,362],{}," requiert que votre widget étende ",[360,2873,2874],{},"HookWidget"," (ou ",[360,2877,2878],{},"HookConsumerWidget","\nsi vous combinez avec Riverpod). ",[360,2881,2882],{},"StatelessWidget"," et ",[360,2885,2886],{},"StatefulWidget"," standard\nne sont pas pris en charge : utiliser ",[360,2889,108],{},[360,2891,113],{}," à la place.",[2894,2895,2896],"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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":378,"searchDepth":392,"depth":392,"links":2898},[2899,2900,2904,2908,2909,2912,2915,2919],{"id":367,"depth":392,"text":16},{"id":427,"depth":392,"text":428,"children":2901},[2902,2903],{"id":829,"depth":403,"text":830},{"id":900,"depth":403,"text":901},{"id":927,"depth":392,"text":928,"children":2905},[2906,2907],{"id":1181,"depth":403,"text":1182},{"id":1228,"depth":403,"text":1229},{"id":1405,"depth":392,"text":1406},{"id":1465,"depth":392,"text":1466,"children":2910},[2911],{"id":1611,"depth":403,"text":1612},{"id":1632,"depth":392,"text":1633,"children":2913},[2914],{"id":1859,"depth":403,"text":1860},{"id":1877,"depth":392,"text":1878,"children":2916},[2917,2918],{"id":2257,"depth":403,"text":2258},{"id":2335,"depth":403,"text":2336},{"id":2451,"depth":392,"text":2452},"Utiliser useQuery, useMutation, useInfiniteQuery, useIsFetching et useIsMutating avec flutter_hooks pour une API concise et composable.\n","md",null,{},{"icon":126},{"title":123,"description":2920},"UBL8T2ydImWP6J1wmhjxFZdMMLJFociHQrQG_7Kd2oE",[2928,2930],{"title":118,"path":119,"stem":120,"description":2929,"icon":121,"children":-1},"Le widget qui gère les requêtes paginées et expose fetchNextPage, fetchPreviousPage et refetch via une interface de contrôleur stable.",{"title":128,"path":129,"stem":130,"description":2931,"icon":131,"children":-1},"NetworkStatusBuilder et NetworkStatusIndicator : widgets réactifs pour afficher l'état hors-ligne dans les applications Flutter.",1794040407311]