[{"data":1,"prerenderedAt":2934},["ShallowReactive",2],{"navigation_docs_en":3,"-en-flutter-integration-hooks":342,"-en-flutter-integration-hooks-surround":2929},[4,45,91,137,195,236,257,291,327],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Getting Started","i-lucide-rocket","/en/getting-started","en/01.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"What is Qora?","/en/getting-started/what-is-qora","en/01.getting-started/2.what-is-qora","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/en/getting-started/installation","en/01.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Quick Start","/en/getting-started/quick-start","en/01.getting-started/4.quick-start",{"title":25,"path":26,"stem":27,"icon":28},"Comparison","/en/getting-started/comparison","en/01.getting-started/5.comparison","i-lucide-scale",{"title":30,"path":31,"stem":32,"icon":33},"Coming from TanStack Query","/en/getting-started/coming-from-tanstack-query","en/01.getting-started/6.coming-from-tanstack-query","i-lucide-arrow-left-right",{"title":35,"path":36,"stem":37,"icon":38},"Migrating from Other Libraries","/en/getting-started/migrating-from-other-libraries","en/01.getting-started/7.migrating-from-other-libraries","i-lucide-arrow-right-left",{"title":40,"path":41,"stem":42,"icon":43},"AI Assistants","/en/getting-started/ai-assistants","en/01.getting-started/8.ai-assistants","i-lucide-sparkles",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Core Concepts","i-lucide-book-open","/en/core-concepts","en/02.core-concepts",[51,56,61,66,71,76,81,86],{"title":52,"path":53,"stem":54,"icon":55},"Queries","/en/core-concepts/queries","en/02.core-concepts/1.queries","i-lucide-database",{"title":57,"path":58,"stem":59,"icon":60},"Query Keys","/en/core-concepts/query-keys","en/02.core-concepts/2.query-keys","i-lucide-key-round",{"title":62,"path":63,"stem":64,"icon":65},"Query States","/en/core-concepts/query-states","en/02.core-concepts/3.query-states","i-lucide-activity",{"title":67,"path":68,"stem":69,"icon":70},"Caching","/en/core-concepts/caching","en/02.core-concepts/4.caching","i-lucide-layers-3",{"title":72,"path":73,"stem":74,"icon":75},"Stale-While-Revalidate","/en/core-concepts/stale-while-revalidate","en/02.core-concepts/5.stale-while-revalidate","i-lucide-timer-reset",{"title":77,"path":78,"stem":79,"icon":80},"Deduplication","/en/core-concepts/deduplication","en/02.core-concepts/6.deduplication","i-lucide-copy-minus",{"title":82,"path":83,"stem":84,"icon":85},"Mutations & Invalidation","/en/core-concepts/mutations","en/02.core-concepts/7.mutations","i-lucide-pencil-line",{"title":87,"path":88,"stem":89,"icon":90},"Offline & Network","/en/core-concepts/offline","en/02.core-concepts/8.offline","i-lucide-wifi-off",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":44},"Flutter Integration","i-lucide-smartphone","/en/flutter-integration","en/03.flutter-integration",[97,102,107,112,117,122,127,132],{"title":98,"path":99,"stem":100,"icon":101},"Setup","/en/flutter-integration/setup","en/03.flutter-integration/1.setup","i-lucide-wrench",{"title":103,"path":104,"stem":105,"icon":106},"QoraScope","/en/flutter-integration/qora-scope","en/03.flutter-integration/2.qora-scope","i-lucide-share-2",{"title":108,"path":109,"stem":110,"icon":111},"QoraBuilder","/en/flutter-integration/qora-builder","en/03.flutter-integration/3.qora-builder","i-lucide-blocks",{"title":113,"path":114,"stem":115,"icon":116},"QoraMutationBuilder","/en/flutter-integration/qora-mutation-builder","en/03.flutter-integration/4.qora-mutation-builder","i-lucide-pencil",{"title":118,"path":119,"stem":120,"icon":121},"InfiniteQueryBuilder","/en/flutter-integration/infinite-query-builder","en/03.flutter-integration/5.infinite-query-builder","i-lucide-infinity",{"title":123,"path":124,"stem":125,"icon":126},"Hooks (flutter_hooks)","/en/flutter-integration/hooks","en/03.flutter-integration/6.hooks","i-lucide-anchor",{"title":128,"path":129,"stem":130,"icon":131},"Network Status Widgets","/en/flutter-integration/network-status","en/03.flutter-integration/7.network-status","i-lucide-wifi",{"title":133,"path":134,"stem":135,"icon":136},"Best Practices","/en/flutter-integration/best-practices","en/03.flutter-integration/8.best-practices","i-lucide-badge-check",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":44},"Recipes","i-lucide-chef-hat","/en/recipes","en/04.recipes",[143,147,152,157,162,166,171,176,181,186,191],{"title":144,"path":145,"stem":146,"icon":85},"Mutations","/en/recipes/mutations","en/04.recipes/02.mutations",{"title":148,"path":149,"stem":150,"icon":151},"Optimistic Updates","/en/recipes/optimistic-updates","en/04.recipes/03.optimistic-updates","i-lucide-zap",{"title":153,"path":154,"stem":155,"icon":156},"Persistence","/en/recipes/persistence","en/04.recipes/04.persistence","i-lucide-hard-drive",{"title":158,"path":159,"stem":160,"icon":161},"Network Aware","/en/recipes/network-aware","en/04.recipes/05.network-aware","i-lucide-signal",{"title":163,"path":164,"stem":165,"icon":121},"Infinite Queries","/en/recipes/infinite-queries","en/04.recipes/06.infinite-queries",{"title":167,"path":168,"stem":169,"icon":170},"Dependent Queries","/en/recipes/dependent-queries","en/04.recipes/07.dependent-queries","i-lucide-link-2",{"title":172,"path":173,"stem":174,"icon":175},"Cancellation","/en/recipes/cancel-token","en/04.recipes/08.cancel-token","i-lucide-circle-slash",{"title":177,"path":178,"stem":179,"icon":180},"SSR Hydration","/en/recipes/ssr-hydration","en/04.recipes/09.ssr-hydration","i-lucide-server",{"title":182,"path":183,"stem":184,"icon":185},"Error Handling","/en/recipes/error-handling","en/04.recipes/10.error-handling","i-lucide-shield-alert",{"title":187,"path":188,"stem":189,"icon":190},"Testing","/en/recipes/testing","en/04.recipes/11.testing","i-lucide-flask-conical",{"title":192,"path":193,"stem":194},"Route-Level Prefetching","/en/recipes/prefetch","en/04.recipes/12.prefetch",{"title":196,"icon":197,"path":198,"stem":199,"children":200,"page":44},"API Reference","i-lucide-file-code","/en/api-reference","en/05.api-reference",[201,206,210,214,219,224,228,232],{"title":202,"path":203,"stem":204,"icon":205},"QoraClient","/en/api-reference/qora-client","en/05.api-reference/1.qora-client","i-lucide-cpu",{"title":207,"path":208,"stem":209,"icon":60},"QoraKey","/en/api-reference/qora-key","en/05.api-reference/2.qora-key",{"title":211,"path":212,"stem":213,"icon":65},"QoraState","/en/api-reference/qora-state","en/05.api-reference/3.qora-state",{"title":215,"path":216,"stem":217,"icon":218},"QoraOptions","/en/api-reference/qora-options","en/05.api-reference/4.qora-options","i-lucide-sliders-horizontal",{"title":220,"path":221,"stem":222,"icon":223},"QoraClientConfig","/en/api-reference/qora-client-config","en/05.api-reference/5.qora-client-config","i-lucide-settings-2",{"title":225,"path":226,"stem":227,"icon":85},"Mutation API","/en/api-reference/qora-mutation","en/05.api-reference/6.qora-mutation",{"title":229,"path":230,"stem":231,"icon":156},"PersistQoraClient","/en/api-reference/persist-qora-client","en/05.api-reference/7.persist-qora-client",{"title":233,"path":234,"stem":235,"icon":121},"Infinite Query","/en/api-reference/infinite-query","en/05.api-reference/8.infinite-query",{"title":237,"icon":238,"path":239,"stem":240,"children":241,"page":44},"DevTools","i-lucide-bug","/en/devtools","en/06.devtools",[242,247,252],{"title":243,"path":244,"stem":245,"icon":246},"Overview","/en/devtools/overview","en/06.devtools/1.overview","i-lucide-layout-dashboard",{"title":248,"path":249,"stem":250,"icon":251},"In-App Overlay","/en/devtools/overlay","en/06.devtools/2.overlay","i-lucide-layers",{"title":253,"path":254,"stem":255,"icon":256},"Data Serialization","/en/devtools/data-display","en/06.devtools/4.data-display","i-lucide-eye",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":44},"Third Party","i-lucide-puzzle","/en/third-party","en/07.third-party",[263,268,272,277,282,286],{"title":264,"path":265,"stem":266,"icon":267},"With Provider","/en/third-party/with-provider","en/07.third-party/1.with-provider","i-lucide-plug",{"title":269,"path":270,"stem":271,"icon":111},"With BLoC","/en/third-party/with-bloc","en/07.third-party/2.with-bloc",{"title":273,"path":274,"stem":275,"icon":276},"With Riverpod","/en/third-party/with-riverpod","en/07.third-party/3.with-riverpod","i-lucide-droplets",{"title":278,"path":279,"stem":280,"icon":281},"With RxDart","/en/third-party/with-rxdart","en/07.third-party/4.with-rxdart","i-lucide-git-branch",{"title":283,"path":284,"stem":285},"With Dio","/en/third-party/with-dio","en/07.third-party/5.with-dio",{"title":287,"path":288,"stem":289,"icon":290},"With GraphQL","/en/third-party/with-graphql","en/07.third-party/6.with-graphql","i-lucide-binary",{"title":292,"icon":190,"path":293,"stem":294,"children":295,"page":44},"Examples","/en/examples","en/08.examples",[296,301,305,310,314,318,322],{"title":297,"path":298,"stem":299,"icon":300},"Case Study: User List & Detail","/en/examples/basic-query","en/08.examples/1.basic-query","i-lucide-play-circle",{"title":302,"path":303,"stem":304,"icon":151},"Case Study: Optimistic Mutations & Rollback","/en/examples/mutations-optimistic","en/08.examples/2.mutations-optimistic",{"title":306,"path":307,"stem":308,"icon":309},"Case Study: Infinite Scroll Feed","/en/examples/infinite-scroll","en/08.examples/3.infinite-scroll","i-lucide-scroll",{"title":311,"path":312,"stem":313,"icon":90},"Case Study: Offline-First Todo App","/en/examples/offline-first","en/08.examples/4.offline-first",{"title":315,"path":316,"stem":317,"icon":161},"Case Study: Network Awareness","/en/examples/network-awareness","en/08.examples/5.network-awareness",{"title":319,"path":320,"stem":321,"icon":126},"Case Study: Hooks Integration","/en/examples/hooks-integration","en/08.examples/6.hooks-integration",{"title":323,"path":324,"stem":325,"icon":326},"Case Study: Complete Todo App","/en/examples/complete-todo-app","en/08.examples/7.complete-todo-app","i-lucide-check-square",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"Help","i-lucide-life-buoy","/en/help","en/09.help",[333,338],{"title":334,"path":335,"stem":336,"icon":337},"FAQ","/en/help/faq","en/09.help/1.faq","i-lucide-circle-help",{"title":339,"path":340,"stem":341,"icon":101},"Troubleshooting","/en/help/troubleshooting","en/09.help/2.troubleshooting",{"id":343,"title":123,"body":344,"description":2922,"extension":2923,"links":2924,"meta":2925,"navigation":2926,"path":124,"seo":2927,"stem":125,"__hash__":2928},"docs_en/en/03.flutter-integration/6.hooks.md",{"type":345,"value":346,"toc":2899},"minimark",[347,364,368,425,429,439,826,831,898,902,922,925,929,932,1179,1183,1226,1230,1235,1400,1402,1406,1412,1454,1460,1462,1466,1475,1609,1613,1628,1630,1634,1646,1857,1861,1873,1875,1879,1886,2256,2260,2334,2338,2344,2449,2451,2455,2465,2865,2867,2895],[348,349,350,351,358,359,363],"p",{},"If your project uses ",[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"," provides a hooks-based API with composable primitives for complex screens.",[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","# You don't need to add `qora`: it's included transitively.\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","# You don't need to add `qora`: it's included transitively.\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],{},"Fetches data and rebuilds the widget when the state changes.\nEquivalent to ",[360,433,108],{}," without a nested ",[360,436,437],{},"builder"," callback.",[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},"usequery-parameters","useQuery parameters",[832,833,834,850],"table",{},[835,836,837],"thead",{},[838,839,840,844,847],"tr",{},[841,842,843],"th",{},"Parameter",[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],{},"Query identifier. Changes trigger 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],{},"Async function returning the data.",[838,884,885,890,895],{},[856,886,887],{},[360,888,889],{},"options",[856,891,892],{},[360,893,894],{},"QoraOptions?",[856,896,897],{},"Per-query caching/retry configuration.",[827,899,901],{"id":900},"usequery-return-value","useQuery return value",[348,903,904,905,908,909,912,913,912,916,912,919,492],{},"Returns a ",[360,906,907],{},"QoraState\u003CT>",": a sealed class with four variants:\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],{},"Triggers a mutation and tracks its state.",[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('Save'),\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},"'Save'",[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},"usemutation-parameters","useMutation parameters",[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],{},"Async function performing the mutation.",[838,1213,1214,1218,1223],{},[856,1215,1216],{},[360,1217,889],{},[856,1219,1220],{},[360,1221,1222],{},"MutationOptions?",[856,1224,1225],{},"Lifecycle callbacks and retry settings.",[827,1227,1229],{"id":1228},"usemutation-return-value","useMutation return value",[348,1231,904,1232,409],{},[360,1233,1234],{},"MutationHandle\u003CTData, TVariables>",[832,1236,1237,1248],{},[835,1238,1239],{},[838,1240,1241,1244,1246],{},[841,1242,1243],{},"Property",[841,1245,846],{},[841,1247,849],{},[851,1249,1250,1264,1283,1301,1319,1335,1351,1367,1384],{},[838,1251,1252,1256,1261],{},[856,1253,1254],{},[360,1255,1105],{},[856,1257,1258],{},[360,1259,1260],{},"void Function(TVariables)",[856,1262,1263],{},"Fire-and-forget; errors go to state.",[838,1265,1266,1271,1276],{},[856,1267,1268],{},[360,1269,1270],{},"mutateAsync",[856,1272,1273],{},[360,1274,1275],{},"Future\u003CTData?> Function(TVariables)",[856,1277,1278,1279,1282],{},"Returns the result or ",[360,1280,1281],{},"null"," on failure.",[838,1284,1285,1290,1295],{},[856,1286,1287],{},[360,1288,1289],{},"reset",[856,1291,1292],{},[360,1293,1294],{},"void Function()",[856,1296,1297,1298,492],{},"Resets state to ",[360,1299,1300],{},"MutationIdle",[838,1302,1303,1308,1313],{},[856,1304,1305],{},[360,1306,1307],{},"isIdle",[856,1309,1310],{},[360,1311,1312],{},"bool",[856,1314,1315,1318],{},[360,1316,1317],{},"true"," when no mutation has run yet.",[838,1320,1321,1326,1330],{},[856,1322,1323],{},[360,1324,1325],{},"isPending",[856,1327,1328],{},[360,1329,1312],{},[856,1331,1332,1334],{},[360,1333,1317],{}," while the mutation is running.",[838,1336,1337,1342,1346],{},[856,1338,1339],{},[360,1340,1341],{},"isSuccess",[856,1343,1344],{},[360,1345,1312],{},[856,1347,1348,1350],{},[360,1349,1317],{}," after successful completion.",[838,1352,1353,1358,1362],{},[856,1354,1355],{},[360,1356,1357],{},"isError",[856,1359,1360],{},[360,1361,1312],{},[856,1363,1364,1366],{},[360,1365,1317],{}," after a failure.",[838,1368,1369,1374,1379],{},[856,1370,1371],{},[360,1372,1373],{},"data",[856,1375,1376],{},[360,1377,1378],{},"TData?",[856,1380,1381,1382,492],{},"Available when ",[360,1383,1341],{},[838,1385,1386,1391,1396],{},[856,1387,1388],{},[360,1389,1390],{},"error",[856,1392,1393],{},[360,1394,1395],{},"Object?",[856,1397,1381,1398,492],{},[360,1399,1357],{},[923,1401],{},[365,1403,1405],{"id":1404},"usequeryclient","useQueryClient",[348,1407,1408,1409,1411],{},"Returns the nearest ",[360,1410,202],{}," from the widget tree.",[372,1413,1415],{"className":441,"code":1414,"language":443,"meta":378,"style":378},"final client = useQueryClient();\nclient.invalidate(['posts']);\n",[360,1416,1417,1433],{"__ignoreMap":378},[382,1418,1419,1421,1424,1426,1429,1431],{"class":384,"line":385},[382,1420,715],{"class":469},[382,1422,1423],{"class":463}," client ",[382,1425,554],{"class":399},[382,1427,1428],{"class":532}," useQueryClient",[382,1430,700],{"class":463},[382,1432,479],{"class":399},[382,1434,1435,1438,1440,1443,1446,1449,1452],{"class":384,"line":392},[382,1436,1437],{"class":463},"client",[382,1439,492],{"class":399},[382,1441,1442],{"class":532},"invalidate",[382,1444,1445],{"class":463},"([",[382,1447,1448],{"class":412},"'posts'",[382,1450,1451],{"class":463},"])",[382,1453,479],{"class":399},[348,1455,1456,1457,1459],{},"The widget must be wrapped in a ",[360,1458,103],{}," for this to work.",[923,1461],{},[365,1463,1465],{"id":1464},"useisfetching","useIsFetching",[348,1467,1468,1469,1471,1472,1474],{},"Returns ",[360,1470,1317],{}," while at least one query managed by the nearest ",[360,1473,202],{},"\nhas a network request in flight. Useful for a global loading indicator at the\ntop of the screen without coupling it to any individual query.",[372,1476,1478],{"className":441,"code":1477,"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,1479,1480,1493,1497,1509,1525,1534,1557,1580,1595,1601,1605],{"__ignoreMap":378},[382,1481,1482,1484,1487,1489,1491],{"class":384,"line":385},[382,1483,450],{"class":399},[382,1485,1486],{"class":453}," AppLoadingBar",[382,1488,457],{"class":399},[382,1490,460],{"class":453},[382,1492,464],{"class":463},[382,1494,1495],{"class":384,"line":392},[382,1496,523],{"class":469},[382,1498,1499,1501,1503,1505,1507],{"class":384,"line":403},[382,1500,529],{"class":453},[382,1502,533],{"class":532},[382,1504,536],{"class":463},[382,1506,539],{"class":453},[382,1508,542],{"class":463},[382,1510,1511,1513,1516,1518,1521,1523],{"class":384,"line":416},[382,1512,548],{"class":469},[382,1514,1515],{"class":463}," isFetching ",[382,1517,554],{"class":399},[382,1519,1520],{"class":532}," useIsFetching",[382,1522,700],{"class":463},[382,1524,479],{"class":399},[382,1526,1527,1529,1532],{"class":384,"line":520},[382,1528,670],{"class":669},[382,1530,1531],{"class":453}," AnimatedOpacity",[382,1533,1024],{"class":463},[382,1535,1536,1539,1541,1543,1546,1549,1552,1555],{"class":384,"line":526},[382,1537,1538],{"class":463},"      opacity",[382,1540,409],{"class":399},[382,1542,1515],{"class":463},[382,1544,1545],{"class":399},"?",[382,1547,1548],{"class":644}," 1.0",[382,1550,1551],{"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},"useisfetching-return-value","useIsFetching return value",[348,1614,1615,1617,1618,1620,1621,912,1624,1627],{},[360,1616,1312],{},": ",[360,1619,1317],{}," when ",[360,1622,1623],{},"isFetchingCount > 0",[360,1625,1626],{},"false"," otherwise.\nRebuilds the widget only when the value crosses the zero boundary.",[923,1629],{},[365,1631,1633],{"id":1632},"useismutating","useIsMutating",[348,1635,1468,1636,1638,1639,1641,1642,1645],{},[360,1637,1317],{}," while at least one mutation managed by the nearest ",[360,1640,202],{},"\nis in ",[360,1643,1644],{},"MutationPending"," state. Handy for disabling a global submit button while\nany write operation is in progress.",[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('Save'),\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,1545],{"class":399},[382,1757,1758],{"class":399}," null",[382,1760,1551],{"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},"useismutating-return-value","useIsMutating return value",[348,1862,1863,1617,1865,1620,1867,912,1870,1872],{},[360,1864,1312],{},[360,1866,1317],{},[360,1868,1869],{},"activeMutations.length > 0",[360,1871,1626],{}," otherwise.",[923,1874],{},[365,1876,1878],{"id":1877},"useinfinitequery","useInfiniteQuery",[348,1880,1881,1882,1885],{},"Manages paginated data: accumulates pages and exposes a\n",[360,1883,1884],{},"fetchNextPage"," function.",[372,1887,1889],{"className":441,"code":1888,"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,1890,1891,1904,1908,1920,1945,1962,1990,2012,2022,2028,2032,2076,2080,2093,2133,2148,2166,2193,2215,2220,2233,2240,2246,2251],{"__ignoreMap":378},[382,1892,1893,1895,1898,1900,1902],{"class":384,"line":385},[382,1894,450],{"class":399},[382,1896,1897],{"class":453}," PostsScreen",[382,1899,457],{"class":399},[382,1901,460],{"class":453},[382,1903,464],{"class":463},[382,1905,1906],{"class":384,"line":392},[382,1907,523],{"class":469},[382,1909,1910,1912,1914,1916,1918],{"class":384,"line":403},[382,1911,529],{"class":453},[382,1913,533],{"class":532},[382,1915,536],{"class":463},[382,1917,539],{"class":453},[382,1919,542],{"class":463},[382,1921,1922,1924,1927,1929,1932,1934,1937,1939,1942],{"class":384,"line":416},[382,1923,548],{"class":469},[382,1925,1926],{"class":463}," query ",[382,1928,554],{"class":399},[382,1930,1931],{"class":532}," useInfiniteQuery",[382,1933,560],{"class":463},[382,1935,1936],{"class":453},"PostsPage",[382,1938,912],{"class":463},[382,1940,1941],{"class":453},"String",[382,1943,1944],{"class":463},"?>(\n",[382,1946,1947,1949,1951,1953,1955,1957,1960],{"class":384,"line":520},[382,1948,572],{"class":463},[382,1950,409],{"class":399},[382,1952,625],{"class":469},[382,1954,577],{"class":463},[382,1956,1448],{"class":412},[382,1958,1959],{"class":463},"]",[382,1961,358],{"class":399},[382,1963,1964,1966,1968,1971,1973,1975,1977,1980,1983,1985,1988],{"class":384,"line":526},[382,1965,593],{"class":463},[382,1967,409],{"class":399},[382,1969,1970],{"class":463}," (cursor) ",[382,1972,601],{"class":399},[382,1974,604],{"class":453},[382,1976,492],{"class":399},[382,1978,1979],{"class":532},"getPosts",[382,1981,1982],{"class":463},"(cursor",[382,1984,409],{"class":399},[382,1986,1987],{"class":463}," cursor)",[382,1989,358],{"class":399},[382,1991,1992,1995,1997,2000,2002,2005,2007,2010],{"class":384,"line":545},[382,1993,1994],{"class":463},"      getNextPageParam",[382,1996,409],{"class":399},[382,1998,1999],{"class":463}," (page) ",[382,2001,601],{"class":399},[382,2003,2004],{"class":463}," page",[382,2006,492],{"class":399},[382,2008,2009],{"class":463},"nextCursor",[382,2011,358],{"class":399},[382,2013,2014,2017,2019],{"class":384,"line":569},[382,2015,2016],{"class":463},"      initialPageParam",[382,2018,409],{"class":399},[382,2020,2021],{"class":399}," null,\n",[382,2023,2024,2026],{"class":384,"line":590},[382,2025,656],{"class":463},[382,2027,479],{"class":399},[382,2029,2030],{"class":384,"line":617},[382,2031,517],{"emptyLinePlaceholder":516},[382,2033,2034,2036,2039,2041,2044,2046,2049,2051,2054,2057,2059,2062,2064,2067,2069,2072,2074],{"class":384,"line":653},[382,2035,548],{"class":469},[382,2037,2038],{"class":463}," posts ",[382,2040,554],{"class":399},[382,2042,2043],{"class":463}," query",[382,2045,492],{"class":399},[382,2047,2048],{"class":463},"pages",[382,2050,492],{"class":399},[382,2052,2053],{"class":532},"expand",[382,2055,2056],{"class":463},"((p) ",[382,2058,601],{"class":399},[382,2060,2061],{"class":463}," p",[382,2063,492],{"class":399},[382,2065,2066],{"class":463},"posts)",[382,2068,492],{"class":399},[382,2070,2071],{"class":532},"toList",[382,2073,700],{"class":463},[382,2075,479],{"class":399},[382,2077,2078],{"class":384,"line":661},[382,2079,517],{"emptyLinePlaceholder":516},[382,2081,2082,2084,2087,2089,2091],{"class":384,"line":666},[382,2083,670],{"class":669},[382,2085,2086],{"class":453}," ListView",[382,2088,492],{"class":399},[382,2090,437],{"class":532},[382,2092,1024],{"class":463},[382,2094,2095,2098,2100,2103,2105,2108,2111,2114,2116,2119,2121,2124,2126,2129,2131],{"class":384,"line":679},[382,2096,2097],{"class":463},"      itemCount",[382,2099,409],{"class":399},[382,2101,2102],{"class":463}," posts",[382,2104,492],{"class":399},[382,2106,2107],{"class":463},"length ",[382,2109,2110],{"class":399},"+",[382,2112,2113],{"class":463}," (query",[382,2115,492],{"class":399},[382,2117,2118],{"class":463},"hasNextPage ",[382,2120,1545],{"class":399},[382,2122,2123],{"class":644}," 1",[382,2125,1551],{"class":399},[382,2127,2128],{"class":644}," 0",[382,2130,1162],{"class":463},[382,2132,358],{"class":399},[382,2134,2135,2138,2140,2143,2145],{"class":384,"line":705},[382,2136,2137],{"class":463},"      itemBuilder",[382,2139,409],{"class":399},[382,2141,2142],{"class":463}," (context",[382,2144,498],{"class":399},[382,2146,2147],{"class":463}," i) {\n",[382,2149,2150,2153,2156,2159,2161,2163],{"class":384,"line":732},[382,2151,2152],{"class":669},"        if",[382,2154,2155],{"class":463}," (i ",[382,2157,2158],{"class":399},"==",[382,2160,2102],{"class":463},[382,2162,492],{"class":399},[382,2164,2165],{"class":463},"length) {\n",[382,2167,2168,2171,2174,2177,2180,2182,2185,2187,2189,2191],{"class":384,"line":744},[382,2169,2170],{"class":669},"          if",[382,2172,2173],{"class":463}," (",[382,2175,2176],{"class":399},"!",[382,2178,2179],{"class":463},"query",[382,2181,492],{"class":399},[382,2183,2184],{"class":463},"isFetchingNextPage) query",[382,2186,492],{"class":399},[382,2188,1884],{"class":532},[382,2190,700],{"class":463},[382,2192,479],{"class":399},[382,2194,2195,2198,2200,2203,2206,2208,2210,2213],{"class":384,"line":759},[382,2196,2197],{"class":669},"          return",[382,2199,625],{"class":469},[382,2201,2202],{"class":453}," Center",[382,2204,2205],{"class":463},"(child",[382,2207,409],{"class":399},[382,2209,752],{"class":453},[382,2211,2212],{"class":463},"())",[382,2214,479],{"class":399},[382,2216,2217],{"class":384,"line":783},[382,2218,2219],{"class":463},"        }\n",[382,2221,2222,2225,2228,2231],{"class":384,"line":808},[382,2223,2224],{"class":669},"        return",[382,2226,2227],{"class":453}," PostTile",[382,2229,2230],{"class":463},"(posts[i])",[382,2232,479],{"class":399},[382,2234,2235,2238],{"class":384,"line":816},[382,2236,2237],{"class":463},"      }",[382,2239,358],{"class":399},[382,2241,2242,2244],{"class":384,"line":822},[382,2243,656],{"class":463},[382,2245,479],{"class":399},[382,2247,2249],{"class":384,"line":2248},23,[382,2250,819],{"class":463},[382,2252,2254],{"class":384,"line":2253},24,[382,2255,825],{"class":463},[827,2257,2259],{"id":2258},"useinfinitequery-parameters","useInfiniteQuery parameters",[832,2261,2262,2272],{},[835,2263,2264],{},[838,2265,2266,2268,2270],{},[841,2267,843],{},[841,2269,846],{},[841,2271,849],{},[851,2273,2274,2286,2300,2317],{},[838,2275,2276,2280,2284],{},[856,2277,2278],{},[360,2279,495],{},[856,2281,2282],{},[360,2283,864],{},[856,2285,867],{},[838,2287,2288,2292,2297],{},[856,2289,2290],{},[360,2291,874],{},[856,2293,2294],{},[360,2295,2296],{},"Future\u003CTData> Function(TPageParam)",[856,2298,2299],{},"Called with page param for each page.",[838,2301,2302,2307,2312],{},[856,2303,2304],{},[360,2305,2306],{},"getNextPageParam",[856,2308,2309],{},[360,2310,2311],{},"TPageParam? Function(TData)",[856,2313,1468,2314,2316],{},[360,2315,1281],{}," to signal last page.",[838,2318,2319,2324,2329],{},[856,2320,2321],{},[360,2322,2323],{},"initialPageParam",[856,2325,2326],{},[360,2327,2328],{},"TPageParam",[856,2330,2331,2332,492],{},"First page param passed to ",[360,2333,874],{},[827,2335,2337],{"id":2336},"useinfinitequery-return-value","useInfiniteQuery return value",[348,2339,2340,2341,409],{},"Returns an ",[360,2342,2343],{},"InfiniteQueryHandle\u003CTData, TPageParam>",[832,2345,2346,2356],{},[835,2347,2348],{},[838,2349,2350,2352,2354],{},[841,2351,1243],{},[841,2353,846],{},[841,2355,849],{},[851,2357,2358,2372,2388,2404,2420,2434],{},[838,2359,2360,2364,2369],{},[856,2361,2362],{},[360,2363,2048],{},[856,2365,2366],{},[360,2367,2368],{},"List\u003CTData>",[856,2370,2371],{},"All fetched pages in order.",[838,2373,2374,2379,2383],{},[856,2375,2376],{},[360,2377,2378],{},"isLoading",[856,2380,2381],{},[360,2382,1312],{},[856,2384,2385,2387],{},[360,2386,1317],{}," while the first page is loading.",[838,2389,2390,2395,2399],{},[856,2391,2392],{},[360,2393,2394],{},"isFetchingNextPage",[856,2396,2397],{},[360,2398,1312],{},[856,2400,2401,2403],{},[360,2402,1317],{}," while a next page is loading.",[838,2405,2406,2411,2415],{},[856,2407,2408],{},[360,2409,2410],{},"hasNextPage",[856,2412,2413],{},[360,2414,1312],{},[856,2416,2417,2419],{},[360,2418,1626],{}," when no more pages are available.",[838,2421,2422,2426,2431],{},[856,2423,2424],{},[360,2425,1884],{},[856,2427,2428],{},[360,2429,2430],{},"Future\u003Cvoid> Function()",[856,2432,2433],{},"Loads next page. No-op if busy.",[838,2435,2436,2440,2444],{},[856,2437,2438],{},[360,2439,1390],{},[856,2441,2442],{},[360,2443,1395],{},[856,2445,2446,2447,492],{},"Last error, or ",[360,2448,1281],{},[923,2450],{},[365,2452,2454],{"id":2453},"combining-hooks","Combining hooks",[348,2456,2457,2458,2461,2462,492],{},"Hooks compose naturally. The following example fetches a user, updates their profile, and displays an inline error in a single widget without ",[360,2459,2460],{},"setState"," or ",[360,2463,2464],{},"StreamBuilder",[372,2466,2468],{"className":441,"code":2467,"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,2469,2470,2483,2493,2517,2521,2525,2537,2551,2568,2584,2604,2610,2631,2645,2655,2672,2678,2684,2688,2697,2714,2735,2755,2767,2783,2799,2821,2828,2848,2855,2860],{"__ignoreMap":378},[382,2471,2472,2474,2477,2479,2481],{"class":384,"line":385},[382,2473,450],{"class":399},[382,2475,2476],{"class":453}," ProfileScreen",[382,2478,457],{"class":399},[382,2480,460],{"class":453},[382,2482,464],{"class":463},[382,2484,2485,2487,2489,2491],{"class":384,"line":392},[382,2486,470],{"class":469},[382,2488,473],{"class":453},[382,2490,476],{"class":463},[382,2492,479],{"class":399},[382,2494,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515],{"class":384,"line":403},[382,2496,484],{"class":469},[382,2498,2476],{"class":453},[382,2500,489],{"class":463},[382,2502,492],{"class":399},[382,2504,495],{"class":463},[382,2506,498],{"class":399},[382,2508,501],{"class":469},[382,2510,504],{"class":463},[382,2512,492],{"class":399},[382,2514,509],{"class":463},[382,2516,479],{"class":399},[382,2518,2519],{"class":384,"line":416},[382,2520,517],{"emptyLinePlaceholder":516},[382,2522,2523],{"class":384,"line":520},[382,2524,523],{"class":469},[382,2526,2527,2529,2531,2533,2535],{"class":384,"line":526},[382,2528,529],{"class":453},[382,2530,533],{"class":532},[382,2532,536],{"class":463},[382,2534,539],{"class":453},[382,2536,542],{"class":463},[382,2538,2539,2541,2543,2545,2547,2549],{"class":384,"line":545},[382,2540,548],{"class":469},[382,2542,1423],{"class":463},[382,2544,554],{"class":399},[382,2546,1428],{"class":532},[382,2548,700],{"class":463},[382,2550,479],{"class":399},[382,2552,2553,2555,2558,2560,2562,2564,2566],{"class":384,"line":569},[382,2554,548],{"class":469},[382,2556,2557],{"class":463}," userQuery ",[382,2559,554],{"class":399},[382,2561,557],{"class":532},[382,2563,560],{"class":463},[382,2565,563],{"class":453},[382,2567,566],{"class":463},[382,2569,2570,2572,2574,2576,2578,2580,2582],{"class":384,"line":590},[382,2571,572],{"class":463},[382,2573,409],{"class":399},[382,2575,577],{"class":463},[382,2577,580],{"class":412},[382,2579,498],{"class":399},[382,2581,585],{"class":463},[382,2583,358],{"class":399},[382,2585,2586,2588,2590,2592,2594,2596,2598,2600,2602],{"class":384,"line":617},[382,2587,593],{"class":463},[382,2589,409],{"class":399},[382,2591,598],{"class":463},[382,2593,601],{"class":399},[382,2595,604],{"class":453},[382,2597,492],{"class":399},[382,2599,609],{"class":532},[382,2601,612],{"class":463},[382,2603,358],{"class":399},[382,2605,2606,2608],{"class":384,"line":653},[382,2607,656],{"class":463},[382,2609,479],{"class":399},[382,2611,2612,2614,2617,2619,2621,2623,2625,2627,2629],{"class":384,"line":661},[382,2613,548],{"class":469},[382,2615,2616],{"class":463}," updateMutation ",[382,2618,554],{"class":399},[382,2620,977],{"class":532},[382,2622,560],{"class":463},[382,2624,563],{"class":453},[382,2626,912],{"class":463},[382,2628,986],{"class":453},[382,2630,566],{"class":463},[382,2632,2633,2635,2637,2639,2641,2643],{"class":384,"line":666},[382,2634,993],{"class":463},[382,2636,409],{"class":399},[382,2638,604],{"class":453},[382,2640,492],{"class":399},[382,2642,1007],{"class":463},[382,2644,358],{"class":399},[382,2646,2647,2649,2651,2653],{"class":384,"line":679},[382,2648,620],{"class":463},[382,2650,409],{"class":399},[382,2652,1021],{"class":453},[382,2654,1024],{"class":463},[382,2656,2657,2659,2661,2663,2665,2667,2670],{"class":384,"line":705},[382,2658,1029],{"class":463},[382,2660,409],{"class":399},[382,2662,1034],{"class":463},[382,2664,580],{"class":412},[382,2666,498],{"class":399},[382,2668,2669],{"class":463}," userId]]",[382,2671,358],{"class":399},[382,2673,2674,2676],{"class":384,"line":732},[382,2675,1048],{"class":463},[382,2677,358],{"class":399},[382,2679,2680,2682],{"class":384,"line":744},[382,2681,656],{"class":463},[382,2683,479],{"class":399},[382,2685,2686],{"class":384,"line":759},[382,2687,517],{"emptyLinePlaceholder":516},[382,2689,2690,2692,2694],{"class":384,"line":783},[382,2691,670],{"class":669},[382,2693,673],{"class":669},[382,2695,2696],{"class":463}," (userQuery) {\n",[382,2698,2699,2701,2704,2706,2708,2710,2712],{"class":384,"line":808},[382,2700,708],{"class":453},[382,2702,2703],{"class":463},"()             ",[382,2705,601],{"class":399},[382,2707,625],{"class":469},[382,2709,752],{"class":453},[382,2711,700],{"class":463},[382,2713,358],{"class":399},[382,2715,2716,2718,2720,2722,2724,2727,2729,2731,2733],{"class":384,"line":816},[382,2717,786],{"class":453},[382,2719,536],{"class":463},[382,2721,409],{"class":399},[382,2723,715],{"class":469},[382,2725,2726],{"class":463}," error) ",[382,2728,601],{"class":399},[382,2730,800],{"class":453},[382,2732,803],{"class":463},[382,2734,358],{"class":399},[382,2736,2737,2739,2741,2743,2745,2748,2750,2753],{"class":384,"line":822},[382,2738,762],{"class":453},[382,2740,536],{"class":463},[382,2742,409],{"class":399},[382,2744,715],{"class":469},[382,2746,2747],{"class":463}," data)  ",[382,2749,601],{"class":399},[382,2751,2752],{"class":453}," ProfileForm",[382,2754,1024],{"class":463},[382,2756,2757,2760,2762,2765],{"class":384,"line":2248},[382,2758,2759],{"class":463},"        user",[382,2761,409],{"class":399},[382,2763,2764],{"class":463}," data",[382,2766,358],{"class":399},[382,2768,2769,2772,2774,2777,2779,2781],{"class":384,"line":2253},[382,2770,2771],{"class":463},"        isSaving",[382,2773,409],{"class":399},[382,2775,2776],{"class":463}," updateMutation",[382,2778,492],{"class":399},[382,2780,1325],{"class":463},[382,2782,358],{"class":399},[382,2784,2786,2789,2791,2793,2795,2797],{"class":384,"line":2785},25,[382,2787,2788],{"class":463},"        saveError",[382,2790,409],{"class":399},[382,2792,2776],{"class":463},[382,2794,492],{"class":399},[382,2796,1390],{"class":463},[382,2798,358],{"class":399},[382,2800,2802,2805,2807,2809,2811,2813,2815,2817,2819],{"class":384,"line":2801},26,[382,2803,2804],{"class":463},"        onSave",[382,2806,409],{"class":399},[382,2808,998],{"class":463},[382,2810,601],{"class":399},[382,2812,2776],{"class":463},[382,2814,492],{"class":399},[382,2816,1105],{"class":532},[382,2818,1010],{"class":463},[382,2820,358],{"class":399},[382,2822,2824,2826],{"class":384,"line":2823},27,[382,2825,1048],{"class":463},[382,2827,358],{"class":399},[382,2829,2831,2834,2836,2838,2840,2842,2844,2846],{"class":384,"line":2830},28,[382,2832,2833],{"class":463},"      _ ",[382,2835,601],{"class":399},[382,2837,625],{"class":469},[382,2839,692],{"class":453},[382,2841,492],{"class":399},[382,2843,697],{"class":532},[382,2845,700],{"class":463},[382,2847,358],{"class":399},[382,2849,2851,2853],{"class":384,"line":2850},29,[382,2852,811],{"class":463},[382,2854,479],{"class":399},[382,2856,2858],{"class":384,"line":2857},30,[382,2859,819],{"class":463},[382,2861,2863],{"class":384,"line":2862},31,[382,2864,825],{"class":463},[923,2866],{},[2868,2869,2871,2873,2874,2877,2878,2881,2882,2885,2886,2889,2890,2885,2892,2894],"callout",{"type":2870},"info",[360,2872,362],{}," requires your widget to extend ",[360,2875,2876],{},"HookWidget"," (or use\n",[360,2879,2880],{},"HookConsumerWidget"," if you are combining with Riverpod). Standard\n",[360,2883,2884],{},"StatelessWidget"," and ",[360,2887,2888],{},"StatefulWidget"," are not supported: use\n",[360,2891,108],{},[360,2893,113],{}," instead.",[2896,2897,2898],"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":2900},[2901,2902,2906,2910,2911,2914,2917,2921],{"id":367,"depth":392,"text":16},{"id":427,"depth":392,"text":428,"children":2903},[2904,2905],{"id":829,"depth":403,"text":830},{"id":900,"depth":403,"text":901},{"id":927,"depth":392,"text":928,"children":2907},[2908,2909],{"id":1181,"depth":403,"text":1182},{"id":1228,"depth":403,"text":1229},{"id":1404,"depth":392,"text":1405},{"id":1464,"depth":392,"text":1465,"children":2912},[2913],{"id":1611,"depth":403,"text":1612},{"id":1632,"depth":392,"text":1633,"children":2915},[2916],{"id":1859,"depth":403,"text":1860},{"id":1877,"depth":392,"text":1878,"children":2918},[2919,2920],{"id":2258,"depth":403,"text":2259},{"id":2336,"depth":403,"text":2337},{"id":2453,"depth":392,"text":2454},"Use useQuery, useMutation, useInfiniteQuery, useIsFetching and useIsMutating with flutter_hooks for a concise, composable API.\n","md",null,{},{"icon":126},{"title":123,"description":2922},"qvFXd3W40MA8E8aiN2KmdWHXvmTggB3KNe8J6uwAUa0",[2930,2932],{"title":118,"path":119,"stem":120,"description":2931,"icon":121,"children":-1},"The widget that manages paginated queries and exposes fetchNextPage, fetchPreviousPage, and refetch through a stable controller interface.",{"title":128,"path":129,"stem":130,"description":2933,"icon":131,"children":-1},"NetworkStatusBuilder and NetworkStatusIndicator: reactive widgets for displaying offline state in Flutter apps.",1794040399073]