[{"data":1,"prerenderedAt":1860},["ShallowReactive",2],{"navigation_docs_en":3,"-en-flutter-integration-network-status":342,"-en-flutter-integration-network-status-surround":1855},[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":128,"body":344,"description":1846,"extension":1847,"links":1848,"meta":1849,"navigation":1850,"path":129,"seo":1851,"stem":130,"__hash__":1854},"docs_en/en/03.flutter-integration/7.network-status.md",{"type":345,"value":346,"toc":1827},"minimark",[347,370,373,378,391,475,477,482,489,494,566,573,577,583,856,865,869,884,1133,1137,1221,1223,1228,1240,1244,1329,1333,1339,1466,1475,1479,1537,1540,1594,1596,1602,1647,1664,1666,1670,1679,1785,1787,1791,1823],[348,349,350,354,355,358,359,362,363,365,366,369],"p",{},[351,352,353],"code",{},"NetworkStatusBuilder"," and ",[351,356,357],{},"NetworkStatusIndicator"," are two Flutter widgets that subscribe to the ",[351,360,361],{},"ConnectivityManager"," exposed by the nearest ",[351,364,103],{}," and rebuild whenever the ",[351,367,368],{},"NetworkStatus"," changes.",[371,372],"hr",{},[374,375,377],"h2",{"id":376},"requirements","Requirements",[348,379,380,381,383,384,386,387,390],{},"A ",[351,382,103],{}," with a ",[351,385,361],{}," must be an ancestor. Without one, both widgets emit ",[351,388,389],{},"NetworkStatus.unknown"," and never update.",[392,393,399],"pre",{"className":394,"code":395,"filename":396,"language":397,"meta":398,"style":398},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","QoraScope(\n  client: client,\n  connectivityManager: FlutterConnectivityManager(), // required\n  child: const MyApp(),\n)\n","lib/main.dart","dart","",[351,400,401,413,429,450,469],{"__ignoreMap":398},[402,403,406,409],"span",{"class":404,"line":405},"line",1,[402,407,103],{"class":408},"sBMFI",[402,410,412],{"class":411},"sTEyZ","(\n",[402,414,416,419,423,426],{"class":404,"line":415},2,[402,417,418],{"class":411},"  client",[402,420,422],{"class":421},"sMK4o",":",[402,424,425],{"class":411}," client",[402,427,428],{"class":421},",\n",[402,430,432,435,437,440,443,446],{"class":404,"line":431},3,[402,433,434],{"class":411},"  connectivityManager",[402,436,422],{"class":421},[402,438,439],{"class":408}," FlutterConnectivityManager",[402,441,442],{"class":411},"()",[402,444,445],{"class":421},",",[402,447,449],{"class":448},"sHwdD"," // required\n",[402,451,453,456,458,462,465,467],{"class":404,"line":452},4,[402,454,455],{"class":411},"  child",[402,457,422],{"class":421},[402,459,461],{"class":460},"spNyl"," const",[402,463,464],{"class":408}," MyApp",[402,466,442],{"class":411},[402,468,428],{"class":421},[402,470,472],{"class":404,"line":471},5,[402,473,474],{"class":411},")\n",[371,476],{},[374,478,480],{"id":479},"networkstatusindicator",[351,481,357],{},[348,483,484,485,488],{},"The high-level widget. Wraps your app (or a sub-tree) and overlays an offline banner when ",[351,486,487],{},"NetworkStatus.offline"," is detected.",[490,491,493],"h3",{"id":492},"default-banner","Default banner",[392,495,497],{"className":394,"code":496,"filename":396,"language":397,"meta":398,"style":398},"QoraScope(\n  client: client,\n  connectivityManager: FlutterConnectivityManager(),\n  child: NetworkStatusIndicator(\n    child: const MyApp(),\n  ),\n)\n",[351,498,499,505,515,527,538,553,561],{"__ignoreMap":398},[402,500,501,503],{"class":404,"line":405},[402,502,103],{"class":408},[402,504,412],{"class":411},[402,506,507,509,511,513],{"class":404,"line":415},[402,508,418],{"class":411},[402,510,422],{"class":421},[402,512,425],{"class":411},[402,514,428],{"class":421},[402,516,517,519,521,523,525],{"class":404,"line":431},[402,518,434],{"class":411},[402,520,422],{"class":421},[402,522,439],{"class":408},[402,524,442],{"class":411},[402,526,428],{"class":421},[402,528,529,531,533,536],{"class":404,"line":452},[402,530,455],{"class":411},[402,532,422],{"class":421},[402,534,535],{"class":408}," NetworkStatusIndicator",[402,537,412],{"class":411},[402,539,540,543,545,547,549,551],{"class":404,"line":471},[402,541,542],{"class":411},"    child",[402,544,422],{"class":421},[402,546,461],{"class":460},[402,548,464],{"class":408},[402,550,442],{"class":411},[402,552,428],{"class":421},[402,554,556,559],{"class":404,"line":555},6,[402,557,558],{"class":411},"  )",[402,560,428],{"class":421},[402,562,564],{"class":404,"line":563},7,[402,565,474],{"class":411},[348,567,568,569,572],{},"Renders a thin semi-transparent dark bar at the bottom of the screen with a wifi-off icon and \"Offline mode\" text. No Material dependency: uses only ",[351,570,571],{},"flutter/widgets.dart",".",[490,574,576],{"id":575},"custom-offline-banner","Custom offline banner",[348,578,579,580,422],{},"Override the offline UI with ",[351,581,582],{},"offlineBanner",[392,584,586],{"className":394,"code":585,"filename":396,"language":397,"meta":398,"style":398},"NetworkStatusIndicator(\n  offlineBanner: (context) => Container(\n    color: Colors.orange.shade800,\n    padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),\n    child: const Row(\n      mainAxisAlignment: MainAxisAlignment.center,\n      children: [\n        Icon(Icons.wifi_off, color: Colors.white, size: 16),\n        SizedBox(width: 8),\n        Text('No connection', style: TextStyle(color: Colors.white)),\n      ],\n    ),\n  ),\n  child: const MyApp(),\n)\n",[351,587,588,594,612,634,676,689,706,716,760,777,813,821,829,836,851],{"__ignoreMap":398},[402,589,590,592],{"class":404,"line":405},[402,591,357],{"class":408},[402,593,412],{"class":411},[402,595,596,599,601,604,607,610],{"class":404,"line":415},[402,597,598],{"class":411},"  offlineBanner",[402,600,422],{"class":421},[402,602,603],{"class":411}," (context) ",[402,605,606],{"class":421},"=>",[402,608,609],{"class":408}," Container",[402,611,412],{"class":411},[402,613,614,617,619,622,624,627,629,632],{"class":404,"line":431},[402,615,616],{"class":411},"    color",[402,618,422],{"class":421},[402,620,621],{"class":408}," Colors",[402,623,572],{"class":421},[402,625,626],{"class":411},"orange",[402,628,572],{"class":421},[402,630,631],{"class":411},"shade800",[402,633,428],{"class":421},[402,635,636,639,641,643,646,648,652,655,657,661,663,666,668,671,674],{"class":404,"line":452},[402,637,638],{"class":411},"    padding",[402,640,422],{"class":421},[402,642,461],{"class":460},[402,644,645],{"class":408}," EdgeInsets",[402,647,572],{"class":421},[402,649,651],{"class":650},"s2Zo4","symmetric",[402,653,654],{"class":411},"(vertical",[402,656,422],{"class":421},[402,658,660],{"class":659},"sbssI"," 8",[402,662,445],{"class":421},[402,664,665],{"class":411}," horizontal",[402,667,422],{"class":421},[402,669,670],{"class":659}," 16",[402,672,673],{"class":411},")",[402,675,428],{"class":421},[402,677,678,680,682,684,687],{"class":404,"line":471},[402,679,542],{"class":411},[402,681,422],{"class":421},[402,683,461],{"class":460},[402,685,686],{"class":408}," Row",[402,688,412],{"class":411},[402,690,691,694,696,699,701,704],{"class":404,"line":555},[402,692,693],{"class":411},"      mainAxisAlignment",[402,695,422],{"class":421},[402,697,698],{"class":408}," MainAxisAlignment",[402,700,572],{"class":421},[402,702,703],{"class":411},"center",[402,705,428],{"class":421},[402,707,708,711,713],{"class":404,"line":563},[402,709,710],{"class":411},"      children",[402,712,422],{"class":421},[402,714,715],{"class":411}," [\n",[402,717,719,722,725,728,730,733,735,738,740,742,744,747,749,752,754,756,758],{"class":404,"line":718},8,[402,720,721],{"class":408},"        Icon",[402,723,724],{"class":411},"(",[402,726,727],{"class":408},"Icons",[402,729,572],{"class":421},[402,731,732],{"class":411},"wifi_off",[402,734,445],{"class":421},[402,736,737],{"class":411}," color",[402,739,422],{"class":421},[402,741,621],{"class":408},[402,743,572],{"class":421},[402,745,746],{"class":411},"white",[402,748,445],{"class":421},[402,750,751],{"class":411}," size",[402,753,422],{"class":421},[402,755,670],{"class":659},[402,757,673],{"class":411},[402,759,428],{"class":421},[402,761,763,766,769,771,773,775],{"class":404,"line":762},9,[402,764,765],{"class":408},"        SizedBox",[402,767,768],{"class":411},"(width",[402,770,422],{"class":421},[402,772,660],{"class":659},[402,774,673],{"class":411},[402,776,428],{"class":421},[402,778,780,783,785,789,791,794,796,799,802,804,806,808,811],{"class":404,"line":779},10,[402,781,782],{"class":408},"        Text",[402,784,724],{"class":411},[402,786,788],{"class":787},"sfazB","'No connection'",[402,790,445],{"class":421},[402,792,793],{"class":411}," style",[402,795,422],{"class":421},[402,797,798],{"class":408}," TextStyle",[402,800,801],{"class":411},"(color",[402,803,422],{"class":421},[402,805,621],{"class":408},[402,807,572],{"class":421},[402,809,810],{"class":411},"white))",[402,812,428],{"class":421},[402,814,816,819],{"class":404,"line":815},11,[402,817,818],{"class":411},"      ]",[402,820,428],{"class":421},[402,822,824,827],{"class":404,"line":823},12,[402,825,826],{"class":411},"    )",[402,828,428],{"class":421},[402,830,832,834],{"class":404,"line":831},13,[402,833,558],{"class":411},[402,835,428],{"class":421},[402,837,839,841,843,845,847,849],{"class":404,"line":838},14,[402,840,455],{"class":411},[402,842,422],{"class":421},[402,844,461],{"class":460},[402,846,464],{"class":408},[402,848,442],{"class":411},[402,850,428],{"class":421},[402,852,854],{"class":404,"line":853},15,[402,855,474],{"class":411},[348,857,858,860,861,864],{},[351,859,582],{}," is ignored when a custom ",[351,862,863],{},"builder"," is provided.",[490,866,868],{"id":867},"full-builder-control","Full builder control",[348,870,871,872,874,875,877,878,354,881,422],{},"Use ",[351,873,863],{}," when you need to react to every ",[351,876,368],{}," value: including ",[351,879,880],{},"online",[351,882,883],{},"unknown",[392,885,887],{"className":394,"code":886,"filename":396,"language":397,"meta":398,"style":398},"NetworkStatusIndicator(\n  builder: (context, status, child) {\n    return Stack(\n      children: [\n        child!,\n        if (status == NetworkStatus.offline)\n          const Positioned(\n            bottom: 0, left: 0, right: 0,\n            child: MyOfflineBanner(),\n          ),\n        if (status == NetworkStatus.unknown)\n          const Positioned(\n            bottom: 0, left: 0, right: 0,\n            child: MyCheckingBanner(),\n          ),\n      ],\n    );\n  },\n  child: const MyApp(),\n)\n",[351,888,889,895,915,926,934,942,961,971,1001,1015,1022,1037,1045,1071,1084,1090,1097,1105,1113,1128],{"__ignoreMap":398},[402,890,891,893],{"class":404,"line":405},[402,892,357],{"class":408},[402,894,412],{"class":411},[402,896,897,900,902,905,907,910,912],{"class":404,"line":415},[402,898,899],{"class":411},"  builder",[402,901,422],{"class":421},[402,903,904],{"class":411}," (context",[402,906,445],{"class":421},[402,908,909],{"class":411}," status",[402,911,445],{"class":421},[402,913,914],{"class":411}," child) {\n",[402,916,917,921,924],{"class":404,"line":431},[402,918,920],{"class":919},"s7zQu","    return",[402,922,923],{"class":408}," Stack",[402,925,412],{"class":411},[402,927,928,930,932],{"class":404,"line":452},[402,929,710],{"class":411},[402,931,422],{"class":421},[402,933,715],{"class":411},[402,935,936,939],{"class":404,"line":471},[402,937,938],{"class":411},"        child",[402,940,941],{"class":421},"!,\n",[402,943,944,947,950,953,956,958],{"class":404,"line":555},[402,945,946],{"class":919},"        if",[402,948,949],{"class":411}," (status ",[402,951,952],{"class":421},"==",[402,954,955],{"class":408}," NetworkStatus",[402,957,572],{"class":421},[402,959,960],{"class":411},"offline)\n",[402,962,963,966,969],{"class":404,"line":563},[402,964,965],{"class":460},"          const",[402,967,968],{"class":408}," Positioned",[402,970,412],{"class":411},[402,972,973,976,978,981,983,986,988,990,992,995,997,999],{"class":404,"line":718},[402,974,975],{"class":411},"            bottom",[402,977,422],{"class":421},[402,979,980],{"class":659}," 0",[402,982,445],{"class":421},[402,984,985],{"class":411}," left",[402,987,422],{"class":421},[402,989,980],{"class":659},[402,991,445],{"class":421},[402,993,994],{"class":411}," right",[402,996,422],{"class":421},[402,998,980],{"class":659},[402,1000,428],{"class":421},[402,1002,1003,1006,1008,1011,1013],{"class":404,"line":762},[402,1004,1005],{"class":411},"            child",[402,1007,422],{"class":421},[402,1009,1010],{"class":408}," MyOfflineBanner",[402,1012,442],{"class":411},[402,1014,428],{"class":421},[402,1016,1017,1020],{"class":404,"line":779},[402,1018,1019],{"class":411},"          )",[402,1021,428],{"class":421},[402,1023,1024,1026,1028,1030,1032,1034],{"class":404,"line":815},[402,1025,946],{"class":919},[402,1027,949],{"class":411},[402,1029,952],{"class":421},[402,1031,955],{"class":408},[402,1033,572],{"class":421},[402,1035,1036],{"class":411},"unknown)\n",[402,1038,1039,1041,1043],{"class":404,"line":823},[402,1040,965],{"class":460},[402,1042,968],{"class":408},[402,1044,412],{"class":411},[402,1046,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069],{"class":404,"line":831},[402,1048,975],{"class":411},[402,1050,422],{"class":421},[402,1052,980],{"class":659},[402,1054,445],{"class":421},[402,1056,985],{"class":411},[402,1058,422],{"class":421},[402,1060,980],{"class":659},[402,1062,445],{"class":421},[402,1064,994],{"class":411},[402,1066,422],{"class":421},[402,1068,980],{"class":659},[402,1070,428],{"class":421},[402,1072,1073,1075,1077,1080,1082],{"class":404,"line":838},[402,1074,1005],{"class":411},[402,1076,422],{"class":421},[402,1078,1079],{"class":408}," MyCheckingBanner",[402,1081,442],{"class":411},[402,1083,428],{"class":421},[402,1085,1086,1088],{"class":404,"line":853},[402,1087,1019],{"class":411},[402,1089,428],{"class":421},[402,1091,1093,1095],{"class":404,"line":1092},16,[402,1094,818],{"class":411},[402,1096,428],{"class":421},[402,1098,1100,1102],{"class":404,"line":1099},17,[402,1101,826],{"class":411},[402,1103,1104],{"class":421},";\n",[402,1106,1108,1111],{"class":404,"line":1107},18,[402,1109,1110],{"class":411},"  }",[402,1112,428],{"class":421},[402,1114,1116,1118,1120,1122,1124,1126],{"class":404,"line":1115},19,[402,1117,455],{"class":411},[402,1119,422],{"class":421},[402,1121,461],{"class":460},[402,1123,464],{"class":408},[402,1125,442],{"class":411},[402,1127,428],{"class":421},[402,1129,1131],{"class":404,"line":1130},20,[402,1132,474],{"class":411},[490,1134,1136],{"id":1135},"props","Props",[1138,1139,1140,1159],"table",{},[1141,1142,1143],"thead",{},[1144,1145,1146,1150,1153,1156],"tr",{},[1147,1148,1149],"th",{},"Prop",[1147,1151,1152],{},"Type",[1147,1154,1155],{},"Default",[1147,1157,1158],{},"Description",[1160,1161,1162,1181,1203],"tbody",{},[1144,1163,1164,1170,1175,1178],{},[1165,1166,1167],"td",{},[351,1168,1169],{},"child",[1165,1171,1172],{},[351,1173,1174],{},"Widget",[1165,1176,1177],{},"required",[1165,1179,1180],{},"The main content of the app.",[1144,1182,1183,1187,1192,1197],{},[1165,1184,1185],{},[351,1186,863],{},[1165,1188,1189],{},[351,1190,1191],{},"Widget Function(BuildContext, NetworkStatus, Widget?)?",[1165,1193,1194],{},[351,1195,1196],{},"null",[1165,1198,1199,1200,1202],{},"Full control builder. When set, ",[351,1201,582],{}," is ignored.",[1144,1204,1205,1209,1214,1218],{},[1165,1206,1207],{},[351,1208,582],{},[1165,1210,1211],{},[351,1212,1213],{},"Widget Function(BuildContext)?",[1165,1215,1216],{},[351,1217,1196],{},[1165,1219,1220],{},"Custom widget shown at the bottom when offline.",[371,1222],{},[374,1224,1226],{"id":1225},"networkstatusbuilder",[351,1227,353],{},[348,1229,1230,1231,1233,1234,1236,1237,1239],{},"The low-level widget. Subscribes to the ",[351,1232,361],{}," stream and calls ",[351,1235,863],{}," on every ",[351,1238,368],{}," transition. Use this when you need fine-grained control over how each status is rendered.",[490,1241,1243],{"id":1242},"basic-usage","Basic usage",[392,1245,1248],{"className":394,"code":1246,"filename":1247,"language":397,"meta":398,"style":398},"NetworkStatusBuilder(\n  builder: (context, status, child) {\n    return status == NetworkStatus.offline\n        ? const MyOfflineBanner()\n        : const SizedBox.shrink();\n  },\n)\n","lib/ui/widgets/offline_banner.dart",[351,1249,1250,1256,1272,1288,1300,1319,1325],{"__ignoreMap":398},[402,1251,1252,1254],{"class":404,"line":405},[402,1253,353],{"class":408},[402,1255,412],{"class":411},[402,1257,1258,1260,1262,1264,1266,1268,1270],{"class":404,"line":415},[402,1259,899],{"class":411},[402,1261,422],{"class":421},[402,1263,904],{"class":411},[402,1265,445],{"class":421},[402,1267,909],{"class":411},[402,1269,445],{"class":421},[402,1271,914],{"class":411},[402,1273,1274,1276,1279,1281,1283,1285],{"class":404,"line":431},[402,1275,920],{"class":919},[402,1277,1278],{"class":411}," status ",[402,1280,952],{"class":421},[402,1282,955],{"class":408},[402,1284,572],{"class":421},[402,1286,1287],{"class":411},"offline\n",[402,1289,1290,1293,1295,1297],{"class":404,"line":452},[402,1291,1292],{"class":421},"        ?",[402,1294,461],{"class":460},[402,1296,1010],{"class":408},[402,1298,1299],{"class":411},"()\n",[402,1301,1302,1305,1307,1310,1312,1315,1317],{"class":404,"line":471},[402,1303,1304],{"class":421},"        :",[402,1306,461],{"class":460},[402,1308,1309],{"class":408}," SizedBox",[402,1311,572],{"class":421},[402,1313,1314],{"class":650},"shrink",[402,1316,442],{"class":411},[402,1318,1104],{"class":421},[402,1320,1321,1323],{"class":404,"line":555},[402,1322,1110],{"class":411},[402,1324,428],{"class":421},[402,1326,1327],{"class":404,"line":563},[402,1328,474],{"class":411},[490,1330,1332],{"id":1331},"with-child-optimisation","With child optimisation",[348,1334,1335,1336,1338],{},"Pass an expensive sub-tree as ",[351,1337,1169],{}," to avoid rebuilding it on every status change:",[392,1340,1343],{"className":394,"code":1341,"filename":1342,"language":397,"meta":398,"style":398},"NetworkStatusBuilder(\n  builder: (context, status, child) {\n    return Column(\n      children: [\n        if (status == NetworkStatus.offline) const OfflineBanner(),\n        Expanded(child: child!),\n      ],\n    );\n  },\n  child: const ExpensiveContentTree(),\n)\n","lib/ui/screens/home_screen.dart",[351,1344,1345,1351,1367,1376,1384,1409,1429,1435,1441,1447,1462],{"__ignoreMap":398},[402,1346,1347,1349],{"class":404,"line":405},[402,1348,353],{"class":408},[402,1350,412],{"class":411},[402,1352,1353,1355,1357,1359,1361,1363,1365],{"class":404,"line":415},[402,1354,899],{"class":411},[402,1356,422],{"class":421},[402,1358,904],{"class":411},[402,1360,445],{"class":421},[402,1362,909],{"class":411},[402,1364,445],{"class":421},[402,1366,914],{"class":411},[402,1368,1369,1371,1374],{"class":404,"line":431},[402,1370,920],{"class":919},[402,1372,1373],{"class":408}," Column",[402,1375,412],{"class":411},[402,1377,1378,1380,1382],{"class":404,"line":452},[402,1379,710],{"class":411},[402,1381,422],{"class":421},[402,1383,715],{"class":411},[402,1385,1386,1388,1390,1392,1394,1396,1399,1402,1405,1407],{"class":404,"line":471},[402,1387,946],{"class":919},[402,1389,949],{"class":411},[402,1391,952],{"class":421},[402,1393,955],{"class":408},[402,1395,572],{"class":421},[402,1397,1398],{"class":411},"offline) ",[402,1400,1401],{"class":460},"const",[402,1403,1404],{"class":408}," OfflineBanner",[402,1406,442],{"class":411},[402,1408,428],{"class":421},[402,1410,1411,1414,1417,1419,1422,1425,1427],{"class":404,"line":555},[402,1412,1413],{"class":408},"        Expanded",[402,1415,1416],{"class":411},"(child",[402,1418,422],{"class":421},[402,1420,1421],{"class":411}," child",[402,1423,1424],{"class":421},"!",[402,1426,673],{"class":411},[402,1428,428],{"class":421},[402,1430,1431,1433],{"class":404,"line":563},[402,1432,818],{"class":411},[402,1434,428],{"class":421},[402,1436,1437,1439],{"class":404,"line":718},[402,1438,826],{"class":411},[402,1440,1104],{"class":421},[402,1442,1443,1445],{"class":404,"line":762},[402,1444,1110],{"class":411},[402,1446,428],{"class":421},[402,1448,1449,1451,1453,1455,1458,1460],{"class":404,"line":779},[402,1450,455],{"class":411},[402,1452,422],{"class":421},[402,1454,461],{"class":460},[402,1456,1457],{"class":408}," ExpensiveContentTree",[402,1459,442],{"class":411},[402,1461,428],{"class":421},[402,1463,1464],{"class":404,"line":815},[402,1465,474],{"class":411},[348,1467,1468,1469,1471,1472,1474],{},"The framework reuses ",[351,1470,1169],{}," across ",[351,1473,863],{}," calls: only the wrapper rebuilds.",[490,1476,1478],{"id":1477},"reading-the-current-status-imperatively","Reading the current status imperatively",[392,1480,1483],{"className":394,"code":1481,"filename":1482,"language":397,"meta":398,"style":398},"final manager = QoraScope.connectivityManagerOf(context);\nfinal status = manager?.currentStatus ?? NetworkStatus.unknown;\n","lib/ui/offline_badge.dart",[351,1484,1485,1509],{"__ignoreMap":398},[402,1486,1487,1490,1493,1496,1499,1501,1504,1507],{"class":404,"line":405},[402,1488,1489],{"class":460},"final",[402,1491,1492],{"class":411}," manager ",[402,1494,1495],{"class":421},"=",[402,1497,1498],{"class":408}," QoraScope",[402,1500,572],{"class":421},[402,1502,1503],{"class":650},"connectivityManagerOf",[402,1505,1506],{"class":411},"(context)",[402,1508,1104],{"class":421},[402,1510,1511,1513,1515,1517,1520,1523,1526,1529,1531,1533,1535],{"class":404,"line":415},[402,1512,1489],{"class":460},[402,1514,1278],{"class":411},[402,1516,1495],{"class":421},[402,1518,1519],{"class":411}," manager",[402,1521,1522],{"class":421},"?.",[402,1524,1525],{"class":411},"currentStatus ",[402,1527,1528],{"class":421},"??",[402,1530,955],{"class":408},[402,1532,572],{"class":421},[402,1534,883],{"class":411},[402,1536,1104],{"class":421},[490,1538,1136],{"id":1539},"props-1",[1138,1541,1542,1554],{},[1141,1543,1544],{},[1144,1545,1546,1548,1550,1552],{},[1147,1547,1149],{},[1147,1549,1152],{},[1147,1551,1155],{},[1147,1553,1158],{},[1160,1555,1556,1574],{},[1144,1557,1558,1562,1567,1569],{},[1165,1559,1560],{},[351,1561,863],{},[1165,1563,1564],{},[351,1565,1566],{},"Widget Function(BuildContext, NetworkStatus, Widget?)",[1165,1568,1177],{},[1165,1570,1571,1572,572],{},"Builds the widget tree for the given ",[351,1573,368],{},[1144,1575,1576,1580,1585,1589],{},[1165,1577,1578],{},[351,1579,1169],{},[1165,1581,1582],{},[351,1583,1584],{},"Widget?",[1165,1586,1587],{},[351,1588,1196],{},[1165,1590,1591,1592,572],{},"Optional child passed unchanged to ",[351,1593,863],{},[371,1595],{},[374,1597,1599,1601],{"id":1598},"networkstatus-values",[351,1600,368],{}," values",[1138,1603,1604,1614],{},[1141,1605,1606],{},[1144,1607,1608,1611],{},[1147,1609,1610],{},"Value",[1147,1612,1613],{},"Meaning",[1160,1615,1616,1626,1635],{},[1144,1617,1618,1623],{},[1165,1619,1620],{},[351,1621,1622],{},"NetworkStatus.online",[1165,1624,1625],{},"Device has at least one active network interface.",[1144,1627,1628,1632],{},[1165,1629,1630],{},[351,1631,487],{},[1165,1633,1634],{},"All network interfaces are down.",[1144,1636,1637,1641],{},[1165,1638,1639],{},[351,1640,389],{},[1165,1642,1643,1644,1646],{},"No ",[351,1645,361],{}," is registered, or status has not yet been determined.",[1648,1649,1650,1652,1653,1657,1658,1660,1661,1663],"tip",{},[351,1651,368],{}," reflects ",[1654,1655,1656],"strong",{},"interface availability",", not actual internet reachability. A device connected to a router with no WAN access will report ",[351,1659,880],{},". For reachability validation, add a custom health-check in your ",[351,1662,361],{}," implementation.",[371,1665],{},[374,1667,1669],{"id":1668},"recommended-placement","Recommended placement",[348,1671,1672,1673,1675,1676,1678],{},"Place ",[351,1674,357],{}," just inside ",[351,1677,103],{},", wrapping the entire app. This ensures the banner is always visible regardless of which route is active:",[392,1680,1682],{"className":394,"code":1681,"filename":396,"language":397,"meta":398,"style":398},"runApp(\n  QoraScope(\n    client: client,\n    connectivityManager: FlutterConnectivityManager(),\n    child: NetworkStatusIndicator(\n      child: MaterialApp(\n        home: const HomeScreen(),\n      ),\n    ),\n  ),\n);\n",[351,1683,1684,1691,1698,1709,1722,1732,1744,1760,1767,1773,1779],{"__ignoreMap":398},[402,1685,1686,1689],{"class":404,"line":405},[402,1687,1688],{"class":650},"runApp",[402,1690,412],{"class":411},[402,1692,1693,1696],{"class":404,"line":415},[402,1694,1695],{"class":408},"  QoraScope",[402,1697,412],{"class":411},[402,1699,1700,1703,1705,1707],{"class":404,"line":431},[402,1701,1702],{"class":411},"    client",[402,1704,422],{"class":421},[402,1706,425],{"class":411},[402,1708,428],{"class":421},[402,1710,1711,1714,1716,1718,1720],{"class":404,"line":452},[402,1712,1713],{"class":411},"    connectivityManager",[402,1715,422],{"class":421},[402,1717,439],{"class":408},[402,1719,442],{"class":411},[402,1721,428],{"class":421},[402,1723,1724,1726,1728,1730],{"class":404,"line":471},[402,1725,542],{"class":411},[402,1727,422],{"class":421},[402,1729,535],{"class":408},[402,1731,412],{"class":411},[402,1733,1734,1737,1739,1742],{"class":404,"line":555},[402,1735,1736],{"class":411},"      child",[402,1738,422],{"class":421},[402,1740,1741],{"class":408}," MaterialApp",[402,1743,412],{"class":411},[402,1745,1746,1749,1751,1753,1756,1758],{"class":404,"line":563},[402,1747,1748],{"class":411},"        home",[402,1750,422],{"class":421},[402,1752,461],{"class":460},[402,1754,1755],{"class":408}," HomeScreen",[402,1757,442],{"class":411},[402,1759,428],{"class":421},[402,1761,1762,1765],{"class":404,"line":718},[402,1763,1764],{"class":411},"      )",[402,1766,428],{"class":421},[402,1768,1769,1771],{"class":404,"line":762},[402,1770,826],{"class":411},[402,1772,428],{"class":421},[402,1774,1775,1777],{"class":404,"line":779},[402,1776,558],{"class":411},[402,1778,428],{"class":421},[402,1780,1781,1783],{"class":404,"line":815},[402,1782,673],{"class":411},[402,1784,1104],{"class":421},[371,1786],{},[374,1788,1790],{"id":1789},"next-steps","Next Steps",[1792,1793,1794,1803,1813],"ul",{},[1795,1796,1797,1802],"li",{},[1798,1799,1801],"a",{"href":1800},"../recipes/network-aware","Network Aware Guide",": Full offline-first setup walkthrough",[1795,1804,1805,1808,1809,1812],{},[1798,1806,103],{"href":1807},"./qora-scope",": Wiring ",[351,1810,1811],{},"FlutterConnectivityManager"," into the widget tree",[1795,1814,1815,1818,1819,1822],{},[1798,1816,108],{"href":1817},"./qora-builder",": Using ",[351,1820,1821],{},"FetchStatus.paused"," for per-widget offline indicators",[1824,1825,1826],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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":398,"searchDepth":415,"depth":415,"links":1828},[1829,1830,1836,1842,1844,1845],{"id":376,"depth":415,"text":377},{"id":479,"depth":415,"text":357,"children":1831},[1832,1833,1834,1835],{"id":492,"depth":431,"text":493},{"id":575,"depth":431,"text":576},{"id":867,"depth":431,"text":868},{"id":1135,"depth":431,"text":1136},{"id":1225,"depth":415,"text":353,"children":1837},[1838,1839,1840,1841],{"id":1242,"depth":431,"text":1243},{"id":1331,"depth":431,"text":1332},{"id":1477,"depth":431,"text":1478},{"id":1539,"depth":431,"text":1136},{"id":1598,"depth":415,"text":1843},"NetworkStatus values",{"id":1668,"depth":415,"text":1669},{"id":1789,"depth":415,"text":1790},"NetworkStatusBuilder and NetworkStatusIndicator: reactive widgets for displaying offline state in Flutter apps.","md",null,{},{"icon":131},{"title":1852,"description":1853},"NetworkStatusBuilder & NetworkStatusIndicator: Flutter Qor","Display offline banners and react to network connectivity changes in Flutter with NetworkStatusBuilder and NetworkStatusIndicator.'","K_XnG_dNWx6Qa2Go2RnnVbvmYhFzs-RebI3v5GvVSXw",[1856,1858],{"title":123,"path":124,"stem":125,"description":1857,"icon":126,"children":-1},"Use useQuery, useMutation, useInfiniteQuery, useIsFetching and useIsMutating with flutter_hooks for a concise, composable API.\n",{"title":133,"path":134,"stem":135,"description":1859,"icon":136,"children":-1},"Patterns and conventions for building reliable Flutter apps with Qora: keys, query placement, mutation wiring, and performance.",1794040399084]