[{"data":1,"prerenderedAt":3856},["ShallowReactive",2],{"navigation_docs_en":3,"-en-api-reference-qora-client":342,"-en-api-reference-qora-client-surround":3851},[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":202,"body":344,"description":3844,"extension":3845,"links":3846,"meta":3847,"navigation":3848,"path":203,"seo":3849,"stem":204,"__hash__":3850},"docs_en/en/05.api-reference/1.qora-client.md",{"type":345,"value":346,"toc":3800},"minimark",[347,352,384,388,563,566,570,576,590,593,599,629,632,683,685,689,695,785,788,794,838,849,962,967,1004,1006,1012,1092,1099,1104,1126,1131,1139,1447,1449,1454,1530,1533,1605,1607,1611,1617,1644,1669,1704,1706,1712,1739,1749,1837,1839,1843,1849,1879,1889,1919,1921,1927,1958,1967,2097,2099,2103,2108,2126,2136,2176,2178,2184,2215,2221,2337,2339,2345,2364,2371,2427,2437,2439,2445,2468,2478,2540,2753,2755,2761,2785,2792,2829,2908,2920,2922,2926,2932,2950,2956,2996,2998,3004,3019,3030,3032,3037,3051,3063,3085,3087,3091,3097,3136,3150,3160,3298,3300,3306,3344,3357,3359,3363,3369,3394,3397,3459,3461,3465,3471,3491,3508,3510,3515,3529,3536,3558,3560,3564,3796],[348,349,351],"h2",{"id":350},"constructor","Constructor",[353,354,360],"pre",{"className":355,"code":356,"filename":357,"language":358,"meta":359,"style":359},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","QoraClient({QoraClientConfig? config})\n","main.dart","dart","",[361,362,363],"code",{"__ignoreMap":359},[364,365,368,371,375,377,381],"span",{"class":366,"line":367},"line",1,[364,369,202],{"class":370},"sBMFI",[364,372,374],{"class":373},"sTEyZ","({",[364,376,220],{"class":370},[364,378,380],{"class":379},"sMK4o","?",[364,382,383],{"class":373}," config})\n",[385,386,387],"p",{},"Creates a new client instance. All queries share the same cache and deduplication map.",[353,389,391],{"className":355,"code":390,"filename":357,"language":358,"meta":359,"style":359},"// Minimal (all defaults)\nfinal client = QoraClient();\n\n// With full configuration\nfinal client = QoraClient(\n  config: QoraClientConfig(\n    defaultOptions: QoraOptions(\n      staleTime: Duration(minutes: 5),\n      retryCount: 2,\n    ),\n    debugMode: kDebugMode,\n    maxCacheSize: 200,\n  ),\n);\n",[361,392,393,399,421,428,434,448,462,475,501,514,522,535,548,556],{"__ignoreMap":359},[364,394,395],{"class":366,"line":367},[364,396,398],{"class":397},"sHwdD","// Minimal (all defaults)\n",[364,400,402,406,409,412,415,418],{"class":366,"line":401},2,[364,403,405],{"class":404},"spNyl","final",[364,407,408],{"class":373}," client ",[364,410,411],{"class":379},"=",[364,413,414],{"class":370}," QoraClient",[364,416,417],{"class":373},"()",[364,419,420],{"class":379},";\n",[364,422,424],{"class":366,"line":423},3,[364,425,427],{"emptyLinePlaceholder":426},true,"\n",[364,429,431],{"class":366,"line":430},4,[364,432,433],{"class":397},"// With full configuration\n",[364,435,437,439,441,443,445],{"class":366,"line":436},5,[364,438,405],{"class":404},[364,440,408],{"class":373},[364,442,411],{"class":379},[364,444,414],{"class":370},[364,446,447],{"class":373},"(\n",[364,449,451,454,457,460],{"class":366,"line":450},6,[364,452,453],{"class":373},"  config",[364,455,456],{"class":379},":",[364,458,459],{"class":370}," QoraClientConfig",[364,461,447],{"class":373},[364,463,465,468,470,473],{"class":366,"line":464},7,[364,466,467],{"class":373},"    defaultOptions",[364,469,456],{"class":379},[364,471,472],{"class":370}," QoraOptions",[364,474,447],{"class":373},[364,476,478,481,483,486,489,491,495,498],{"class":366,"line":477},8,[364,479,480],{"class":373},"      staleTime",[364,482,456],{"class":379},[364,484,485],{"class":370}," Duration",[364,487,488],{"class":373},"(minutes",[364,490,456],{"class":379},[364,492,494],{"class":493},"sbssI"," 5",[364,496,497],{"class":373},")",[364,499,500],{"class":379},",\n",[364,502,504,507,509,512],{"class":366,"line":503},9,[364,505,506],{"class":373},"      retryCount",[364,508,456],{"class":379},[364,510,511],{"class":493}," 2",[364,513,500],{"class":379},[364,515,517,520],{"class":366,"line":516},10,[364,518,519],{"class":373},"    )",[364,521,500],{"class":379},[364,523,525,528,530,533],{"class":366,"line":524},11,[364,526,527],{"class":373},"    debugMode",[364,529,456],{"class":379},[364,531,532],{"class":373}," kDebugMode",[364,534,500],{"class":379},[364,536,538,541,543,546],{"class":366,"line":537},12,[364,539,540],{"class":373},"    maxCacheSize",[364,542,456],{"class":379},[364,544,545],{"class":493}," 200",[364,547,500],{"class":379},[364,549,551,554],{"class":366,"line":550},13,[364,552,553],{"class":373},"  )",[364,555,500],{"class":379},[364,557,559,561],{"class":366,"line":558},14,[364,560,497],{"class":373},[364,562,420],{"class":379},[564,565],"hr",{},[348,567,569],{"id":568},"properties","Properties",[571,572,574],"h3",{"id":573},"config",[361,575,573],{},[353,577,579],{"className":355,"code":578,"language":358,"meta":359,"style":359},"final QoraClientConfig config\n",[361,580,581],{"__ignoreMap":359},[364,582,583,585,587],{"class":366,"line":367},[364,584,405],{"class":404},[364,586,459],{"class":370},[364,588,589],{"class":373}," config\n",[385,591,592],{},"The resolved configuration for this client instance. Read-only.",[571,594,596],{"id":595},"cachedkeys",[361,597,598],{},"cachedKeys",[353,600,602],{"className":355,"code":601,"language":358,"meta":359,"style":359},"Iterable\u003CList\u003Cdynamic>> get cachedKeys\n",[361,603,604],{"__ignoreMap":359},[364,605,606,609,612,615,617,620,623,626],{"class":366,"line":367},[364,607,608],{"class":370},"Iterable",[364,610,611],{"class":373},"\u003C",[364,613,614],{"class":370},"List",[364,616,611],{"class":373},[364,618,619],{"class":370},"dynamic",[364,621,622],{"class":373},">> ",[364,624,625],{"class":379},"get",[364,627,628],{"class":373}," cachedKeys\n",[385,630,631],{},"All currently cached query keys (normalised). Useful for debugging or bulk invalidation.",[353,633,635],{"className":355,"code":634,"filename":357,"language":358,"meta":359,"style":359},"for (final key in client.cachedKeys) {\n  print(key); // [users, 1], [posts], ...\n}\n",[361,636,637,663,678],{"__ignoreMap":359},[364,638,639,643,646,648,651,654,657,660],{"class":366,"line":367},[364,640,642],{"class":641},"s7zQu","for",[364,644,645],{"class":373}," (",[364,647,405],{"class":404},[364,649,650],{"class":373}," key ",[364,652,653],{"class":641},"in",[364,655,656],{"class":373}," client",[364,658,659],{"class":379},".",[364,661,662],{"class":373},"cachedKeys) {\n",[364,664,665,669,672,675],{"class":366,"line":401},[364,666,668],{"class":667},"s2Zo4","  print",[364,670,671],{"class":373},"(key)",[364,673,674],{"class":379},";",[364,676,677],{"class":397}," // [users, 1], [posts], ...\n",[364,679,680],{"class":366,"line":423},[364,681,682],{"class":373},"}\n",[564,684],{},[348,686,688],{"id":687},"fetching","Fetching",[571,690,692],{"id":691},"fetchquery",[361,693,694],{},"fetchQuery",[353,696,698],{"className":355,"code":697,"language":358,"meta":359,"style":359},"Future\u003CT> fetchQuery\u003CT>({\n  required Object key,\n  required Future\u003CT> Function() fetcher,\n  QoraOptions? options,\n  CancelToken? cancelToken,\n})\n",[361,699,700,722,735,756,768,780],{"__ignoreMap":359},[364,701,702,705,707,710,713,715,717,719],{"class":366,"line":367},[364,703,704],{"class":370},"Future",[364,706,611],{"class":373},[364,708,709],{"class":370},"T",[364,711,712],{"class":373},"> ",[364,714,694],{"class":667},[364,716,611],{"class":373},[364,718,709],{"class":370},[364,720,721],{"class":373},">({\n",[364,723,724,727,730,733],{"class":366,"line":401},[364,725,726],{"class":404},"  required",[364,728,729],{"class":370}," Object",[364,731,732],{"class":373}," key",[364,734,500],{"class":379},[364,736,737,739,742,744,746,748,751,754],{"class":366,"line":423},[364,738,726],{"class":404},[364,740,741],{"class":370}," Future",[364,743,611],{"class":373},[364,745,709],{"class":370},[364,747,712],{"class":373},[364,749,750],{"class":370},"Function",[364,752,753],{"class":373},"() fetcher",[364,755,500],{"class":379},[364,757,758,761,763,766],{"class":366,"line":430},[364,759,760],{"class":370},"  QoraOptions",[364,762,380],{"class":379},[364,764,765],{"class":373}," options",[364,767,500],{"class":379},[364,769,770,773,775,778],{"class":366,"line":436},[364,771,772],{"class":370},"  CancelToken",[364,774,380],{"class":379},[364,776,777],{"class":373}," cancelToken",[364,779,500],{"class":379},[364,781,782],{"class":366,"line":450},[364,783,784],{"class":373},"})\n",[385,786,787],{},"Fetch data once and return the result.",[385,789,790],{},[791,792,793],"strong",{},"Cache behaviour:",[795,796,797,810],"table",{},[798,799,800],"thead",{},[801,802,803,807],"tr",{},[804,805,806],"th",{},"Cache state",[804,808,809],{},"Action",[811,812,813,822,830],"tbody",{},[801,814,815,819],{},[816,817,818],"td",{},"Fresh (not stale)",[816,820,821],{},"Return cached data: no network call",[801,823,824,827],{},[816,825,826],{},"Stale",[816,828,829],{},"Return stale data immediately; revalidate in background",[801,831,832,835],{},[816,833,834],{},"Missing",[816,836,837],{},"Fetch, await, and return result",[385,839,840,841,844,845,848],{},"Concurrent calls with the same key are ",[791,842,843],{},"deduplicated",": all share a single in-flight request. Failed fetches are retried with exponential backoff up to ",[361,846,847],{},"retryCount"," times.",[353,850,853],{"className":355,"code":851,"filename":852,"language":358,"meta":359,"style":359},"final user = await client.fetchQuery\u003CUser>(\n  key: ['users', userId],\n  fetcher: () => api.getUser(userId),\n  options: QoraOptions(staleTime: Duration(minutes: 5)),\n);\n","user_repository.dart",[361,854,855,881,903,929,956],{"__ignoreMap":359},[364,856,857,859,862,864,867,869,871,873,875,878],{"class":366,"line":367},[364,858,405],{"class":404},[364,860,861],{"class":373}," user ",[364,863,411],{"class":379},[364,865,866],{"class":641}," await",[364,868,656],{"class":373},[364,870,659],{"class":379},[364,872,694],{"class":667},[364,874,611],{"class":373},[364,876,877],{"class":370},"User",[364,879,880],{"class":373},">(\n",[364,882,883,886,888,891,895,898,901],{"class":366,"line":401},[364,884,885],{"class":373},"  key",[364,887,456],{"class":379},[364,889,890],{"class":373}," [",[364,892,894],{"class":893},"sfazB","'users'",[364,896,897],{"class":379},",",[364,899,900],{"class":373}," userId]",[364,902,500],{"class":379},[364,904,905,908,910,913,916,919,921,924,927],{"class":366,"line":423},[364,906,907],{"class":373},"  fetcher",[364,909,456],{"class":379},[364,911,912],{"class":373}," () ",[364,914,915],{"class":379},"=>",[364,917,918],{"class":373}," api",[364,920,659],{"class":379},[364,922,923],{"class":667},"getUser",[364,925,926],{"class":373},"(userId)",[364,928,500],{"class":379},[364,930,931,934,936,938,941,943,945,947,949,951,954],{"class":366,"line":430},[364,932,933],{"class":373},"  options",[364,935,456],{"class":379},[364,937,472],{"class":370},[364,939,940],{"class":373},"(staleTime",[364,942,456],{"class":379},[364,944,485],{"class":370},[364,946,488],{"class":373},[364,948,456],{"class":379},[364,950,494],{"class":493},[364,952,953],{"class":373},"))",[364,955,500],{"class":379},[364,957,958,960],{"class":366,"line":436},[364,959,497],{"class":373},[364,961,420],{"class":379},[385,963,964],{},[791,965,966],{},"Throws:",[968,969,970,984,992,1001],"ul",{},[971,972,973,976,977,980,981],"li",{},[361,974,975],{},"StateError"," if ",[361,978,979],{},"QoraOptions.enabled"," is ",[361,982,983],{},"false",[971,985,986,976,988,991],{},[361,987,975],{},[361,989,990],{},"QoraOptions.dependsOn"," is set and the dependency has no data yet",[971,993,994,976,997,1000],{},[361,995,996],{},"QoraCancelException",[361,998,999],{},"cancelToken"," is cancelled before or during the fetch",[971,1002,1003],{},"The fetcher's exception (after all retries) on failure",[564,1005],{},[571,1007,1009],{"id":1008},"watchquery",[361,1010,1011],{},"watchQuery",[353,1013,1015],{"className":355,"code":1014,"language":358,"meta":359,"style":359},"Stream\u003CQoraState\u003CT>> watchQuery\u003CT>({\n  required Object key,\n  required Future\u003CT> Function() fetcher,\n  QoraOptions? options,\n  CancelToken? cancelToken,\n})\n",[361,1016,1017,1040,1050,1068,1078,1088],{"__ignoreMap":359},[364,1018,1019,1022,1024,1026,1028,1030,1032,1034,1036,1038],{"class":366,"line":367},[364,1020,1021],{"class":370},"Stream",[364,1023,611],{"class":373},[364,1025,211],{"class":370},[364,1027,611],{"class":373},[364,1029,709],{"class":370},[364,1031,622],{"class":373},[364,1033,1011],{"class":667},[364,1035,611],{"class":373},[364,1037,709],{"class":370},[364,1039,721],{"class":373},[364,1041,1042,1044,1046,1048],{"class":366,"line":401},[364,1043,726],{"class":404},[364,1045,729],{"class":370},[364,1047,732],{"class":373},[364,1049,500],{"class":379},[364,1051,1052,1054,1056,1058,1060,1062,1064,1066],{"class":366,"line":423},[364,1053,726],{"class":404},[364,1055,741],{"class":370},[364,1057,611],{"class":373},[364,1059,709],{"class":370},[364,1061,712],{"class":373},[364,1063,750],{"class":370},[364,1065,753],{"class":373},[364,1067,500],{"class":379},[364,1069,1070,1072,1074,1076],{"class":366,"line":430},[364,1071,760],{"class":370},[364,1073,380],{"class":379},[364,1075,765],{"class":373},[364,1077,500],{"class":379},[364,1079,1080,1082,1084,1086],{"class":366,"line":436},[364,1081,772],{"class":370},[364,1083,380],{"class":379},[364,1085,777],{"class":373},[364,1087,500],{"class":379},[364,1089,1090],{"class":366,"line":450},[364,1091,784],{"class":373},[385,1093,1094,1095,1098],{},"Create a reactive ",[361,1096,1097],{},"Stream\u003CQoraState\u003CT>>"," for a query.",[385,1100,1101],{},[791,1102,1103],{},"On subscription:",[1105,1106,1107,1110,1116,1123],"ol",{},[971,1108,1109],{},"Emits the current cached state immediately",[971,1111,1112,1113,497],{},"Triggers a fetch if data is missing or stale (per ",[361,1114,1115],{},"refetchOnMount",[971,1117,1118,1119,1122],{},"Sets up a polling timer if ",[361,1120,1121],{},"refetchInterval"," is set",[971,1124,1125],{},"Pushes all future state changes: from any source",[385,1127,1128],{},[791,1129,1130],{},"On cancel (last subscriber):",[968,1132,1133,1136],{},[971,1134,1135],{},"Cancels the polling timer",[971,1137,1138],{},"Schedules a GC timer for the cache entry",[353,1140,1143],{"className":355,"code":1141,"filename":1142,"language":358,"meta":359,"style":359},"StreamBuilder\u003CQoraState\u003CUser>>(\n  stream: client.watchQuery\u003CUser>(\n    key: ['users', userId],\n    fetcher: () => api.getUser(userId),\n    options: QoraOptions(refetchInterval: Duration(seconds: 30)),\n  ),\n  builder: (context, snapshot) {\n    return switch (snapshot.data) {\n      null || 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)         => ErrorWidget('$error'),\n    };\n  },\n)\n","user_page.dart",[361,1144,1145,1161,1180,1197,1218,1246,1252,1267,1283,1314,1340,1351,1365,1388,1425,1433,1441],{"__ignoreMap":359},[364,1146,1147,1150,1152,1154,1156,1158],{"class":366,"line":367},[364,1148,1149],{"class":370},"StreamBuilder",[364,1151,611],{"class":373},[364,1153,211],{"class":370},[364,1155,611],{"class":373},[364,1157,877],{"class":370},[364,1159,1160],{"class":373},">>(\n",[364,1162,1163,1166,1168,1170,1172,1174,1176,1178],{"class":366,"line":401},[364,1164,1165],{"class":373},"  stream",[364,1167,456],{"class":379},[364,1169,656],{"class":373},[364,1171,659],{"class":379},[364,1173,1011],{"class":667},[364,1175,611],{"class":373},[364,1177,877],{"class":370},[364,1179,880],{"class":373},[364,1181,1182,1185,1187,1189,1191,1193,1195],{"class":366,"line":423},[364,1183,1184],{"class":373},"    key",[364,1186,456],{"class":379},[364,1188,890],{"class":373},[364,1190,894],{"class":893},[364,1192,897],{"class":379},[364,1194,900],{"class":373},[364,1196,500],{"class":379},[364,1198,1199,1202,1204,1206,1208,1210,1212,1214,1216],{"class":366,"line":430},[364,1200,1201],{"class":373},"    fetcher",[364,1203,456],{"class":379},[364,1205,912],{"class":373},[364,1207,915],{"class":379},[364,1209,918],{"class":373},[364,1211,659],{"class":379},[364,1213,923],{"class":667},[364,1215,926],{"class":373},[364,1217,500],{"class":379},[364,1219,1220,1223,1225,1227,1230,1232,1234,1237,1239,1242,1244],{"class":366,"line":436},[364,1221,1222],{"class":373},"    options",[364,1224,456],{"class":379},[364,1226,472],{"class":370},[364,1228,1229],{"class":373},"(refetchInterval",[364,1231,456],{"class":379},[364,1233,485],{"class":370},[364,1235,1236],{"class":373},"(seconds",[364,1238,456],{"class":379},[364,1240,1241],{"class":493}," 30",[364,1243,953],{"class":373},[364,1245,500],{"class":379},[364,1247,1248,1250],{"class":366,"line":450},[364,1249,553],{"class":373},[364,1251,500],{"class":379},[364,1253,1254,1257,1259,1262,1264],{"class":366,"line":464},[364,1255,1256],{"class":373},"  builder",[364,1258,456],{"class":379},[364,1260,1261],{"class":373}," (context",[364,1263,897],{"class":379},[364,1265,1266],{"class":373}," snapshot) {\n",[364,1268,1269,1272,1275,1278,1280],{"class":366,"line":477},[364,1270,1271],{"class":641},"    return",[364,1273,1274],{"class":641}," switch",[364,1276,1277],{"class":373}," (snapshot",[364,1279,659],{"class":379},[364,1281,1282],{"class":373},"data) {\n",[364,1284,1285,1288,1291,1294,1297,1299,1302,1305,1307,1310,1312],{"class":366,"line":503},[364,1286,1287],{"class":379},"      null",[364,1289,1290],{"class":379}," ||",[364,1292,1293],{"class":370}," Initial",[364,1295,1296],{"class":373},"()             ",[364,1298,915],{"class":379},[364,1300,1301],{"class":404}," const",[364,1303,1304],{"class":370}," SizedBox",[364,1306,659],{"class":379},[364,1308,1309],{"class":667},"shrink",[364,1311,417],{"class":373},[364,1313,500],{"class":379},[364,1315,1316,1319,1322,1324,1326,1329,1331,1334,1337],{"class":366,"line":516},[364,1317,1318],{"class":370},"      Loading",[364,1320,1321],{"class":373},"(",[364,1323,456],{"class":379},[364,1325,405],{"class":404},[364,1327,1328],{"class":373}," previousData)  ",[364,1330,915],{"class":379},[364,1332,1333],{"class":373}," previousData ",[364,1335,1336],{"class":379},"!=",[364,1338,1339],{"class":379}," null\n",[364,1341,1342,1345,1348],{"class":366,"line":524},[364,1343,1344],{"class":379},"          ?",[364,1346,1347],{"class":370}," UserCard",[364,1349,1350],{"class":373},"(previousData)\n",[364,1352,1353,1356,1358,1361,1363],{"class":366,"line":537},[364,1354,1355],{"class":379},"          :",[364,1357,1301],{"class":404},[364,1359,1360],{"class":370}," CircularProgressIndicator",[364,1362,417],{"class":373},[364,1364,500],{"class":379},[364,1366,1367,1370,1372,1374,1376,1379,1381,1383,1386],{"class":366,"line":550},[364,1368,1369],{"class":370},"      Success",[364,1371,1321],{"class":373},[364,1373,456],{"class":379},[364,1375,405],{"class":404},[364,1377,1378],{"class":373}," data)          ",[364,1380,915],{"class":379},[364,1382,1347],{"class":370},[364,1384,1385],{"class":373},"(data)",[364,1387,500],{"class":379},[364,1389,1390,1393,1395,1397,1399,1402,1404,1407,1409,1412,1415,1419,1421,1423],{"class":366,"line":558},[364,1391,1392],{"class":370},"      Failure",[364,1394,1321],{"class":373},[364,1396,456],{"class":379},[364,1398,405],{"class":404},[364,1400,1401],{"class":373}," error)         ",[364,1403,915],{"class":379},[364,1405,1406],{"class":370}," ErrorWidget",[364,1408,1321],{"class":373},[364,1410,1411],{"class":893},"'",[364,1413,1414],{"class":373},"$",[364,1416,1418],{"class":1417},"sHdIc","error",[364,1420,1411],{"class":893},[364,1422,497],{"class":373},[364,1424,500],{"class":379},[364,1426,1428,1431],{"class":366,"line":1427},15,[364,1429,1430],{"class":373},"    }",[364,1432,420],{"class":379},[364,1434,1436,1439],{"class":366,"line":1435},16,[364,1437,1438],{"class":373},"  }",[364,1440,500],{"class":379},[364,1442,1444],{"class":366,"line":1443},17,[364,1445,1446],{"class":373},")\n",[564,1448],{},[571,1450,1452],{"id":1451},"prefetch",[361,1453,1451],{},[353,1455,1457],{"className":355,"code":1456,"language":358,"meta":359,"style":359},"Future\u003Cvoid> prefetch\u003CT>({\n  required Object key,\n  required Future\u003CT> Function() fetcher,\n  QoraOptions? options,\n  CancelToken? cancelToken,\n})\n",[361,1458,1459,1478,1488,1506,1516,1526],{"__ignoreMap":359},[364,1460,1461,1463,1465,1468,1470,1472,1474,1476],{"class":366,"line":367},[364,1462,704],{"class":370},[364,1464,611],{"class":373},[364,1466,1467],{"class":404},"void",[364,1469,712],{"class":373},[364,1471,1451],{"class":667},[364,1473,611],{"class":373},[364,1475,709],{"class":370},[364,1477,721],{"class":373},[364,1479,1480,1482,1484,1486],{"class":366,"line":401},[364,1481,726],{"class":404},[364,1483,729],{"class":370},[364,1485,732],{"class":373},[364,1487,500],{"class":379},[364,1489,1490,1492,1494,1496,1498,1500,1502,1504],{"class":366,"line":423},[364,1491,726],{"class":404},[364,1493,741],{"class":370},[364,1495,611],{"class":373},[364,1497,709],{"class":370},[364,1499,712],{"class":373},[364,1501,750],{"class":370},[364,1503,753],{"class":373},[364,1505,500],{"class":379},[364,1507,1508,1510,1512,1514],{"class":366,"line":430},[364,1509,760],{"class":370},[364,1511,380],{"class":379},[364,1513,765],{"class":373},[364,1515,500],{"class":379},[364,1517,1518,1520,1522,1524],{"class":366,"line":436},[364,1519,772],{"class":370},[364,1521,380],{"class":379},[364,1523,777],{"class":373},[364,1525,500],{"class":379},[364,1527,1528],{"class":366,"line":450},[364,1529,784],{"class":373},[385,1531,1532],{},"Pre-warm the cache without creating a stream. No-op if data is already fresh.",[353,1534,1537],{"className":355,"code":1535,"filename":1536,"language":358,"meta":359,"style":359},"onEnter: (_) => client.prefetch\u003CUser>(\n  key: ['users', userId],\n  fetcher: () => api.getUser(userId),\n),\n","user_list_page.dart",[361,1538,1539,1563,1579,1599],{"__ignoreMap":359},[364,1540,1541,1544,1546,1549,1551,1553,1555,1557,1559,1561],{"class":366,"line":367},[364,1542,1543],{"class":373},"onEnter",[364,1545,456],{"class":379},[364,1547,1548],{"class":373}," (_) ",[364,1550,915],{"class":379},[364,1552,656],{"class":373},[364,1554,659],{"class":379},[364,1556,1451],{"class":667},[364,1558,611],{"class":373},[364,1560,877],{"class":370},[364,1562,880],{"class":373},[364,1564,1565,1567,1569,1571,1573,1575,1577],{"class":366,"line":401},[364,1566,885],{"class":373},[364,1568,456],{"class":379},[364,1570,890],{"class":373},[364,1572,894],{"class":893},[364,1574,897],{"class":379},[364,1576,900],{"class":373},[364,1578,500],{"class":379},[364,1580,1581,1583,1585,1587,1589,1591,1593,1595,1597],{"class":366,"line":423},[364,1582,907],{"class":373},[364,1584,456],{"class":379},[364,1586,912],{"class":373},[364,1588,915],{"class":379},[364,1590,918],{"class":373},[364,1592,659],{"class":379},[364,1594,923],{"class":667},[364,1596,926],{"class":373},[364,1598,500],{"class":379},[364,1600,1601,1603],{"class":366,"line":430},[364,1602,497],{"class":373},[364,1604,500],{"class":379},[564,1606],{},[348,1608,1610],{"id":1609},"cache-reads","Cache Reads",[571,1612,1614],{"id":1613},"getquerydata",[361,1615,1616],{},"getQueryData",[353,1618,1620],{"className":355,"code":1619,"language":358,"meta":359,"style":359},"T? getQueryData\u003CT>(Object key)\n",[361,1621,1622],{"__ignoreMap":359},[364,1623,1624,1626,1628,1631,1633,1635,1638,1641],{"class":366,"line":367},[364,1625,709],{"class":370},[364,1627,380],{"class":379},[364,1629,1630],{"class":667}," getQueryData",[364,1632,611],{"class":373},[364,1634,709],{"class":370},[364,1636,1637],{"class":373},">(",[364,1639,1640],{"class":370},"Object",[364,1642,1643],{"class":373}," key)\n",[385,1645,1646,1647,1650,1651,1654,1655,1650,1658,1661,1662,1665,1666,659],{},"Returns the best available data for ",[361,1648,1649],{},"key",", or ",[361,1652,1653],{},"null",". Returns ",[361,1656,1657],{},"Success.data",[361,1659,1660],{},"previousData"," from ",[361,1663,1664],{},"Loading","/",[361,1667,1668],{},"Failure",[353,1670,1672],{"className":355,"code":1671,"filename":357,"language":358,"meta":359,"style":359},"final user = client.getQueryData\u003CUser>(['users', userId]);\n",[361,1673,1674],{"__ignoreMap":359},[364,1675,1676,1678,1680,1682,1684,1686,1688,1690,1692,1695,1697,1699,1702],{"class":366,"line":367},[364,1677,405],{"class":404},[364,1679,861],{"class":373},[364,1681,411],{"class":379},[364,1683,656],{"class":373},[364,1685,659],{"class":379},[364,1687,1616],{"class":667},[364,1689,611],{"class":373},[364,1691,877],{"class":370},[364,1693,1694],{"class":373},">([",[364,1696,894],{"class":893},[364,1698,897],{"class":379},[364,1700,1701],{"class":373}," userId])",[364,1703,420],{"class":379},[564,1705],{},[571,1707,1709],{"id":1708},"getquerystate",[361,1710,1711],{},"getQueryState",[353,1713,1715],{"className":355,"code":1714,"language":358,"meta":359,"style":359},"QoraState\u003CT> getQueryState\u003CT>(Object key)\n",[361,1716,1717],{"__ignoreMap":359},[364,1718,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737],{"class":366,"line":367},[364,1720,211],{"class":370},[364,1722,611],{"class":373},[364,1724,709],{"class":370},[364,1726,712],{"class":373},[364,1728,1711],{"class":667},[364,1730,611],{"class":373},[364,1732,709],{"class":370},[364,1734,1637],{"class":373},[364,1736,1640],{"class":370},[364,1738,1643],{"class":373},[385,1740,1741,1742,1650,1745,1748],{},"Returns the full ",[361,1743,1744],{},"QoraState\u003CT>",[361,1746,1747],{},"Initial\u003CT>()"," if not cached.",[353,1750,1752],{"className":355,"code":1751,"filename":357,"language":358,"meta":359,"style":359},"final state = client.getQueryState\u003CUser>(['users', userId]);\nif (state is Success\u003CUser>) {\n  print('Age: ${state.age}');\n}\n",[361,1753,1754,1783,1804,1833],{"__ignoreMap":359},[364,1755,1756,1758,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781],{"class":366,"line":367},[364,1757,405],{"class":404},[364,1759,1760],{"class":373}," state ",[364,1762,411],{"class":379},[364,1764,656],{"class":373},[364,1766,659],{"class":379},[364,1768,1711],{"class":667},[364,1770,611],{"class":373},[364,1772,877],{"class":370},[364,1774,1694],{"class":373},[364,1776,894],{"class":893},[364,1778,897],{"class":379},[364,1780,1701],{"class":373},[364,1782,420],{"class":379},[364,1784,1785,1788,1791,1794,1797,1799,1801],{"class":366,"line":401},[364,1786,1787],{"class":641},"if",[364,1789,1790],{"class":373}," (state ",[364,1792,1793],{"class":379},"is",[364,1795,1796],{"class":370}," Success",[364,1798,611],{"class":373},[364,1800,877],{"class":370},[364,1802,1803],{"class":373},">) {\n",[364,1805,1806,1808,1810,1813,1816,1819,1821,1824,1827,1829,1831],{"class":366,"line":423},[364,1807,668],{"class":667},[364,1809,1321],{"class":373},[364,1811,1812],{"class":893},"'Age: ",[364,1814,1815],{"class":373},"${",[364,1817,1818],{"class":1417},"state",[364,1820,659],{"class":373},[364,1822,1823],{"class":1417},"age",[364,1825,1826],{"class":373},"}",[364,1828,1411],{"class":893},[364,1830,497],{"class":373},[364,1832,420],{"class":379},[364,1834,1835],{"class":366,"line":430},[364,1836,682],{"class":373},[564,1838],{},[348,1840,1842],{"id":1841},"cache-writes","Cache Writes",[571,1844,1846],{"id":1845},"setquerydata",[361,1847,1848],{},"setQueryData",[353,1850,1852],{"className":355,"code":1851,"language":358,"meta":359,"style":359},"void setQueryData\u003CT>(Object key, T data)\n",[361,1853,1854],{"__ignoreMap":359},[364,1855,1856,1858,1861,1863,1865,1867,1869,1871,1873,1876],{"class":366,"line":367},[364,1857,1467],{"class":404},[364,1859,1860],{"class":667}," setQueryData",[364,1862,611],{"class":373},[364,1864,709],{"class":370},[364,1866,1637],{"class":373},[364,1868,1640],{"class":370},[364,1870,732],{"class":373},[364,1872,897],{"class":379},[364,1874,1875],{"class":370}," T",[364,1877,1878],{"class":373}," data)\n",[385,1880,1881,1882,1885,1886,1888],{},"Inject data directly into the cache. Instantly pushes ",[361,1883,1884],{},"Success"," to all active ",[361,1887,1011],{}," streams.",[353,1890,1892],{"className":355,"code":1891,"filename":357,"language":358,"meta":359,"style":359},"client.setQueryData(['users', userId], updatedUser);\n",[361,1893,1894],{"__ignoreMap":359},[364,1895,1896,1899,1901,1903,1906,1908,1910,1912,1914,1917],{"class":366,"line":367},[364,1897,1898],{"class":373},"client",[364,1900,659],{"class":379},[364,1902,1848],{"class":667},[364,1904,1905],{"class":373},"([",[364,1907,894],{"class":893},[364,1909,897],{"class":379},[364,1911,900],{"class":373},[364,1913,897],{"class":379},[364,1915,1916],{"class":373}," updatedUser)",[364,1918,420],{"class":379},[564,1920],{},[571,1922,1924],{"id":1923},"restorequerydata",[361,1925,1926],{},"restoreQueryData",[353,1928,1930],{"className":355,"code":1929,"language":358,"meta":359,"style":359},"void restoreQueryData\u003CT>(Object key, T? snapshot)\n",[361,1931,1932],{"__ignoreMap":359},[364,1933,1934,1936,1939,1941,1943,1945,1947,1949,1951,1953,1955],{"class":366,"line":367},[364,1935,1467],{"class":404},[364,1937,1938],{"class":667}," restoreQueryData",[364,1940,611],{"class":373},[364,1942,709],{"class":370},[364,1944,1637],{"class":373},[364,1946,1640],{"class":370},[364,1948,732],{"class":373},[364,1950,897],{"class":379},[364,1952,1875],{"class":370},[364,1954,380],{"class":379},[364,1956,1957],{"class":373}," snapshot)\n",[385,1959,1960,1961,980,1964,1966],{},"Roll back to a previous snapshot. If ",[361,1962,1963],{},"snapshot",[361,1965,1653],{},", the entry is removed from cache.",[353,1968,1970],{"className":355,"code":1969,"filename":357,"language":358,"meta":359,"style":359},"final snapshot = client.getQueryData\u003CUser>(['users', userId]);\nclient.setQueryData(['users', userId], optimisticUser);\n\ntry {\n  await api.updateUser(userId, payload);\n} catch (_) {\n  client.restoreQueryData(['users', userId], snapshot);\n}\n",[361,1971,1972,2001,2024,2028,2036,2058,2069,2093],{"__ignoreMap":359},[364,1973,1974,1976,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999],{"class":366,"line":367},[364,1975,405],{"class":404},[364,1977,1978],{"class":373}," snapshot ",[364,1980,411],{"class":379},[364,1982,656],{"class":373},[364,1984,659],{"class":379},[364,1986,1616],{"class":667},[364,1988,611],{"class":373},[364,1990,877],{"class":370},[364,1992,1694],{"class":373},[364,1994,894],{"class":893},[364,1996,897],{"class":379},[364,1998,1701],{"class":373},[364,2000,420],{"class":379},[364,2002,2003,2005,2007,2009,2011,2013,2015,2017,2019,2022],{"class":366,"line":401},[364,2004,1898],{"class":373},[364,2006,659],{"class":379},[364,2008,1848],{"class":667},[364,2010,1905],{"class":373},[364,2012,894],{"class":893},[364,2014,897],{"class":379},[364,2016,900],{"class":373},[364,2018,897],{"class":379},[364,2020,2021],{"class":373}," optimisticUser)",[364,2023,420],{"class":379},[364,2025,2026],{"class":366,"line":423},[364,2027,427],{"emptyLinePlaceholder":426},[364,2029,2030,2033],{"class":366,"line":430},[364,2031,2032],{"class":641},"try",[364,2034,2035],{"class":373}," {\n",[364,2037,2038,2041,2043,2045,2048,2051,2053,2056],{"class":366,"line":436},[364,2039,2040],{"class":641},"  await",[364,2042,918],{"class":373},[364,2044,659],{"class":379},[364,2046,2047],{"class":667},"updateUser",[364,2049,2050],{"class":373},"(userId",[364,2052,897],{"class":379},[364,2054,2055],{"class":373}," payload)",[364,2057,420],{"class":379},[364,2059,2060,2063,2066],{"class":366,"line":450},[364,2061,2062],{"class":373},"} ",[364,2064,2065],{"class":641},"catch",[364,2067,2068],{"class":373}," (_) {\n",[364,2070,2071,2074,2076,2078,2080,2082,2084,2086,2088,2091],{"class":366,"line":464},[364,2072,2073],{"class":373},"  client",[364,2075,659],{"class":379},[364,2077,1926],{"class":667},[364,2079,1905],{"class":373},[364,2081,894],{"class":893},[364,2083,897],{"class":379},[364,2085,900],{"class":373},[364,2087,897],{"class":379},[364,2089,2090],{"class":373}," snapshot)",[364,2092,420],{"class":379},[364,2094,2095],{"class":366,"line":477},[364,2096,682],{"class":373},[564,2098],{},[348,2100,2102],{"id":2101},"invalidation","Invalidation",[571,2104,2106],{"id":2105},"invalidate",[361,2107,2105],{},[353,2109,2111],{"className":355,"code":2110,"language":358,"meta":359,"style":359},"void invalidate(Object key)\n",[361,2112,2113],{"__ignoreMap":359},[364,2114,2115,2117,2120,2122,2124],{"class":366,"line":367},[364,2116,1467],{"class":404},[364,2118,2119],{"class":667}," invalidate",[364,2121,1321],{"class":373},[364,2123,1640],{"class":370},[364,2125,1643],{"class":373},[385,2127,2128,2129,2131,2132,2135],{},"Mark a query as stale. Active ",[361,2130,1011],{}," streams receive ",[361,2133,2134],{},"Loading(previousData: ...)"," immediately. The next access triggers a fresh fetch.",[353,2137,2139],{"className":355,"code":2138,"filename":357,"language":358,"meta":359,"style":359},"await api.createPost(payload);\nclient.invalidate(['posts']);\n",[361,2140,2141,2158],{"__ignoreMap":359},[364,2142,2143,2146,2148,2150,2153,2156],{"class":366,"line":367},[364,2144,2145],{"class":641},"await",[364,2147,918],{"class":373},[364,2149,659],{"class":379},[364,2151,2152],{"class":667},"createPost",[364,2154,2155],{"class":373},"(payload)",[364,2157,420],{"class":379},[364,2159,2160,2162,2164,2166,2168,2171,2174],{"class":366,"line":401},[364,2161,1898],{"class":373},[364,2163,659],{"class":379},[364,2165,2105],{"class":667},[364,2167,1905],{"class":373},[364,2169,2170],{"class":893},"'posts'",[364,2172,2173],{"class":373},"])",[364,2175,420],{"class":379},[564,2177],{},[571,2179,2181],{"id":2180},"invalidatewhere",[361,2182,2183],{},"invalidateWhere",[353,2185,2187],{"className":355,"code":2186,"language":358,"meta":359,"style":359},"void invalidateWhere(bool Function(List\u003Cdynamic> key) predicate)\n",[361,2188,2189],{"__ignoreMap":359},[364,2190,2191,2193,2196,2198,2201,2204,2206,2208,2210,2212],{"class":366,"line":367},[364,2192,1467],{"class":404},[364,2194,2195],{"class":667}," invalidateWhere",[364,2197,1321],{"class":373},[364,2199,2200],{"class":370},"bool",[364,2202,2203],{"class":370}," Function",[364,2205,1321],{"class":373},[364,2207,614],{"class":370},[364,2209,611],{"class":373},[364,2211,619],{"class":370},[364,2213,2214],{"class":373},"> key) predicate)\n",[385,2216,2217,2218,659],{},"Invalidate all queries whose key satisfies ",[361,2219,2220],{},"predicate",[353,2222,2224],{"className":355,"code":2223,"filename":357,"language":358,"meta":359,"style":359},"// All user queries\nclient.invalidateWhere((key) => key.firstOrNull == 'users');\n\n// Specific user + their sub-resources\nclient.invalidateWhere(\n  (key) => key.length >= 2 && key[0] == 'users' && key[1] == userId,\n);\n",[361,2225,2226,2231,2261,2265,2270,2280,2331],{"__ignoreMap":359},[364,2227,2228],{"class":366,"line":367},[364,2229,2230],{"class":397},"// All user queries\n",[364,2232,2233,2235,2237,2239,2242,2244,2246,2248,2251,2254,2257,2259],{"class":366,"line":401},[364,2234,1898],{"class":373},[364,2236,659],{"class":379},[364,2238,2183],{"class":667},[364,2240,2241],{"class":373},"((key) ",[364,2243,915],{"class":379},[364,2245,732],{"class":373},[364,2247,659],{"class":379},[364,2249,2250],{"class":373},"firstOrNull ",[364,2252,2253],{"class":379},"==",[364,2255,2256],{"class":893}," 'users'",[364,2258,497],{"class":373},[364,2260,420],{"class":379},[364,2262,2263],{"class":366,"line":423},[364,2264,427],{"emptyLinePlaceholder":426},[364,2266,2267],{"class":366,"line":430},[364,2268,2269],{"class":397},"// Specific user + their sub-resources\n",[364,2271,2272,2274,2276,2278],{"class":366,"line":436},[364,2273,1898],{"class":373},[364,2275,659],{"class":379},[364,2277,2183],{"class":667},[364,2279,447],{"class":373},[364,2281,2282,2285,2287,2289,2291,2294,2297,2299,2302,2305,2308,2311,2313,2315,2317,2319,2322,2324,2326,2329],{"class":366,"line":450},[364,2283,2284],{"class":373},"  (key) ",[364,2286,915],{"class":379},[364,2288,732],{"class":373},[364,2290,659],{"class":379},[364,2292,2293],{"class":373},"length ",[364,2295,2296],{"class":379},">=",[364,2298,511],{"class":493},[364,2300,2301],{"class":379}," &&",[364,2303,2304],{"class":373}," key[",[364,2306,2307],{"class":493},"0",[364,2309,2310],{"class":373},"] ",[364,2312,2253],{"class":379},[364,2314,2256],{"class":893},[364,2316,2301],{"class":379},[364,2318,2304],{"class":373},[364,2320,2321],{"class":493},"1",[364,2323,2310],{"class":373},[364,2325,2253],{"class":379},[364,2327,2328],{"class":373}," userId",[364,2330,500],{"class":379},[364,2332,2333,2335],{"class":366,"line":464},[364,2334,497],{"class":373},[364,2336,420],{"class":379},[564,2338],{},[571,2340,2342],{"id":2341},"invalidateprefix",[361,2343,2344],{},"invalidatePrefix",[353,2346,2348],{"className":355,"code":2347,"language":358,"meta":359,"style":359},"void invalidatePrefix(Object prefix)\n",[361,2349,2350],{"__ignoreMap":359},[364,2351,2352,2354,2357,2359,2361],{"class":366,"line":367},[364,2353,1467],{"class":404},[364,2355,2356],{"class":667}," invalidatePrefix",[364,2358,1321],{"class":373},[364,2360,1640],{"class":370},[364,2362,2363],{"class":373}," prefix)\n",[385,2365,2366,2367,2370],{},"Invalidate every query whose key starts with ",[361,2368,2369],{},"prefix",". Segments are compared with the same deep equality as query keys (maps and nested lists match structurally). An empty prefix matches every query. Active watchers refetch.",[353,2372,2374],{"className":355,"code":2373,"filename":357,"language":358,"meta":359,"style":359},"// ['posts'], ['posts', 1], ['posts', 1, 'comments'], ...\nclient.invalidatePrefix(['posts']);\n\n// Every query under user 42\nclient.invalidatePrefix(['users', 42]);\n",[361,2375,2376,2381,2397,2401,2406],{"__ignoreMap":359},[364,2377,2378],{"class":366,"line":367},[364,2379,2380],{"class":397},"// ['posts'], ['posts', 1], ['posts', 1, 'comments'], ...\n",[364,2382,2383,2385,2387,2389,2391,2393,2395],{"class":366,"line":401},[364,2384,1898],{"class":373},[364,2386,659],{"class":379},[364,2388,2344],{"class":667},[364,2390,1905],{"class":373},[364,2392,2170],{"class":893},[364,2394,2173],{"class":373},[364,2396,420],{"class":379},[364,2398,2399],{"class":366,"line":423},[364,2400,427],{"emptyLinePlaceholder":426},[364,2402,2403],{"class":366,"line":430},[364,2404,2405],{"class":397},"// Every query under user 42\n",[364,2407,2408,2410,2412,2414,2416,2418,2420,2423,2425],{"class":366,"line":436},[364,2409,1898],{"class":373},[364,2411,659],{"class":379},[364,2413,2344],{"class":667},[364,2415,1905],{"class":373},[364,2417,894],{"class":893},[364,2419,897],{"class":379},[364,2421,2422],{"class":493}," 42",[364,2424,2173],{"class":373},[364,2426,420],{"class":379},[2428,2429,2430,2433,2434,2436],"note",{},[361,2431,2432],{},"invalidate(key)"," is exact. Use ",[361,2435,2344],{}," when you want TanStack-style partial matching.",[564,2438],{},[571,2440,2442],{"id":2441},"invalidatequeries",[361,2443,2444],{},"invalidateQueries",[353,2446,2448],{"className":355,"code":2447,"language":358,"meta":359,"style":359},"void invalidateQueries({required QueryFilter filter})\n",[361,2449,2450],{"__ignoreMap":359},[364,2451,2452,2454,2457,2459,2462,2465],{"class":366,"line":367},[364,2453,1467],{"class":404},[364,2455,2456],{"class":667}," invalidateQueries",[364,2458,374],{"class":373},[364,2460,2461],{"class":404},"required",[364,2463,2464],{"class":370}," QueryFilter",[364,2466,2467],{"class":373}," filter})\n",[385,2469,2470,2471,2474,2475,2477],{},"Bulk invalidation with a ",[361,2472,2473],{},"QueryFilter",": a richer predicate than ",[361,2476,2183],{}," that also receives the current state and the options from the last successful fetch.",[353,2479,2481],{"className":355,"code":2480,"language":358,"meta":359,"style":359},"typedef QueryFilter = bool Function(\n  String key,\n  QoraState\u003Cdynamic> state,\n  QoraOptions? lastOptions,\n);\n",[361,2482,2483,2500,2509,2523,2534],{"__ignoreMap":359},[364,2484,2485,2488,2490,2493,2496,2498],{"class":366,"line":367},[364,2486,2487],{"class":379},"typedef",[364,2489,2464],{"class":370},[364,2491,2492],{"class":379}," =",[364,2494,2495],{"class":370}," bool",[364,2497,2203],{"class":370},[364,2499,447],{"class":373},[364,2501,2502,2505,2507],{"class":366,"line":401},[364,2503,2504],{"class":370},"  String",[364,2506,732],{"class":373},[364,2508,500],{"class":379},[364,2510,2511,2514,2516,2518,2521],{"class":366,"line":423},[364,2512,2513],{"class":370},"  QoraState",[364,2515,611],{"class":373},[364,2517,619],{"class":370},[364,2519,2520],{"class":373},"> state",[364,2522,500],{"class":379},[364,2524,2525,2527,2529,2532],{"class":366,"line":430},[364,2526,760],{"class":370},[364,2528,380],{"class":379},[364,2530,2531],{"class":373}," lastOptions",[364,2533,500],{"class":379},[364,2535,2536,2538],{"class":366,"line":436},[364,2537,497],{"class":373},[364,2539,420],{"class":379},[353,2541,2543],{"className":355,"code":2542,"filename":357,"language":358,"meta":359,"style":359},"// Invalidate every online-mode query not yet in Success\nclient.invalidateQueries(\n  filter: (key, state, opts) =>\n      opts?.networkMode == NetworkMode.online && state is! Success,\n);\n\n// Invalidate all user queries whose data is older than 10 minutes\nclient.invalidateQueries(\n  filter: (key, state, opts) {\n    if (state is! Success) return false;\n    return key.contains('users') &&\n        DateTime.now().difference(state.updatedAt) > const Duration(minutes: 10);\n  },\n);\n",[361,2544,2545,2550,2560,2583,2616,2622,2626,2631,2641,2658,2678,2698,2741,2747],{"__ignoreMap":359},[364,2546,2547],{"class":366,"line":367},[364,2548,2549],{"class":397},"// Invalidate every online-mode query not yet in Success\n",[364,2551,2552,2554,2556,2558],{"class":366,"line":401},[364,2553,1898],{"class":373},[364,2555,659],{"class":379},[364,2557,2444],{"class":667},[364,2559,447],{"class":373},[364,2561,2562,2565,2567,2570,2572,2575,2577,2580],{"class":366,"line":423},[364,2563,2564],{"class":373},"  filter",[364,2566,456],{"class":379},[364,2568,2569],{"class":373}," (key",[364,2571,897],{"class":379},[364,2573,2574],{"class":373}," state",[364,2576,897],{"class":379},[364,2578,2579],{"class":373}," opts) ",[364,2581,2582],{"class":379},"=>\n",[364,2584,2585,2588,2591,2594,2596,2599,2601,2604,2607,2609,2612,2614],{"class":366,"line":430},[364,2586,2587],{"class":373},"      opts",[364,2589,2590],{"class":379},"?.",[364,2592,2593],{"class":373},"networkMode ",[364,2595,2253],{"class":379},[364,2597,2598],{"class":370}," NetworkMode",[364,2600,659],{"class":379},[364,2602,2603],{"class":373},"online ",[364,2605,2606],{"class":379},"&&",[364,2608,1760],{"class":373},[364,2610,2611],{"class":379},"is!",[364,2613,1796],{"class":370},[364,2615,500],{"class":379},[364,2617,2618,2620],{"class":366,"line":436},[364,2619,497],{"class":373},[364,2621,420],{"class":379},[364,2623,2624],{"class":366,"line":450},[364,2625,427],{"emptyLinePlaceholder":426},[364,2627,2628],{"class":366,"line":464},[364,2629,2630],{"class":397},"// Invalidate all user queries whose data is older than 10 minutes\n",[364,2632,2633,2635,2637,2639],{"class":366,"line":477},[364,2634,1898],{"class":373},[364,2636,659],{"class":379},[364,2638,2444],{"class":667},[364,2640,447],{"class":373},[364,2642,2643,2645,2647,2649,2651,2653,2655],{"class":366,"line":503},[364,2644,2564],{"class":373},[364,2646,456],{"class":379},[364,2648,2569],{"class":373},[364,2650,897],{"class":379},[364,2652,2574],{"class":373},[364,2654,897],{"class":379},[364,2656,2657],{"class":373}," opts) {\n",[364,2659,2660,2663,2665,2667,2669,2672,2675],{"class":366,"line":516},[364,2661,2662],{"class":641},"    if",[364,2664,1790],{"class":373},[364,2666,2611],{"class":379},[364,2668,1796],{"class":370},[364,2670,2671],{"class":373},") ",[364,2673,2674],{"class":641},"return",[364,2676,2677],{"class":379}," false;\n",[364,2679,2680,2682,2684,2686,2689,2691,2693,2695],{"class":366,"line":524},[364,2681,1271],{"class":641},[364,2683,732],{"class":373},[364,2685,659],{"class":379},[364,2687,2688],{"class":667},"contains",[364,2690,1321],{"class":373},[364,2692,894],{"class":893},[364,2694,2671],{"class":373},[364,2696,2697],{"class":379},"&&\n",[364,2699,2700,2703,2705,2708,2710,2712,2715,2718,2720,2723,2726,2728,2730,2732,2734,2737,2739],{"class":366,"line":537},[364,2701,2702],{"class":370},"        DateTime",[364,2704,659],{"class":379},[364,2706,2707],{"class":667},"now",[364,2709,417],{"class":373},[364,2711,659],{"class":379},[364,2713,2714],{"class":667},"difference",[364,2716,2717],{"class":373},"(state",[364,2719,659],{"class":379},[364,2721,2722],{"class":373},"updatedAt) ",[364,2724,2725],{"class":379},">",[364,2727,1301],{"class":404},[364,2729,485],{"class":370},[364,2731,488],{"class":373},[364,2733,456],{"class":379},[364,2735,2736],{"class":493}," 10",[364,2738,497],{"class":373},[364,2740,420],{"class":379},[364,2742,2743,2745],{"class":366,"line":550},[364,2744,1438],{"class":373},[364,2746,500],{"class":379},[364,2748,2749,2751],{"class":366,"line":558},[364,2750,497],{"class":373},[364,2752,420],{"class":379},[564,2754],{},[571,2756,2758],{"id":2757},"invalidatetags",[361,2759,2760],{},"invalidateTags",[353,2762,2764],{"className":355,"code":2763,"language":358,"meta":359,"style":359},"void invalidateTags(List\u003CQueryTag> tags)\n",[361,2765,2766],{"__ignoreMap":359},[364,2767,2768,2770,2773,2775,2777,2779,2782],{"class":366,"line":367},[364,2769,1467],{"class":404},[364,2771,2772],{"class":667}," invalidateTags",[364,2774,1321],{"class":373},[364,2776,614],{"class":370},[364,2778,611],{"class":373},[364,2780,2781],{"class":370},"QueryTag",[364,2783,2784],{"class":373},"> tags)\n",[385,2786,2787,2788,2791],{},"Invalidate all cached queries that provide at least one of the given tags. Queries register tags via ",[361,2789,2790],{},"QoraOptions.providesTags",". Matching follows two rules:",[968,2793,2794,2811],{},[971,2795,2796,2799,2800,2803,2804,2807,2808,659],{},[791,2797,2798],{},"Wildcard",": ",[361,2801,2802],{},"QueryTag('post')"," matches every query that provides any tag with ",[361,2805,2806],{},"type: 'post'",", regardless of ",[361,2809,2810],{},"id",[971,2812,2813,2799,2816,2819,2820,2822,2823,2822,2826,659],{},[791,2814,2815],{},"Specific",[361,2817,2818],{},"QueryTag('post', '123')"," matches only queries that provide a tag with ",[361,2821,2806],{}," ",[791,2824,2825],{},"and",[361,2827,2828],{},"id: '123'",[353,2830,2832],{"className":355,"code":2831,"filename":357,"language":358,"meta":359,"style":359},"// Refetch all post queries\nclient.invalidateTags([QueryTag('post')]);\n\n// Refetch a specific post + its author\nclient.invalidateTags([QueryTag('post', postId), QueryTag('user', authorId)]);\n",[361,2833,2834,2839,2861,2865,2870],{"__ignoreMap":359},[364,2835,2836],{"class":366,"line":367},[364,2837,2838],{"class":397},"// Refetch all post queries\n",[364,2840,2841,2843,2845,2847,2849,2851,2853,2856,2859],{"class":366,"line":401},[364,2842,1898],{"class":373},[364,2844,659],{"class":379},[364,2846,2760],{"class":667},[364,2848,1905],{"class":373},[364,2850,2781],{"class":370},[364,2852,1321],{"class":373},[364,2854,2855],{"class":893},"'post'",[364,2857,2858],{"class":373},")])",[364,2860,420],{"class":379},[364,2862,2863],{"class":366,"line":423},[364,2864,427],{"emptyLinePlaceholder":426},[364,2866,2867],{"class":366,"line":430},[364,2868,2869],{"class":397},"// Refetch a specific post + its author\n",[364,2871,2872,2874,2876,2878,2880,2882,2884,2886,2888,2891,2893,2896,2898,2901,2903,2906],{"class":366,"line":436},[364,2873,1898],{"class":373},[364,2875,659],{"class":379},[364,2877,2760],{"class":667},[364,2879,1905],{"class":373},[364,2881,2781],{"class":370},[364,2883,1321],{"class":373},[364,2885,2855],{"class":893},[364,2887,897],{"class":379},[364,2889,2890],{"class":373}," postId)",[364,2892,897],{"class":379},[364,2894,2895],{"class":370}," QueryTag",[364,2897,1321],{"class":373},[364,2899,2900],{"class":893},"'user'",[364,2902,897],{"class":379},[364,2904,2905],{"class":373}," authorId)])",[364,2907,420],{"class":379},[385,2909,2910,2911,2915,2916,659],{},"See ",[2912,2913,2790],"a",{"href":2914},"./qora-options#providestags"," and ",[2912,2917,2919],{"href":2918},"./qora-mutation#invalidatestags","MutationOptions.invalidatesTags",[564,2921],{},[348,2923,2925],{"id":2924},"cache-removal","Cache Removal",[571,2927,2929],{"id":2928},"removequery",[361,2930,2931],{},"removeQuery",[353,2933,2935],{"className":355,"code":2934,"language":358,"meta":359,"style":359},"void removeQuery(Object key)\n",[361,2936,2937],{"__ignoreMap":359},[364,2938,2939,2941,2944,2946,2948],{"class":366,"line":367},[364,2940,1467],{"class":404},[364,2942,2943],{"class":667}," removeQuery",[364,2945,1321],{"class":373},[364,2947,1640],{"class":370},[364,2949,1643],{"class":373},[385,2951,2952,2953,659],{},"Remove an entry from cache and cancel any pending request. The next access starts from ",[361,2954,2955],{},"Initial",[353,2957,2959],{"className":355,"code":2958,"filename":357,"language":358,"meta":359,"style":359},"await api.deletePost(postId);\nclient.removeQuery(['posts', postId]);\n",[361,2960,2961,2977],{"__ignoreMap":359},[364,2962,2963,2965,2967,2969,2972,2975],{"class":366,"line":367},[364,2964,2145],{"class":641},[364,2966,918],{"class":373},[364,2968,659],{"class":379},[364,2970,2971],{"class":667},"deletePost",[364,2973,2974],{"class":373},"(postId)",[364,2976,420],{"class":379},[364,2978,2979,2981,2983,2985,2987,2989,2991,2994],{"class":366,"line":401},[364,2980,1898],{"class":373},[364,2982,659],{"class":379},[364,2984,2931],{"class":667},[364,2986,1905],{"class":373},[364,2988,2170],{"class":893},[364,2990,897],{"class":379},[364,2992,2993],{"class":373}," postId])",[364,2995,420],{"class":379},[564,2997],{},[571,2999,3001],{"id":3000},"clearcache",[361,3002,3003],{},"clearCache",[353,3005,3007],{"className":355,"code":3006,"language":358,"meta":359,"style":359},"void clearCache()\n",[361,3008,3009],{"__ignoreMap":359},[364,3010,3011,3013,3016],{"class":366,"line":367},[364,3012,1467],{"class":404},[364,3014,3015],{"class":667}," clearCache",[364,3017,3018],{"class":373},"()\n",[385,3020,3021,3022,3025,3026,3029],{},"Clear the in-memory cache only. Persisted storage is untouched.\nUse ",[361,3023,3024],{},"clear()"," to wipe both (if using persistence), or ",[361,3027,3028],{},"clearStorage()"," to wipe storage only.",[564,3031],{},[571,3033,3035],{"id":3034},"clear",[361,3036,3034],{},[353,3038,3040],{"className":355,"code":3039,"language":358,"meta":359,"style":359},"void clear()\n",[361,3041,3042],{"__ignoreMap":359},[364,3043,3044,3046,3049],{"class":366,"line":367},[364,3045,1467],{"class":404},[364,3047,3048],{"class":667}," clear",[364,3050,3018],{"class":373},[385,3052,3053,3054,3056,3057,3059,3060,3062],{},"Remove all cached queries and cancel all pending requests.\nFor ",[361,3055,202],{},", this wipes the in-memory cache (identical to ",[361,3058,3003],{},").\nFor ",[361,3061,229],{},", this wipes BOTH in-memory cache and storage.",[353,3064,3066],{"className":355,"code":3065,"filename":357,"language":358,"meta":359,"style":359},"// On logout\nclient.clear();\n",[361,3067,3068,3073],{"__ignoreMap":359},[364,3069,3070],{"class":366,"line":367},[364,3071,3072],{"class":397},"// On logout\n",[364,3074,3075,3077,3079,3081,3083],{"class":366,"line":401},[364,3076,1898],{"class":373},[364,3078,659],{"class":379},[364,3080,3034],{"class":667},[364,3082,417],{"class":373},[364,3084,420],{"class":379},[564,3086],{},[348,3088,3090],{"id":3089},"hydration","Hydration",[571,3092,3094],{"id":3093},"queuehydration",[361,3095,3096],{},"queueHydration",[353,3098,3100],{"className":355,"code":3099,"language":358,"meta":359,"style":359},"void queueHydration(Object key, dynamic data, {DateTime? updatedAt})\n",[361,3101,3102],{"__ignoreMap":359},[364,3103,3104,3106,3109,3111,3113,3115,3117,3120,3123,3125,3128,3131,3133],{"class":366,"line":367},[364,3105,1467],{"class":404},[364,3107,3108],{"class":667}," queueHydration",[364,3110,1321],{"class":373},[364,3112,1640],{"class":370},[364,3114,732],{"class":373},[364,3116,897],{"class":379},[364,3118,3119],{"class":370}," dynamic",[364,3121,3122],{"class":373}," data",[364,3124,897],{"class":379},[364,3126,3127],{"class":373}," {",[364,3129,3130],{"class":370},"DateTime",[364,3132,380],{"class":379},[364,3134,3135],{"class":373}," updatedAt})\n",[385,3137,3138,3139,3142,3143,3146,3147,3149],{},"Enqueue a pre-deserialized value for lazy injection into the typed cache. The value is injected on the first typed API call (",[361,3140,3141],{},"fetchQuery\u003CT>",", ",[361,3144,3145],{},"watchQuery\u003CT>",", etc.) for that key, deferring the Dart cast until the type ",[361,3148,709],{}," is known.",[385,3151,3152,3153,2915,3156,3159],{},"This is the shared mechanism used by ",[361,3154,3155],{},"PersistQoraClient.hydrate()",[361,3157,3158],{},"SsrHydrator.hydrate()",". Direct use is for advanced scenarios (e.g. custom hydration sources).",[353,3161,3163],{"className":355,"code":3162,"filename":357,"language":358,"meta":359,"style":359},"// Manually pre-populate the cache before runApp\nclient.queueHydration(['users', 1], User(id: 1, name: 'Ada'));\n\n// With a custom timestamp so staleTime evaluates correctly\nclient.queueHydration(\n  ['config'],\n  appConfig,\n  updatedAt: DateTime.now().subtract(const Duration(minutes: 2)),\n);\n",[361,3164,3165,3170,3216,3220,3225,3235,3247,3254,3292],{"__ignoreMap":359},[364,3166,3167],{"class":366,"line":367},[364,3168,3169],{"class":397},"// Manually pre-populate the cache before runApp\n",[364,3171,3172,3174,3176,3178,3180,3182,3184,3187,3190,3192,3195,3198,3200,3202,3204,3207,3209,3212,3214],{"class":366,"line":401},[364,3173,1898],{"class":373},[364,3175,659],{"class":379},[364,3177,3096],{"class":667},[364,3179,1905],{"class":373},[364,3181,894],{"class":893},[364,3183,897],{"class":379},[364,3185,3186],{"class":493}," 1",[364,3188,3189],{"class":373},"]",[364,3191,897],{"class":379},[364,3193,3194],{"class":370}," User",[364,3196,3197],{"class":373},"(id",[364,3199,456],{"class":379},[364,3201,3186],{"class":493},[364,3203,897],{"class":379},[364,3205,3206],{"class":373}," name",[364,3208,456],{"class":379},[364,3210,3211],{"class":893}," 'Ada'",[364,3213,953],{"class":373},[364,3215,420],{"class":379},[364,3217,3218],{"class":366,"line":423},[364,3219,427],{"emptyLinePlaceholder":426},[364,3221,3222],{"class":366,"line":430},[364,3223,3224],{"class":397},"// With a custom timestamp so staleTime evaluates correctly\n",[364,3226,3227,3229,3231,3233],{"class":366,"line":436},[364,3228,1898],{"class":373},[364,3230,659],{"class":379},[364,3232,3096],{"class":667},[364,3234,447],{"class":373},[364,3236,3237,3240,3243,3245],{"class":366,"line":450},[364,3238,3239],{"class":373},"  [",[364,3241,3242],{"class":893},"'config'",[364,3244,3189],{"class":373},[364,3246,500],{"class":379},[364,3248,3249,3252],{"class":366,"line":464},[364,3250,3251],{"class":373},"  appConfig",[364,3253,500],{"class":379},[364,3255,3256,3259,3261,3264,3266,3268,3270,3272,3275,3277,3280,3282,3284,3286,3288,3290],{"class":366,"line":477},[364,3257,3258],{"class":373},"  updatedAt",[364,3260,456],{"class":379},[364,3262,3263],{"class":370}," DateTime",[364,3265,659],{"class":379},[364,3267,2707],{"class":667},[364,3269,417],{"class":373},[364,3271,659],{"class":379},[364,3273,3274],{"class":667},"subtract",[364,3276,1321],{"class":373},[364,3278,3279],{"class":404},"const",[364,3281,485],{"class":370},[364,3283,488],{"class":373},[364,3285,456],{"class":379},[364,3287,511],{"class":493},[364,3289,953],{"class":373},[364,3291,500],{"class":379},[364,3293,3294,3296],{"class":366,"line":503},[364,3295,497],{"class":373},[364,3297,420],{"class":379},[564,3299],{},[571,3301,3303],{"id":3302},"hydratequery",[361,3304,3305],{},"hydrateQuery",[353,3307,3309],{"className":355,"code":3308,"language":358,"meta":359,"style":359},"void hydrateQuery\u003CT>(Object key, T data, {DateTime? updatedAt})\n",[361,3310,3311],{"__ignoreMap":359},[364,3312,3313,3315,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3340,3342],{"class":366,"line":367},[364,3314,1467],{"class":404},[364,3316,3317],{"class":667}," hydrateQuery",[364,3319,611],{"class":373},[364,3321,709],{"class":370},[364,3323,1637],{"class":373},[364,3325,1640],{"class":370},[364,3327,732],{"class":373},[364,3329,897],{"class":379},[364,3331,1875],{"class":370},[364,3333,3122],{"class":373},[364,3335,897],{"class":379},[364,3337,3127],{"class":373},[364,3339,3130],{"class":370},[364,3341,380],{"class":379},[364,3343,3135],{"class":373},[385,3345,3346,3347,3350,3351,3353,3354,3356],{},"Inject a typed ",[361,3348,3349],{},"Success\u003CT>"," directly into an ",[361,3352,2955],{}," cache entry. No-op if the entry already has data. Used internally; prefer ",[361,3355,3096],{}," when the type is not known at call time.",[564,3358],{},[348,3360,3362],{"id":3361},"debugging","Debugging",[571,3364,3366],{"id":3365},"debuginfo",[361,3367,3368],{},"debugInfo",[353,3370,3372],{"className":355,"code":3371,"language":358,"meta":359,"style":359},"Map\u003CString, dynamic> debugInfo()\n",[361,3373,3374],{"__ignoreMap":359},[364,3375,3376,3379,3381,3384,3386,3388,3390,3392],{"class":366,"line":367},[364,3377,3378],{"class":370},"Map",[364,3380,611],{"class":373},[364,3382,3383],{"class":370},"String",[364,3385,3142],{"class":373},[364,3387,619],{"class":370},[364,3389,712],{"class":373},[364,3391,3368],{"class":667},[364,3393,3018],{"class":373},[385,3395,3396],{},"Returns a debug snapshot of the current cache state.",[353,3398,3400],{"className":355,"code":3399,"filename":357,"language":358,"meta":359,"style":359},"print(client.debugInfo());\n// {\n//   total_queries: 12,\n//   active_queries: 3,\n//   inactive_queries: 9,\n//   pending_requests: 1,\n//   max_size: 200,\n//   keys: [['users', 1], ['posts'], ...]\n// }\n",[361,3401,3402,3419,3424,3429,3434,3439,3444,3449,3454],{"__ignoreMap":359},[364,3403,3404,3407,3410,3412,3414,3417],{"class":366,"line":367},[364,3405,3406],{"class":667},"print",[364,3408,3409],{"class":373},"(client",[364,3411,659],{"class":379},[364,3413,3368],{"class":667},[364,3415,3416],{"class":373},"())",[364,3418,420],{"class":379},[364,3420,3421],{"class":366,"line":401},[364,3422,3423],{"class":397},"// {\n",[364,3425,3426],{"class":366,"line":423},[364,3427,3428],{"class":397},"//   total_queries: 12,\n",[364,3430,3431],{"class":366,"line":430},[364,3432,3433],{"class":397},"//   active_queries: 3,\n",[364,3435,3436],{"class":366,"line":436},[364,3437,3438],{"class":397},"//   inactive_queries: 9,\n",[364,3440,3441],{"class":366,"line":450},[364,3442,3443],{"class":397},"//   pending_requests: 1,\n",[364,3445,3446],{"class":366,"line":464},[364,3447,3448],{"class":397},"//   max_size: 200,\n",[364,3450,3451],{"class":366,"line":477},[364,3452,3453],{"class":397},"//   keys: [['users', 1], ['posts'], ...]\n",[364,3455,3456],{"class":366,"line":503},[364,3457,3458],{"class":397},"// }\n",[564,3460],{},[348,3462,3464],{"id":3463},"lifecycle","Lifecycle",[571,3466,3468],{"id":3467},"attachlifecyclemanager",[361,3469,3470],{},"attachLifecycleManager",[353,3472,3474],{"className":355,"code":3473,"language":358,"meta":359,"style":359},"void attachLifecycleManager(LifecycleManager manager)\n",[361,3475,3476],{"__ignoreMap":359},[364,3477,3478,3480,3483,3485,3488],{"class":366,"line":367},[364,3479,1467],{"class":404},[364,3481,3482],{"class":667}," attachLifecycleManager",[364,3484,1321],{"class":373},[364,3486,3487],{"class":370},"LifecycleManager",[364,3489,3490],{"class":373}," manager)\n",[385,3492,3493,3494,3496,3497,3500,3501,3503,3504,3507],{},"Registers a ",[361,3495,3487],{}," with the client. When the app transitions to ",[361,3498,3499],{},"LifecycleState.resumed",", the client revalidates all stale entries that have active subscribers. ",[361,3502,103],{}," calls this automatically when a ",[361,3505,3506],{},"FlutterLifecycleManager"," is provided. Direct use is only necessary in custom embedding scenarios.",[564,3509],{},[571,3511,3513],{"id":3512},"dispose",[361,3514,3512],{},[353,3516,3518],{"className":355,"code":3517,"language":358,"meta":359,"style":359},"void dispose()\n",[361,3519,3520],{"__ignoreMap":359},[364,3521,3522,3524,3527],{"class":366,"line":367},[364,3523,1467],{"class":404},[364,3525,3526],{"class":667}," dispose",[364,3528,3018],{"class":373},[385,3530,3531,3532,3535],{},"Release all resources. Stops the eviction timer, disposes all cache entries, cancels pending requests. The client ",[791,3533,3534],{},"must not"," be used after this call.",[353,3537,3539],{"className":355,"code":3538,"filename":357,"language":358,"meta":359,"style":359},"// In a DI teardown or test tearDown\nclient.dispose();\n",[361,3540,3541,3546],{"__ignoreMap":359},[364,3542,3543],{"class":366,"line":367},[364,3544,3545],{"class":397},"// In a DI teardown or test tearDown\n",[364,3547,3548,3550,3552,3554,3556],{"class":366,"line":401},[364,3549,1898],{"class":373},[364,3551,659],{"class":379},[364,3553,3512],{"class":667},[364,3555,417],{"class":373},[364,3557,420],{"class":379},[564,3559],{},[348,3561,3563],{"id":3562},"recommended-setup","Recommended Setup",[353,3565,3568],{"className":355,"code":3566,"filename":3567,"language":358,"meta":359,"style":359},"import 'package:flutter/foundation.dart';\nimport 'package:qora/qora.dart';\n\n/// Singleton: create once, inject everywhere via DI or QoraScope.\nfinal qoraClient = QoraClient(\n  config: QoraClientConfig(\n    defaultOptions: QoraOptions(\n      staleTime: Duration(minutes: 5),\n      gcTime: Duration(minutes: 10),\n      retryCount: 3,\n    ),\n    debugMode: kDebugMode,\n    maxCacheSize: 200,\n    refetchOnMount: true,\n    errorMapper: (error, stack) => QoraException(\n      '$error',\n      originalError: error,\n      stackTrace: stack,\n    ),\n  ),\n);\n","lib/core/qora.dart",[361,3569,3570,3580,3589,3593,3598,3611,3621,3631,3649,3668,3679,3685,3695,3705,3715,3737,3750,3762,3775,3782,3789],{"__ignoreMap":359},[364,3571,3572,3575,3578],{"class":366,"line":367},[364,3573,3574],{"class":493},"import",[364,3576,3577],{"class":893}," 'package:flutter/foundation.dart'",[364,3579,420],{"class":379},[364,3581,3582,3584,3587],{"class":366,"line":401},[364,3583,3574],{"class":493},[364,3585,3586],{"class":893}," 'package:qora/qora.dart'",[364,3588,420],{"class":379},[364,3590,3591],{"class":366,"line":423},[364,3592,427],{"emptyLinePlaceholder":426},[364,3594,3595],{"class":366,"line":430},[364,3596,3597],{"class":397},"/// Singleton: create once, inject everywhere via DI or QoraScope.\n",[364,3599,3600,3602,3605,3607,3609],{"class":366,"line":436},[364,3601,405],{"class":404},[364,3603,3604],{"class":373}," qoraClient ",[364,3606,411],{"class":379},[364,3608,414],{"class":370},[364,3610,447],{"class":373},[364,3612,3613,3615,3617,3619],{"class":366,"line":450},[364,3614,453],{"class":373},[364,3616,456],{"class":379},[364,3618,459],{"class":370},[364,3620,447],{"class":373},[364,3622,3623,3625,3627,3629],{"class":366,"line":464},[364,3624,467],{"class":373},[364,3626,456],{"class":379},[364,3628,472],{"class":370},[364,3630,447],{"class":373},[364,3632,3633,3635,3637,3639,3641,3643,3645,3647],{"class":366,"line":477},[364,3634,480],{"class":373},[364,3636,456],{"class":379},[364,3638,485],{"class":370},[364,3640,488],{"class":373},[364,3642,456],{"class":379},[364,3644,494],{"class":493},[364,3646,497],{"class":373},[364,3648,500],{"class":379},[364,3650,3651,3654,3656,3658,3660,3662,3664,3666],{"class":366,"line":503},[364,3652,3653],{"class":373},"      gcTime",[364,3655,456],{"class":379},[364,3657,485],{"class":370},[364,3659,488],{"class":373},[364,3661,456],{"class":379},[364,3663,2736],{"class":493},[364,3665,497],{"class":373},[364,3667,500],{"class":379},[364,3669,3670,3672,3674,3677],{"class":366,"line":516},[364,3671,506],{"class":373},[364,3673,456],{"class":379},[364,3675,3676],{"class":493}," 3",[364,3678,500],{"class":379},[364,3680,3681,3683],{"class":366,"line":524},[364,3682,519],{"class":373},[364,3684,500],{"class":379},[364,3686,3687,3689,3691,3693],{"class":366,"line":537},[364,3688,527],{"class":373},[364,3690,456],{"class":379},[364,3692,532],{"class":373},[364,3694,500],{"class":379},[364,3696,3697,3699,3701,3703],{"class":366,"line":550},[364,3698,540],{"class":373},[364,3700,456],{"class":379},[364,3702,545],{"class":493},[364,3704,500],{"class":379},[364,3706,3707,3710,3712],{"class":366,"line":558},[364,3708,3709],{"class":373},"    refetchOnMount",[364,3711,456],{"class":379},[364,3713,3714],{"class":379}," true,\n",[364,3716,3717,3720,3722,3725,3727,3730,3732,3735],{"class":366,"line":1427},[364,3718,3719],{"class":373},"    errorMapper",[364,3721,456],{"class":379},[364,3723,3724],{"class":373}," (error",[364,3726,897],{"class":379},[364,3728,3729],{"class":373}," stack) ",[364,3731,915],{"class":379},[364,3733,3734],{"class":370}," QoraException",[364,3736,447],{"class":373},[364,3738,3739,3742,3744,3746,3748],{"class":366,"line":1435},[364,3740,3741],{"class":893},"      '",[364,3743,1414],{"class":373},[364,3745,1418],{"class":1417},[364,3747,1411],{"class":893},[364,3749,500],{"class":379},[364,3751,3752,3755,3757,3760],{"class":366,"line":1443},[364,3753,3754],{"class":373},"      originalError",[364,3756,456],{"class":379},[364,3758,3759],{"class":373}," error",[364,3761,500],{"class":379},[364,3763,3765,3768,3770,3773],{"class":366,"line":3764},18,[364,3766,3767],{"class":373},"      stackTrace",[364,3769,456],{"class":379},[364,3771,3772],{"class":373}," stack",[364,3774,500],{"class":379},[364,3776,3778,3780],{"class":366,"line":3777},19,[364,3779,519],{"class":373},[364,3781,500],{"class":379},[364,3783,3785,3787],{"class":366,"line":3784},20,[364,3786,553],{"class":373},[364,3788,500],{"class":379},[364,3790,3792,3794],{"class":366,"line":3791},21,[364,3793,497],{"class":373},[364,3795,420],{"class":379},[3797,3798,3799],"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 .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 .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 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}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":359,"searchDepth":401,"depth":401,"links":3801},[3802,3803,3807,3812,3816,3820,3827,3832,3836,3839,3843],{"id":350,"depth":401,"text":351},{"id":568,"depth":401,"text":569,"children":3804},[3805,3806],{"id":573,"depth":423,"text":573},{"id":595,"depth":423,"text":598},{"id":687,"depth":401,"text":688,"children":3808},[3809,3810,3811],{"id":691,"depth":423,"text":694},{"id":1008,"depth":423,"text":1011},{"id":1451,"depth":423,"text":1451},{"id":1609,"depth":401,"text":1610,"children":3813},[3814,3815],{"id":1613,"depth":423,"text":1616},{"id":1708,"depth":423,"text":1711},{"id":1841,"depth":401,"text":1842,"children":3817},[3818,3819],{"id":1845,"depth":423,"text":1848},{"id":1923,"depth":423,"text":1926},{"id":2101,"depth":401,"text":2102,"children":3821},[3822,3823,3824,3825,3826],{"id":2105,"depth":423,"text":2105},{"id":2180,"depth":423,"text":2183},{"id":2341,"depth":423,"text":2344},{"id":2441,"depth":423,"text":2444},{"id":2757,"depth":423,"text":2760},{"id":2924,"depth":401,"text":2925,"children":3828},[3829,3830,3831],{"id":2928,"depth":423,"text":2931},{"id":3000,"depth":423,"text":3003},{"id":3034,"depth":423,"text":3034},{"id":3089,"depth":401,"text":3090,"children":3833},[3834,3835],{"id":3093,"depth":423,"text":3096},{"id":3302,"depth":423,"text":3305},{"id":3361,"depth":401,"text":3362,"children":3837},[3838],{"id":3365,"depth":423,"text":3368},{"id":3463,"depth":401,"text":3464,"children":3840},[3841,3842],{"id":3467,"depth":423,"text":3470},{"id":3512,"depth":423,"text":3512},{"id":3562,"depth":401,"text":3563},"The central engine of Qora: manages queries, cache, deduplication, retries, and reactive state","md",null,{},{"icon":205},{"title":202,"description":3844},"EHN03lgNUbCzso8wfuiRivBput3hvINrEMvvQgl9OIA",[3852,3854],{"title":192,"path":193,"stem":194,"description":3853,"children":-1},"[object Object]",{"title":207,"path":208,"stem":209,"description":3855,"icon":60,"children":-1},"Typed, immutable query key with structural equality. Supports both raw List and QoraKey syntax.",1794040400943]