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