[{"data":1,"prerenderedAt":3985},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-api-reference-qora-mutation":342,"-fr-api-reference-qora-mutation-surround":3980},[4,45,91,137,195,236,257,291,327],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Prise en main","i-lucide-rocket","/fr/getting-started","fr/01.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Qu'est-ce que Qora ?","/fr/getting-started/what-is-qora","fr/01.getting-started/2.what-is-qora","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/fr/getting-started/installation","fr/01.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Démarrage rapide","/fr/getting-started/quick-start","fr/01.getting-started/4.quick-start",{"title":25,"path":26,"stem":27,"icon":28},"Comparaison","/fr/getting-started/comparison","fr/01.getting-started/5.comparison","i-lucide-scale",{"title":30,"path":31,"stem":32,"icon":33},"Venant de TanStack Query","/fr/getting-started/coming-from-tanstack-query","fr/01.getting-started/6.coming-from-tanstack-query","i-lucide-arrow-left-right",{"title":35,"path":36,"stem":37,"icon":38},"Migrer depuis d'Autres Librairies","/fr/getting-started/migrating-from-other-libraries","fr/01.getting-started/7.migrating-from-other-libraries","i-lucide-arrow-right-left",{"title":40,"path":41,"stem":42,"icon":43},"Assistants IA","/fr/getting-started/ai-assistants","fr/01.getting-started/8.ai-assistants","i-lucide-sparkles",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Concepts clés","i-lucide-book-open","/fr/core-concepts","fr/02.core-concepts",[51,56,61,66,71,76,81,86],{"title":52,"path":53,"stem":54,"icon":55},"Requêtes","/fr/core-concepts/queries","fr/02.core-concepts/1.queries","i-lucide-database",{"title":57,"path":58,"stem":59,"icon":60},"Clés de requête","/fr/core-concepts/query-keys","fr/02.core-concepts/2.query-keys","i-lucide-key-round",{"title":62,"path":63,"stem":64,"icon":65},"États des requêtes","/fr/core-concepts/query-states","fr/02.core-concepts/3.query-states","i-lucide-activity",{"title":67,"path":68,"stem":69,"icon":70},"Cache","/fr/core-concepts/caching","fr/02.core-concepts/4.caching","i-lucide-layers-3",{"title":72,"path":73,"stem":74,"icon":75},"Stale-While-Revalidate","/fr/core-concepts/stale-while-revalidate","fr/02.core-concepts/5.stale-while-revalidate","i-lucide-timer-reset",{"title":77,"path":78,"stem":79,"icon":80},"Déduplication","/fr/core-concepts/deduplication","fr/02.core-concepts/6.deduplication","i-lucide-copy-minus",{"title":82,"path":83,"stem":84,"icon":85},"Mutations et invalidation","/fr/core-concepts/mutations","fr/02.core-concepts/7.mutations","i-lucide-pencil-line",{"title":87,"path":88,"stem":89,"icon":90},"Hors-ligne et réseau","/fr/core-concepts/offline","fr/02.core-concepts/8.offline","i-lucide-wifi-off",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":44},"Usage avec Flutter","i-lucide-smartphone","/fr/flutter-integration","fr/03.flutter-integration",[97,102,107,112,117,122,127,132],{"title":98,"path":99,"stem":100,"icon":101},"Configuration","/fr/flutter-integration/setup","fr/03.flutter-integration/1.setup","i-lucide-wrench",{"title":103,"path":104,"stem":105,"icon":106},"QoraScope","/fr/flutter-integration/qora-scope","fr/03.flutter-integration/2.qora-scope","i-lucide-share-2",{"title":108,"path":109,"stem":110,"icon":111},"QoraBuilder","/fr/flutter-integration/qora-builder","fr/03.flutter-integration/3.qora-builder","i-lucide-blocks",{"title":113,"path":114,"stem":115,"icon":116},"QoraMutationBuilder","/fr/flutter-integration/qora-mutation-builder","fr/03.flutter-integration/4.qora-mutation-builder","i-lucide-pencil",{"title":118,"path":119,"stem":120,"icon":121},"InfiniteQueryBuilder","/fr/flutter-integration/infinite-query-builder","fr/03.flutter-integration/5.infinite-query-builder","i-lucide-infinity",{"title":123,"path":124,"stem":125,"icon":126},"Hooks (flutter_hooks)","/fr/flutter-integration/hooks","fr/03.flutter-integration/6.hooks","i-lucide-anchor",{"title":128,"path":129,"stem":130,"icon":131},"Widgets de statut réseau","/fr/flutter-integration/network-status","fr/03.flutter-integration/7.network-status","i-lucide-wifi",{"title":133,"path":134,"stem":135,"icon":136},"Bonnes pratiques","/fr/flutter-integration/best-practices","fr/03.flutter-integration/8.best-practices","i-lucide-badge-check",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":44},"Guides Pratiques","i-lucide-chef-hat","/fr/recipes","fr/04.recipes",[143,147,152,157,162,166,171,176,181,186,191],{"title":144,"path":145,"stem":146,"icon":85},"Mutations","/fr/recipes/mutations","fr/04.recipes/02.mutations",{"title":148,"path":149,"stem":150,"icon":151},"Mises à jour optimistes","/fr/recipes/optimistic-updates","fr/04.recipes/03.optimistic-updates","i-lucide-zap",{"title":153,"path":154,"stem":155,"icon":156},"Persistance","/fr/recipes/persistence","fr/04.recipes/04.persistence","i-lucide-hard-drive",{"title":158,"path":159,"stem":160,"icon":161},"Réseau adaptatif","/fr/recipes/network-aware","fr/04.recipes/05.network-aware","i-lucide-signal",{"title":163,"path":164,"stem":165,"icon":121},"Requêtes infinies","/fr/recipes/infinite-queries","fr/04.recipes/06.infinite-queries",{"title":167,"path":168,"stem":169,"icon":170},"Requêtes dépendantes","/fr/recipes/dependent-queries","fr/04.recipes/07.dependent-queries","i-lucide-link-2",{"title":172,"path":173,"stem":174,"icon":175},"Annulation","/fr/recipes/cancel-token","fr/04.recipes/08.cancel-token","i-lucide-circle-slash",{"title":177,"path":178,"stem":179,"icon":180},"Hydratation SSR","/fr/recipes/ssr-hydration","fr/04.recipes/09.ssr-hydration","i-lucide-server",{"title":182,"path":183,"stem":184,"icon":185},"Gestion des erreurs","/fr/recipes/error-handling","fr/04.recipes/10.error-handling","i-lucide-shield-alert",{"title":187,"path":188,"stem":189,"icon":190},"Tests","/fr/recipes/testing","fr/04.recipes/11.testing","i-lucide-flask-conical",{"title":192,"path":193,"stem":194},"Prefetch au Niveau des Routes","/fr/recipes/prefetch","fr/04.recipes/12.prefetch",{"title":196,"icon":197,"path":198,"stem":199,"children":200,"page":44},"Référence de l'API","i-lucide-file-code","/fr/api-reference","fr/05.api-reference",[201,206,210,214,219,224,228,232],{"title":202,"path":203,"stem":204,"icon":205},"QoraClient","/fr/api-reference/qora-client","fr/05.api-reference/1.qora-client","i-lucide-cpu",{"title":207,"path":208,"stem":209,"icon":60},"QoraKey","/fr/api-reference/qora-key","fr/05.api-reference/2.qora-key",{"title":211,"path":212,"stem":213,"icon":65},"QoraState","/fr/api-reference/qora-state","fr/05.api-reference/3.qora-state",{"title":215,"path":216,"stem":217,"icon":218},"QoraOptions","/fr/api-reference/qora-options","fr/05.api-reference/4.qora-options","i-lucide-sliders-horizontal",{"title":220,"path":221,"stem":222,"icon":223},"QoraClientConfig","/fr/api-reference/qora-client-config","fr/05.api-reference/5.qora-client-config","i-lucide-settings-2",{"title":225,"path":226,"stem":227,"icon":85},"API Mutation","/fr/api-reference/qora-mutation","fr/05.api-reference/6.qora-mutation",{"title":229,"path":230,"stem":231,"icon":156},"PersistQoraClient","/fr/api-reference/persist-qora-client","fr/05.api-reference/7.persist-qora-client",{"title":233,"path":234,"stem":235,"icon":121},"Requête infinie","/fr/api-reference/infinite-query","fr/05.api-reference/8.infinite-query",{"title":237,"icon":238,"path":239,"stem":240,"children":241,"page":44},"Outils de debug","i-lucide-bug","/fr/devtools","fr/06.devtools",[242,247,252],{"title":243,"path":244,"stem":245,"icon":246},"Vue d'ensemble","/fr/devtools/overview","fr/06.devtools/1.overview","i-lucide-layout-dashboard",{"title":248,"path":249,"stem":250,"icon":251},"Overlay intégré","/fr/devtools/overlay","fr/06.devtools/2.overlay","i-lucide-layers",{"title":253,"path":254,"stem":255,"icon":256},"Sérialisation des données","/fr/devtools/data-display","fr/06.devtools/4.data-display","i-lucide-eye",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":44},"Intégrations tierces","i-lucide-puzzle","/fr/third-party","fr/07.third-party",[263,268,272,277,282,286],{"title":264,"path":265,"stem":266,"icon":267},"Avec Provider","/fr/third-party/with-provider","fr/07.third-party/1.with-provider","i-lucide-plug",{"title":269,"path":270,"stem":271,"icon":111},"Avec BLoC","/fr/third-party/with-bloc","fr/07.third-party/2.with-bloc",{"title":273,"path":274,"stem":275,"icon":276},"Avec Riverpod","/fr/third-party/with-riverpod","fr/07.third-party/3.with-riverpod","i-lucide-droplets",{"title":278,"path":279,"stem":280,"icon":281},"Avec RxDart","/fr/third-party/with-rxdart","fr/07.third-party/4.with-rxdart","i-lucide-git-branch",{"title":283,"path":284,"stem":285},"Avec Dio","/fr/third-party/with-dio","fr/07.third-party/5.with-dio",{"title":287,"path":288,"stem":289,"icon":290},"Avec GraphQL","/fr/third-party/with-graphql","fr/07.third-party/6.with-graphql","i-lucide-binary",{"title":292,"icon":190,"path":293,"stem":294,"children":295,"page":44},"Exemples","/fr/examples","fr/08.examples",[296,301,305,310,314,318,322],{"title":297,"path":298,"stem":299,"icon":300},"Étude de cas : Liste et détail utilisateur","/fr/examples/basic-query","fr/08.examples/1.basic-query","i-lucide-play-circle",{"title":302,"path":303,"stem":304,"icon":151},"Étude de cas : Mutations optimistes et rollback","/fr/examples/mutations-optimistic","fr/08.examples/2.mutations-optimistic",{"title":306,"path":307,"stem":308,"icon":309},"Étude de cas : Feed à défilement infini","/fr/examples/infinite-scroll","fr/08.examples/3.infinite-scroll","i-lucide-scroll",{"title":311,"path":312,"stem":313,"icon":90},"Étude de cas : Application Todo offline-first","/fr/examples/offline-first","fr/08.examples/4.offline-first",{"title":315,"path":316,"stem":317,"icon":161},"Étude de cas : Conscience réseau","/fr/examples/network-awareness","fr/08.examples/5.network-awareness",{"title":319,"path":320,"stem":321,"icon":126},"Étude de cas : Intégration des hooks","/fr/examples/hooks-integration","fr/08.examples/6.hooks-integration",{"title":323,"path":324,"stem":325,"icon":326},"Étude de cas : Application Todo complète","/fr/examples/complete-todo-app","fr/08.examples/7.complete-todo-app","i-lucide-check-square",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"Aide","i-lucide-life-buoy","/fr/help","fr/09.help",[333,338],{"title":334,"path":335,"stem":336,"icon":337},"FAQ","/fr/help/faq","fr/09.help/1.faq","i-lucide-circle-help",{"title":339,"path":340,"stem":341,"icon":101},"Dépannage","/fr/help/troubleshooting","fr/09.help/2.troubleshooting",{"id":343,"title":225,"body":344,"description":3971,"extension":3972,"links":3973,"meta":3974,"navigation":3975,"path":226,"seo":3976,"stem":227,"__hash__":3979},"docs_fr/fr/05.api-reference/6.qora-mutation.md",{"type":345,"value":346,"toc":3937},"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,1187,1197,1202,1218,1228,1234,1239,1253,1256,1270,1273,1278,1281,1284,1526,1529,1534,1562,1580,1585,1627,1632,1637,1679,1695,1700,1752,1763,1769,1784,1794,1800,1814,1824,1829,1852,1862,1865,1943,1946,1968,1974,1997,2004,2010,2021,2105,2120,2122,2127,2130,2138,2142,2145,2284,2289,2402,2405,2411,2531,2538,2545,2643,2646,2781,2787,2803,2812,2814,2819,2850,2856,2858,2863,2872,2875,2996,3000,3097,3099,3105,3114,3236,3242,3435,3437,3443,3451,3457,3477,3488,3595,3603,3608,3633,3643,3674,3751,3756,3762,3768,3839,3841,3847,3893,3905,3907,3911,3933],[348,349,351],"h2",{"id":350},"mutationcontroller",[352,353,354],"code",{},"MutationController",[356,357,358],"p",{},"Le contrôleur de cycle de vie central pour une seule mutation.",[360,361,362,375],"table",{},[363,364,365],"thead",{},[366,367,368,372],"tr",{},[369,370,371],"th",{},"Paramètre de type",[369,373,374],{},"Rôle",[376,377,378,389,402],"tbody",{},[366,379,380,386],{},[381,382,383],"td",{},[352,384,385],{},"TData",[381,387,388],{},"La valeur retournée par le mutator en cas de succès",[366,390,391,396],{},[381,392,393],{},[352,394,395],{},"TVariables",[381,397,398,399],{},"La valeur passée à ",[352,400,401],{},"mutate()",[366,403,404,409],{},[381,405,406],{},[352,407,408],{},"TContext",[381,410,411,412,415],{},"Le snapshot retourné par ",[352,413,414],{},"onMutate"," (utilisé pour le rollback)",[417,418,420],"h3",{"id":419},"constructeur","Constructeur",[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},"propriétés","Propriétés",[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],{},"Identifiant unique pour cette instance de contrôleur. Format : ",[352,839,840],{},"mutation_N"," (incrémental monotone). Utilisé comme clé dans ",[352,843,844],{},"QoraClient.activeMutations"," et ",[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],{},"La fonction async qui effectue l'écriture. Nommée ",[352,880,851],{}," pour faire écho à ",[352,883,884],{},"fetcher"," dans ",[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],{},"Callbacks de cycle de vie et configuration de retry. Voir ",[352,928,929],{},"MutationOptions"," ci-dessous.",[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],{},"Tracker optionnel (typiquement ",[352,957,202],{},") qui reçoit les notifications de changement d'état pour l'observabilité DevTools. Quand ",[352,960,961],{},"null",", le contrôleur opère en mode standalone.",[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],{},"Paires clé-valeur arbitraires transmises telles quelles à chaque ",[352,999,1000],{},"MutationUpdate"," émis par ce contrôleur. Utiliser pour l'étiquetage DevTools sans modifier le schéma central.",[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],{},"Le snapshot d'état synchrone actuel.",[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],{},"Un stream par abonné qui émet ",[1076,1077,1078],"strong",{},"immédiatement"," l'état actuel à l'écoute (capture synchrone), puis transmet toutes les transitions suivantes.",[356,1081,1082,1083,1086],{},"Supporte plusieurs abonnés concurrents. Chaque abonnement obtient son propre stream soutenu par le contrôleur broadcast partagé : aucun événement n'est perdu entre ",[352,1084,1085],{},"listen()"," et le premier microtask.",[417,1088,1090],{"id":1089},"méthodes","Méthodes",[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],{},"Exécute la mutation. Séquence d'états :",[1127,1128,1129,1139,1145,1151],"ol",{},[1130,1131,1132,1133,1136,1137],"li",{},"Appelle ",[352,1134,1135],{},"onMutate(variables)"," → le résultat devient ",[352,1138,408],{},[1130,1140,1141,1142],{},"→ ",[352,1143,1144],{},"MutationPending",[1130,1146,1132,1147,1150],{},[352,1148,1149],{},"mutator(variables)"," (avec retry optionnel)",[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",", ou → ",[352,1165,1166],{},"MutationFailure",[352,1168,1169],{},"onError",[352,1171,1162],{},[356,1173,1174,1175,1177,1178,1180,1181,1184,1185,603],{},"Retourne ",[352,1176,385],{}," en cas de succès, ",[352,1179,961],{}," en cas d'échec. Les erreurs ne sont ",[1076,1182,1183],{},"jamais"," re-levées à l'appelant : elles sont capturées dans l'état ",[352,1186,1166],{},[356,1188,1189,1192,1193,1196],{},[1076,1190,1191],{},"Lève"," ",[352,1194,1195],{},"StateError"," si le contrôleur a été disposé.",[815,1198,1200],{"id":1199},"reset",[352,1201,1199],{},[422,1203,1205],{"className":424,"code":1204,"language":426,"meta":427,"style":427},"void reset()\n",[352,1206,1207],{"__ignoreMap":427},[431,1208,1209,1212,1215],{"class":433,"line":434},[431,1210,1211],{"class":447},"void",[431,1213,1214],{"class":606}," reset",[431,1216,1217],{"class":440},"()\n",[356,1219,1220,1221,1224,1225,603],{},"Transition vers ",[352,1222,1223],{},"MutationIdle",". Supprime également ce contrôleur de ",[352,1226,1227],{},"tracker.activeMutations",[356,1229,1230,1192,1232,1196],{},[1076,1231,1191],{},[352,1233,1195],{},[815,1235,1237],{"id":1236},"dispose",[352,1238,1236],{},[422,1240,1242],{"className":424,"code":1241,"language":426,"meta":427,"style":427},"void dispose()\n",[352,1243,1244],{"__ignoreMap":427},[431,1245,1246,1248,1251],{"class":433,"line":434},[431,1247,1211],{"class":447},[431,1249,1250],{"class":606}," dispose",[431,1252,1217],{"class":440},[356,1254,1255],{},"Libère toutes les ressources et ferme le stream interne. Supprime silencieusement le contrôleur du tracker (aucun événement émis). Doit être appelé quand le contrôleur n'est plus nécessaire.",[356,1257,1258,1259,1261,1262,1264,1265,1267,1268,603],{},"Après ",[352,1260,1236],{},", tout appel à ",[352,1263,1093],{}," ou ",[352,1266,1199],{}," lève ",[352,1269,1195],{},[1271,1272],"hr",{},[348,1274,1276],{"id":1275},"mutationoptions",[352,1277,929],{},[356,1279,1280],{},"Callbacks de cycle de vie et configuration de retry par mutation.",[417,1282,420],{"id":1283},"constructeur-1",[422,1285,1287],{"className":424,"code":1286,"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,1288,1289,1298,1326,1370,1410,1460,1476,1504,1522],{"__ignoreMap":427},[431,1290,1291,1294,1296],{"class":433,"line":434},[431,1292,1293],{"class":447},"const",[431,1295,622],{"class":437},[431,1297,441],{"class":440},[431,1299,1300,1303,1305,1307,1309,1312,1314,1316,1319,1321,1324],{"class":433,"line":444},[431,1301,1302],{"class":437},"  Future",[431,1304,454],{"class":440},[431,1306,408],{"class":437},[431,1308,1112],{"class":440},[431,1310,1311],{"class":437},"Function",[431,1313,1117],{"class":440},[431,1315,395],{"class":437},[431,1317,1318],{"class":440}," variables)",[431,1320,492],{"class":467},[431,1322,1323],{"class":440}," onMutate",[431,1325,468],{"class":467},[431,1327,1328,1330,1332,1334,1336,1338,1340,1342,1345,1347,1350,1353,1355,1358,1360,1363,1365,1368],{"class":433,"line":471},[431,1329,1302],{"class":437},[431,1331,454],{"class":440},[431,1333,1211],{"class":447},[431,1335,1027],{"class":440},[431,1337,1311],{"class":437},[431,1339,1117],{"class":440},[431,1341,385],{"class":437},[431,1343,1344],{"class":440}," data",[431,1346,674],{"class":467},[431,1348,1349],{"class":437}," TVariables",[431,1351,1352],{"class":440}," variables",[431,1354,674],{"class":467},[431,1356,1357],{"class":437}," TContext",[431,1359,492],{"class":467},[431,1361,1362],{"class":440}," context)",[431,1364,492],{"class":467},[431,1366,1367],{"class":440}," onSuccess",[431,1369,468],{"class":467},[431,1371,1372,1374,1376,1378,1380,1382,1384,1386,1389,1391,1393,1395,1397,1399,1401,1403,1405,1408],{"class":433,"line":500},[431,1373,1302],{"class":437},[431,1375,454],{"class":440},[431,1377,1211],{"class":447},[431,1379,1027],{"class":440},[431,1381,1311],{"class":437},[431,1383,1117],{"class":440},[431,1385,526],{"class":437},[431,1387,1388],{"class":440}," error",[431,1390,674],{"class":467},[431,1392,1349],{"class":437},[431,1394,1352],{"class":440},[431,1396,674],{"class":467},[431,1398,1357],{"class":437},[431,1400,492],{"class":467},[431,1402,1362],{"class":440},[431,1404,492],{"class":467},[431,1406,1407],{"class":440}," onError",[431,1409,468],{"class":467},[431,1411,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1458],{"class":433,"line":513},[431,1413,1302],{"class":437},[431,1415,454],{"class":440},[431,1417,1211],{"class":447},[431,1419,1027],{"class":440},[431,1421,1311],{"class":437},[431,1423,1117],{"class":440},[431,1425,385],{"class":437},[431,1427,492],{"class":467},[431,1429,1344],{"class":440},[431,1431,674],{"class":467},[431,1433,1434],{"class":437}," Object",[431,1436,492],{"class":467},[431,1438,1388],{"class":440},[431,1440,674],{"class":467},[431,1442,1349],{"class":437},[431,1444,1352],{"class":440},[431,1446,674],{"class":467},[431,1448,1357],{"class":437},[431,1450,492],{"class":467},[431,1452,1362],{"class":440},[431,1454,492],{"class":467},[431,1456,1457],{"class":440}," onSettled",[431,1459,468],{"class":467},[431,1461,1462,1465,1468,1470,1474],{"class":433,"line":539},[431,1463,1464],{"class":437},"  int",[431,1466,1467],{"class":440}," retryCount ",[431,1469,559],{"class":467},[431,1471,1473],{"class":1472},"sbssI"," 0",[431,1475,468],{"class":467},[431,1477,1478,1481,1484,1486,1489,1492,1495,1497,1500,1502],{"class":433,"line":749},[431,1479,1480],{"class":437},"  Duration",[431,1482,1483],{"class":440}," retryDelay ",[431,1485,559],{"class":467},[431,1487,1488],{"class":447}," const",[431,1490,1491],{"class":437}," Duration",[431,1493,1494],{"class":440},"(seconds",[431,1496,591],{"class":467},[431,1498,1499],{"class":1472}," 1",[431,1501,806],{"class":440},[431,1503,468],{"class":467},[431,1505,1506,1509,1511,1513,1515,1517,1520],{"class":433,"line":757},[431,1507,1508],{"class":437},"  List",[431,1510,454],{"class":440},[431,1512,526],{"class":437},[431,1514,489],{"class":440},[431,1516,492],{"class":467},[431,1518,1519],{"class":440}," invalidates",[431,1521,468],{"class":467},[431,1523,1524],{"class":433,"line":769},[431,1525,542],{"class":440},[417,1527,813],{"id":1528},"propriétés-1",[815,1530,1532],{"id":1531},"onmutate",[352,1533,414],{},[422,1535,1537],{"className":424,"code":1536,"language":426,"meta":427,"style":427},"Future\u003CTContext?> Function(TVariables variables)? onMutate\n",[352,1538,1539],{"__ignoreMap":427},[431,1540,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559],{"class":433,"line":434},[431,1542,1105],{"class":437},[431,1544,454],{"class":440},[431,1546,408],{"class":437},[431,1548,1112],{"class":440},[431,1550,1311],{"class":437},[431,1552,1117],{"class":440},[431,1554,395],{"class":437},[431,1556,1318],{"class":440},[431,1558,492],{"class":467},[431,1560,1561],{"class":440}," onMutate\n",[356,1563,1564,1565,1567,1568,1570,1571,1573,1574,1577,1578,603],{},"Appelé avant le mutator. Retourne ",[352,1566,408],{}," : le snapshot optimiste passé à ",[352,1569,1169],{},"/",[352,1572,1162],{}," pour le rollback. Si ce callback lève, le mutator ",[1076,1575,1576],{},"n'est pas appelé"," et le contrôleur transite directement vers ",[352,1579,1166],{},[815,1581,1583],{"id":1582},"onsuccess",[352,1584,1159],{},[422,1586,1588],{"className":424,"code":1587,"language":426,"meta":427,"style":427},"Future\u003Cvoid> Function(TData data, TVariables variables, TContext? context)? onSuccess\n",[352,1589,1590],{"__ignoreMap":427},[431,1591,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624],{"class":433,"line":434},[431,1593,1105],{"class":437},[431,1595,454],{"class":440},[431,1597,1211],{"class":447},[431,1599,1027],{"class":440},[431,1601,1311],{"class":437},[431,1603,1117],{"class":440},[431,1605,385],{"class":437},[431,1607,1344],{"class":440},[431,1609,674],{"class":467},[431,1611,1349],{"class":437},[431,1613,1352],{"class":440},[431,1615,674],{"class":467},[431,1617,1357],{"class":437},[431,1619,492],{"class":467},[431,1621,1362],{"class":440},[431,1623,492],{"class":467},[431,1625,1626],{"class":440}," onSuccess\n",[356,1628,1629,1630,603],{},"Appelé après un mutator réussi, avant ",[352,1631,1162],{},[815,1633,1635],{"id":1634},"onerror",[352,1636,1169],{},[422,1638,1640],{"className":424,"code":1639,"language":426,"meta":427,"style":427},"Future\u003Cvoid> Function(Object error, TVariables variables, TContext? context)? onError\n",[352,1641,1642],{"__ignoreMap":427},[431,1643,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676],{"class":433,"line":434},[431,1645,1105],{"class":437},[431,1647,454],{"class":440},[431,1649,1211],{"class":447},[431,1651,1027],{"class":440},[431,1653,1311],{"class":437},[431,1655,1117],{"class":440},[431,1657,526],{"class":437},[431,1659,1388],{"class":440},[431,1661,674],{"class":467},[431,1663,1349],{"class":437},[431,1665,1352],{"class":440},[431,1667,674],{"class":467},[431,1669,1357],{"class":437},[431,1671,492],{"class":467},[431,1673,1362],{"class":440},[431,1675,492],{"class":467},[431,1677,1678],{"class":440}," onError\n",[356,1680,1681,1682,1684,1685,1688,1689,1691,1692,603],{},"Appelé après l'échec du mutator (après tous les retries), avant ",[352,1683,1162],{},". Utiliser ",[352,1686,1687],{},"context"," (le snapshot de ",[352,1690,414],{},") pour effectuer un rollback via ",[352,1693,1694],{},"client.restoreQueryData",[815,1696,1698],{"id":1697},"onsettled",[352,1699,1162],{},[422,1701,1703],{"className":424,"code":1702,"language":426,"meta":427,"style":427},"Future\u003Cvoid> Function(TData? data, Object? error, TVariables variables, TContext? context)? onSettled\n",[352,1704,1705],{"__ignoreMap":427},[431,1706,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749],{"class":433,"line":434},[431,1708,1105],{"class":437},[431,1710,454],{"class":440},[431,1712,1211],{"class":447},[431,1714,1027],{"class":440},[431,1716,1311],{"class":437},[431,1718,1117],{"class":440},[431,1720,385],{"class":437},[431,1722,492],{"class":467},[431,1724,1344],{"class":440},[431,1726,674],{"class":467},[431,1728,1434],{"class":437},[431,1730,492],{"class":467},[431,1732,1388],{"class":440},[431,1734,674],{"class":467},[431,1736,1349],{"class":437},[431,1738,1352],{"class":440},[431,1740,674],{"class":467},[431,1742,1357],{"class":437},[431,1744,492],{"class":467},[431,1746,1362],{"class":440},[431,1748,492],{"class":467},[431,1750,1751],{"class":440}," onSettled\n",[356,1753,1754,1755,1758,1759,1762],{},"Appelé après chaque résultat : succès ou échec. ",[352,1756,1757],{},"data"," est non-null en cas de succès ; ",[352,1760,1761],{},"error"," est non-null en cas d'échec.",[815,1764,1766],{"id":1765},"retrycount",[352,1767,1768],{},"retryCount",[422,1770,1772],{"className":424,"code":1771,"language":426,"meta":427,"style":427},"final int retryCount\n",[352,1773,1774],{"__ignoreMap":427},[431,1775,1776,1778,1781],{"class":433,"line":434},[431,1777,553],{"class":447},[431,1779,1780],{"class":437}," int",[431,1782,1783],{"class":440}," retryCount\n",[356,1785,1786,1787,1790,1791,603],{},"Nombre de tentatives de retry après l'échec initial. Défaut : ",[352,1788,1789],{},"0"," (pas de retry). Chaque retry utilise un backoff exponentiel : ",[352,1792,1793],{},"retryDelay * 2^tentative",[815,1795,1797],{"id":1796},"retrydelay",[352,1798,1799],{},"retryDelay",[422,1801,1803],{"className":424,"code":1802,"language":426,"meta":427,"style":427},"final Duration retryDelay\n",[352,1804,1805],{"__ignoreMap":427},[431,1806,1807,1809,1811],{"class":433,"line":434},[431,1808,553],{"class":447},[431,1810,1491],{"class":437},[431,1812,1813],{"class":440}," retryDelay\n",[356,1815,1816,1817,1820,1821],{},"Délai de base pour le premier retry. Défaut : ",[352,1818,1819],{},"Duration(seconds: 1)",". Les retries suivants doublent : ",[352,1822,1823],{},"1s, 2s, 4s, ...",[815,1825,1827],{"id":1826},"invalidates",[352,1828,1826],{},[422,1830,1832],{"className":424,"code":1831,"language":426,"meta":427,"style":427},"final List\u003CObject>? invalidates\n",[352,1833,1834],{"__ignoreMap":427},[431,1835,1836,1838,1841,1843,1845,1847,1849],{"class":433,"line":434},[431,1837,553],{"class":447},[431,1839,1840],{"class":437}," List",[431,1842,454],{"class":440},[431,1844,526],{"class":437},[431,1846,489],{"class":440},[431,1848,492],{"class":467},[431,1850,1851],{"class":440}," invalidates\n",[356,1853,1854,1855,1858,1859,1861],{},"Liste des clés de requête à invalider automatiquement après une mutation réussie. Chaque clé est passée à ",[352,1856,1857],{},"QoraClient.invalidate"," après l'exécution de ",[352,1860,1159],{},", déclenchant un refetch des requêtes actives dont la clé correspond.",[356,1863,1864],{},"Remplace le pattern manuel courant :",[422,1866,1868],{"className":424,"code":1867,"language":426,"meta":427,"style":427},"// Avant : invalidation manuelle dans onSuccess\nonSuccess: (data, vars, _) async { client.invalidate(['posts']); }\n\n// Après : automatique via les options\ninvalidates: [['posts']],\n",[352,1869,1870,1876,1916,1922,1927],{"__ignoreMap":427},[431,1871,1872],{"class":433,"line":434},[431,1873,1875],{"class":1874},"sHwdD","// Avant : invalidation manuelle dans onSuccess\n",[431,1877,1878,1880,1882,1885,1887,1890,1892,1895,1897,1900,1902,1904,1906,1908,1910,1913],{"class":433,"line":444},[431,1879,1159],{"class":440},[431,1881,591],{"class":467},[431,1883,1884],{"class":440}," (data",[431,1886,674],{"class":467},[431,1888,1889],{"class":440}," vars",[431,1891,674],{"class":467},[431,1893,1894],{"class":440}," _) ",[431,1896,638],{"class":637},[431,1898,1899],{"class":440}," { client",[431,1901,603],{"class":467},[431,1903,738],{"class":606},[431,1905,652],{"class":440},[431,1907,656],{"class":655},[431,1909,659],{"class":440},[431,1911,1912],{"class":467},";",[431,1914,1915],{"class":440}," }\n",[431,1917,1918],{"class":433,"line":471},[431,1919,1921],{"emptyLinePlaceholder":1920},true,"\n",[431,1923,1924],{"class":433,"line":500},[431,1925,1926],{"class":1874},"// Après : automatique via les options\n",[431,1928,1929,1931,1933,1936,1938,1941],{"class":433,"line":513},[431,1930,1826],{"class":440},[431,1932,591],{"class":467},[431,1934,1935],{"class":440}," [[",[431,1937,656],{"class":655},[431,1939,1940],{"class":440},"]]",[431,1942,468],{"class":467},[356,1944,1945],{},"Fonctionne également avec la relecture de la file hors-ligne, les requêtes sont invalidées lors de la relecture réussie, pas lors de l'émission optimiste initiale.",[356,1947,1948,1949,1951,1952,1955,1956,1958,1959,845,1961,1964,1965,1967],{},"Nécessite un ",[352,1950,202],{}," ou un callback ",[352,1953,1954],{},"invalidateQuery"," câblé via ",[352,1957,354],{},". ",[352,1960,113],{},[352,1962,1963],{},"useMutation"," fournissent cela automatiquement quand un ancêtre ",[352,1966,103],{}," est présent.",[815,1969,1971],{"id":1970},"invalidatestags",[352,1972,1973],{},"invalidatesTags",[422,1975,1977],{"className":424,"code":1976,"language":426,"meta":427,"style":427},"final List\u003CQueryTag>? invalidatesTags\n",[352,1978,1979],{"__ignoreMap":427},[431,1980,1981,1983,1985,1987,1990,1992,1994],{"class":433,"line":434},[431,1982,553],{"class":447},[431,1984,1840],{"class":437},[431,1986,454],{"class":440},[431,1988,1989],{"class":437},"QueryTag",[431,1991,489],{"class":440},[431,1993,492],{"class":467},[431,1995,1996],{"class":440}," invalidatesTags\n",[356,1998,1999,1192,2002],{},[1076,2000,2001],{},"Défaut :",[352,2003,961],{},[356,2005,2006,2007,2009],{},"Tags à invalider après une mutation réussie. Chaque requête qui fournit un tag correspondant est automatiquement re-récupérée. Fonctionne parallèlement à ",[352,2008,1826],{}," (qui cible directement les clés de requête) et est traité après lui.",[356,2011,2012,2013,2016,2017,2020],{},"La correspondance générique s'applique : invalider ",[352,2014,2015],{},"QueryTag('post')"," re-récupère TOUTES les requêtes qui fournissent un tag de type ",[352,2018,2019],{},"'post'",", indépendamment de l'id.",[422,2022,2024],{"className":424,"code":2023,"language":426,"meta":427,"style":427},"// Re-récupère TOUTES les requêtes fournissant un tag 'post' (n'importe quel id).\nMutationOptions(\n  invalidatesTags: [QueryTag('post')],\n)\n\n// Re-récupère seulement les requêtes fournissant le tag spécifique 'post:123'.\nMutationOptions(\n  invalidatesTags: [QueryTag('post', '123')],\n)\n",[352,2025,2026,2031,2037,2058,2063,2067,2072,2078,2101],{"__ignoreMap":427},[431,2027,2028],{"class":433,"line":434},[431,2029,2030],{"class":1874},"// Re-récupère TOUTES les requêtes fournissant un tag 'post' (n'importe quel id).\n",[431,2032,2033,2035],{"class":433,"line":444},[431,2034,929],{"class":437},[431,2036,625],{"class":440},[431,2038,2039,2042,2044,2047,2049,2051,2053,2056],{"class":433,"line":471},[431,2040,2041],{"class":440},"  invalidatesTags",[431,2043,591],{"class":467},[431,2045,2046],{"class":440}," [",[431,2048,1989],{"class":437},[431,2050,1117],{"class":440},[431,2052,2019],{"class":655},[431,2054,2055],{"class":440},")]",[431,2057,468],{"class":467},[431,2059,2060],{"class":433,"line":500},[431,2061,2062],{"class":440},")\n",[431,2064,2065],{"class":433,"line":513},[431,2066,1921],{"emptyLinePlaceholder":1920},[431,2068,2069],{"class":433,"line":539},[431,2070,2071],{"class":1874},"// Re-récupère seulement les requêtes fournissant le tag spécifique 'post:123'.\n",[431,2073,2074,2076],{"class":433,"line":749},[431,2075,929],{"class":437},[431,2077,625],{"class":440},[431,2079,2080,2082,2084,2086,2088,2090,2092,2094,2097,2099],{"class":433,"line":757},[431,2081,2041],{"class":440},[431,2083,591],{"class":467},[431,2085,2046],{"class":440},[431,2087,1989],{"class":437},[431,2089,1117],{"class":440},[431,2091,2019],{"class":655},[431,2093,674],{"class":467},[431,2095,2096],{"class":655}," '123'",[431,2098,2055],{"class":440},[431,2100,468],{"class":467},[431,2102,2103],{"class":433,"line":769},[431,2104,2062],{"class":440},[356,2106,1948,2107,1951,2109,1955,2112,1958,2114,845,2116,1964,2118,1967],{},[352,2108,202],{},[352,2110,2111],{},"invalidateTags",[352,2113,354],{},[352,2115,113],{},[352,2117,1963],{},[352,2119,103],{},[1271,2121],{},[348,2123,2125],{"id":2124},"mutationstate",[352,2126,1016],{},[356,2128,2129],{},"Hiérarchie de classes sealed représentant tous les états possibles d'une mutation.",[422,2131,2136],{"className":2132,"code":2134,"language":2135,"meta":427},[2133],"language-text","sealed MutationState\n  ├── MutationIdle\n  ├── MutationPending   { variables }\n  ├── MutationSuccess   { data, variables }\n  └── MutationFailure   { error, stackTrace?, variables }\n","text",[352,2137,2134],{"__ignoreMap":427},[417,2139,2141],{"id":2140},"getters-communs","Getters communs",[356,2143,2144],{},"Disponibles sur toutes les variantes :",[360,2146,2147,2160],{},[363,2148,2149],{},[366,2150,2151,2154,2157],{},[369,2152,2153],{},"Getter",[369,2155,2156],{},"Type",[369,2158,2159],{},"Description",[376,2161,2162,2181,2198,2215,2232,2249,2265],{},[366,2163,2164,2169,2174],{},[381,2165,2166],{},[352,2167,2168],{},"isIdle",[381,2170,2171],{},[352,2172,2173],{},"bool",[381,2175,2176,885,2179],{},[352,2177,2178],{},"true",[352,2180,1223],{},[366,2182,2183,2188,2192],{},[381,2184,2185],{},[352,2186,2187],{},"isPending",[381,2189,2190],{},[352,2191,2173],{},[381,2193,2194,885,2196],{},[352,2195,2178],{},[352,2197,1144],{},[366,2199,2200,2205,2209],{},[381,2201,2202],{},[352,2203,2204],{},"isSuccess",[381,2206,2207],{},[352,2208,2173],{},[381,2210,2211,885,2213],{},[352,2212,2178],{},[352,2214,1155],{},[366,2216,2217,2222,2226],{},[381,2218,2219],{},[352,2220,2221],{},"isError",[381,2223,2224],{},[352,2225,2173],{},[381,2227,2228,885,2230],{},[352,2229,2178],{},[352,2231,1166],{},[366,2233,2234,2239,2244],{},[381,2235,2236],{},[352,2237,2238],{},"dataOrNull",[381,2240,2241],{},[352,2242,2243],{},"TData?",[381,2245,2246,2247],{},"Non-null uniquement dans ",[352,2248,1155],{},[366,2250,2251,2256,2261],{},[381,2252,2253],{},[352,2254,2255],{},"errorOrNull",[381,2257,2258],{},[352,2259,2260],{},"Object?",[381,2262,2246,2263],{},[352,2264,1166],{},[366,2266,2267,2272,2277],{},[381,2268,2269],{},[352,2270,2271],{},"variablesOrNull",[381,2273,2274],{},[352,2275,2276],{},"TVariables?",[381,2278,2279,2281,2282],{},[352,2280,961],{}," uniquement dans ",[352,2283,1223],{},[417,2285,2287],{"id":2286},"when",[352,2288,2286],{},[422,2290,2292],{"className":424,"code":2291,"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,2293,2294,2303,2321,2340,2364,2398],{"__ignoreMap":427},[431,2295,2296,2298,2301],{"class":433,"line":434},[431,2297,1211],{"class":447},[431,2299,2300],{"class":637}," when",[431,2302,441],{"class":440},[431,2304,2305,2308,2311,2314,2316,2319],{"class":433,"line":444},[431,2306,2307],{"class":447},"  void",[431,2309,2310],{"class":437}," Function",[431,2312,2313],{"class":440},"()",[431,2315,492],{"class":467},[431,2317,2318],{"class":440}," onIdle",[431,2320,468],{"class":467},[431,2322,2323,2325,2327,2329,2331,2333,2335,2338],{"class":433,"line":471},[431,2324,2307],{"class":447},[431,2326,2310],{"class":437},[431,2328,1117],{"class":440},[431,2330,395],{"class":437},[431,2332,1318],{"class":440},[431,2334,492],{"class":467},[431,2336,2337],{"class":440}," onPending",[431,2339,468],{"class":467},[431,2341,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362],{"class":433,"line":500},[431,2343,2307],{"class":447},[431,2345,2310],{"class":437},[431,2347,1117],{"class":440},[431,2349,385],{"class":437},[431,2351,1344],{"class":440},[431,2353,674],{"class":467},[431,2355,1349],{"class":437},[431,2357,1318],{"class":440},[431,2359,492],{"class":467},[431,2361,1367],{"class":440},[431,2363,468],{"class":467},[431,2365,2366,2368,2370,2372,2374,2376,2378,2381,2383,2386,2388,2390,2392,2394,2396],{"class":433,"line":513},[431,2367,2307],{"class":447},[431,2369,2310],{"class":437},[431,2371,1117],{"class":440},[431,2373,526],{"class":437},[431,2375,1388],{"class":440},[431,2377,674],{"class":467},[431,2379,2380],{"class":437}," StackTrace",[431,2382,492],{"class":467},[431,2384,2385],{"class":440}," stackTrace",[431,2387,674],{"class":467},[431,2389,1349],{"class":437},[431,2391,1318],{"class":440},[431,2393,492],{"class":467},[431,2395,1407],{"class":440},[431,2397,468],{"class":467},[431,2399,2400],{"class":433,"line":539},[431,2401,542],{"class":440},[356,2403,2404],{},"Appelle un callback pour la variante correspondante. Les variantes non gérées sont ignorées silencieusement.",[417,2406,2408],{"id":2407},"maybewhen",[352,2409,2410],{},"maybeWhen",[422,2412,2414],{"className":424,"code":2413,"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,2415,2416,2431,2445,2460,2478,2500,2527],{"__ignoreMap":427},[431,2417,2418,2421,2424,2426,2428],{"class":433,"line":434},[431,2419,2420],{"class":437},"R",[431,2422,2423],{"class":606}," maybeWhen",[431,2425,454],{"class":440},[431,2427,2420],{"class":437},[431,2429,2430],{"class":440},">({\n",[431,2432,2433,2435,2438,2440,2443],{"class":433,"line":444},[431,2434,448],{"class":447},[431,2436,2437],{"class":437}," R",[431,2439,2310],{"class":437},[431,2441,2442],{"class":440},"() orElse",[431,2444,468],{"class":467},[431,2446,2447,2450,2452,2454,2456,2458],{"class":433,"line":471},[431,2448,2449],{"class":437},"  R",[431,2451,2310],{"class":437},[431,2453,2313],{"class":440},[431,2455,492],{"class":467},[431,2457,2318],{"class":440},[431,2459,468],{"class":467},[431,2461,2462,2464,2466,2468,2470,2472,2474,2476],{"class":433,"line":500},[431,2463,2449],{"class":437},[431,2465,2310],{"class":437},[431,2467,1117],{"class":440},[431,2469,395],{"class":437},[431,2471,806],{"class":440},[431,2473,492],{"class":467},[431,2475,2337],{"class":440},[431,2477,468],{"class":467},[431,2479,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498],{"class":433,"line":513},[431,2481,2449],{"class":437},[431,2483,2310],{"class":437},[431,2485,1117],{"class":440},[431,2487,385],{"class":437},[431,2489,674],{"class":467},[431,2491,1349],{"class":437},[431,2493,806],{"class":440},[431,2495,492],{"class":467},[431,2497,1367],{"class":440},[431,2499,468],{"class":467},[431,2501,2502,2504,2506,2508,2510,2512,2514,2517,2519,2521,2523,2525],{"class":433,"line":539},[431,2503,2449],{"class":437},[431,2505,2310],{"class":437},[431,2507,1117],{"class":440},[431,2509,526],{"class":437},[431,2511,674],{"class":467},[431,2513,2380],{"class":437},[431,2515,2516],{"class":467},"?,",[431,2518,1349],{"class":437},[431,2520,806],{"class":440},[431,2522,492],{"class":467},[431,2524,1407],{"class":440},[431,2526,468],{"class":467},[431,2528,2529],{"class":433,"line":749},[431,2530,542],{"class":440},[356,2532,2533,2534,2537],{},"Retourne la valeur du callback correspondant, ou ",[352,2535,2536],{},"orElse()"," si aucun ne correspond.",[417,2539,2541,2544],{"id":2540},"fold-extension",[352,2542,2543],{},"fold"," (extension)",[422,2546,2548],{"className":424,"code":2547,"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,2549,2550,2563,2576,2593,2614,2639],{"__ignoreMap":427},[431,2551,2552,2554,2557,2559,2561],{"class":433,"line":434},[431,2553,2420],{"class":437},[431,2555,2556],{"class":606}," fold",[431,2558,454],{"class":440},[431,2560,2420],{"class":437},[431,2562,2430],{"class":440},[431,2564,2565,2567,2569,2571,2574],{"class":433,"line":444},[431,2566,448],{"class":447},[431,2568,2437],{"class":437},[431,2570,2310],{"class":437},[431,2572,2573],{"class":440},"() onIdle",[431,2575,468],{"class":467},[431,2577,2578,2580,2582,2584,2586,2588,2591],{"class":433,"line":471},[431,2579,448],{"class":447},[431,2581,2437],{"class":437},[431,2583,2310],{"class":437},[431,2585,1117],{"class":440},[431,2587,395],{"class":437},[431,2589,2590],{"class":440},") onPending",[431,2592,468],{"class":467},[431,2594,2595,2597,2599,2601,2603,2605,2607,2609,2612],{"class":433,"line":500},[431,2596,448],{"class":447},[431,2598,2437],{"class":437},[431,2600,2310],{"class":437},[431,2602,1117],{"class":440},[431,2604,385],{"class":437},[431,2606,674],{"class":467},[431,2608,1349],{"class":437},[431,2610,2611],{"class":440},") onSuccess",[431,2613,468],{"class":467},[431,2615,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2637],{"class":433,"line":513},[431,2617,448],{"class":447},[431,2619,2437],{"class":437},[431,2621,2310],{"class":437},[431,2623,1117],{"class":440},[431,2625,526],{"class":437},[431,2627,674],{"class":467},[431,2629,2380],{"class":437},[431,2631,2516],{"class":467},[431,2633,1349],{"class":437},[431,2635,2636],{"class":440},") onError",[431,2638,468],{"class":467},[431,2640,2641],{"class":433,"line":539},[431,2642,542],{"class":440},[356,2644,2645],{},"Mapper exhaustif : le compilateur impose que chaque variante soit gérée.",[422,2647,2650],{"className":424,"code":2648,"filename":2649,"language":426,"meta":427,"style":427},"final label = state.fold(\n  onIdle: () => 'Créer',\n  onPending: (_) => 'Création...',\n  onSuccess: (post, _) => 'Créé : ${post.title}',\n  onError: (err, _, __) => 'Erreur : $err',\n);\n","create_post_screen.dart",[352,2651,2652,2670,2687,2704,2742,2775],{"__ignoreMap":427},[431,2653,2654,2656,2659,2661,2664,2666,2668],{"class":433,"line":434},[431,2655,553],{"class":447},[431,2657,2658],{"class":440}," label ",[431,2660,559],{"class":467},[431,2662,2663],{"class":440}," state",[431,2665,603],{"class":467},[431,2667,2543],{"class":606},[431,2669,625],{"class":440},[431,2671,2672,2675,2677,2680,2682,2685],{"class":433,"line":444},[431,2673,2674],{"class":440},"  onIdle",[431,2676,591],{"class":467},[431,2678,2679],{"class":440}," () ",[431,2681,597],{"class":467},[431,2683,2684],{"class":655}," 'Créer'",[431,2686,468],{"class":467},[431,2688,2689,2692,2694,2697,2699,2702],{"class":433,"line":471},[431,2690,2691],{"class":440},"  onPending",[431,2693,591],{"class":467},[431,2695,2696],{"class":440}," (_) ",[431,2698,597],{"class":467},[431,2700,2701],{"class":655}," 'Création...'",[431,2703,468],{"class":467},[431,2705,2706,2709,2711,2714,2716,2718,2720,2723,2726,2730,2732,2735,2737,2740],{"class":433,"line":500},[431,2707,2708],{"class":440},"  onSuccess",[431,2710,591],{"class":467},[431,2712,2713],{"class":440}," (post",[431,2715,674],{"class":467},[431,2717,1894],{"class":440},[431,2719,597],{"class":467},[431,2721,2722],{"class":655}," 'Créé : ",[431,2724,2725],{"class":440},"${",[431,2727,2729],{"class":2728},"sHdIc","post",[431,2731,603],{"class":440},[431,2733,2734],{"class":2728},"title",[431,2736,798],{"class":440},[431,2738,2739],{"class":655},"'",[431,2741,468],{"class":467},[431,2743,2744,2747,2749,2751,2753,2755,2757,2760,2762,2765,2768,2771,2773],{"class":433,"line":513},[431,2745,2746],{"class":440},"  onError",[431,2748,591],{"class":467},[431,2750,671],{"class":440},[431,2752,674],{"class":467},[431,2754,677],{"class":440},[431,2756,674],{"class":467},[431,2758,2759],{"class":440}," __) ",[431,2761,597],{"class":467},[431,2763,2764],{"class":655}," 'Erreur : ",[431,2766,2767],{"class":440},"$",[431,2769,2770],{"class":2728},"err",[431,2772,2739],{"class":655},[431,2774,468],{"class":467},[431,2776,2777,2779],{"class":433,"line":539},[431,2778,806],{"class":440},[431,2780,809],{"class":467},[417,2782,2784,2544],{"id":2783},"status-extension",[352,2785,2786],{},"status",[422,2788,2790],{"className":424,"code":2789,"language":426,"meta":427,"style":427},"MutationStatus get status\n",[352,2791,2792],{"__ignoreMap":427},[431,2793,2794,2797,2800],{"class":433,"line":434},[431,2795,2796],{"class":437},"MutationStatus",[431,2798,2799],{"class":467}," get",[431,2801,2802],{"class":440}," status\n",[356,2804,2805,2806,2808,2809,603],{},"Retourne la valeur d'enum ",[352,2807,2796],{}," à grain grossier : ",[352,2810,2811],{},"idle | pending | success | error",[1271,2813],{},[348,2815,2817],{"id":2816},"mutationstatus",[352,2818,2796],{},[422,2820,2822],{"className":424,"code":2821,"language":426,"meta":427,"style":427},"enum MutationStatus { idle, pending, success, error }\n",[352,2823,2824],{"__ignoreMap":427},[431,2825,2826,2829,2832,2835,2837,2840,2842,2845,2847],{"class":433,"line":434},[431,2827,2828],{"class":467},"enum",[431,2830,2831],{"class":437}," MutationStatus",[431,2833,2834],{"class":440}," { idle",[431,2836,674],{"class":467},[431,2838,2839],{"class":440}," pending",[431,2841,674],{"class":467},[431,2843,2844],{"class":440}," success",[431,2846,674],{"class":467},[431,2848,2849],{"class":440}," error }\n",[356,2851,2852,2853,2855],{},"Statut à grain grossier utilisé par ",[352,2854,1000],{}," pour éviter les problèmes d'effacement de type générique au niveau du bus d'événements.",[1271,2857],{},[348,2859,2861],{"id":2860},"mutationupdate",[352,2862,1000],{},[356,2864,2865,2866,2869,2870,603],{},"Snapshot sans type d'une transition d'état de mutation. Émis par ",[352,2867,2868],{},"QoraClient.mutationEvents"," à chaque changement d'état de ",[352,2871,354],{},[417,2873,813],{"id":2874},"propriétés-2",[360,2876,2877,2888],{},[363,2878,2879],{},[366,2880,2881,2884,2886],{},[369,2882,2883],{},"Propriété",[369,2885,2156],{},[369,2887,2159],{},[376,2889,2890,2906,2919,2932,2945,2964,2979],{},[366,2891,2892,2897,2901],{},[381,2893,2894],{},[352,2895,2896],{},"mutatorId",[381,2898,2899],{},[352,2900,521],{},[381,2902,2903,2904,806],{},"Identifiant unique du contrôleur (",[352,2905,840],{},[366,2907,2908,2912,2916],{},[381,2909,2910],{},[352,2911,2786],{},[381,2913,2914],{},[352,2915,2796],{},[381,2917,2918],{},"Statut à grain grossier au moment de l'émission",[366,2920,2921,2925,2929],{},[381,2922,2923],{},[352,2924,1757],{},[381,2926,2927],{},[352,2928,2260],{},[381,2930,2931],{},"Données de succès (type effacé). Non-null en cas de succès.",[366,2933,2934,2938,2942],{},[381,2935,2936],{},[352,2937,1761],{},[381,2939,2940],{},[352,2941,2260],{},[381,2943,2944],{},"Erreur. Non-null en cas d'échec.",[366,2946,2947,2952,2956],{},[381,2948,2949],{},[352,2950,2951],{},"variables",[381,2953,2954],{},[352,2955,2260],{},[381,2957,2958,2959,1958,2961,2963],{},"Variables passées à ",[352,2960,401],{},[352,2962,961],{}," quand idle.",[366,2965,2966,2971,2976],{},[381,2967,2968],{},[352,2969,2970],{},"timestamp",[381,2972,2973],{},[352,2974,2975],{},"DateTime",[381,2977,2978],{},"Quand cet événement a été émis",[366,2980,2981,2985,2990],{},[381,2982,2983],{},[352,2984,965],{},[381,2986,2987],{},[352,2988,2989],{},"Map\u003CString, Object?>?",[381,2991,2992,2993],{},"Transmis depuis ",[352,2994,2995],{},"MutationController.metadata",[417,2997,2999],{"id":2998},"getters","Getters",[360,3001,3002,3012],{},[363,3003,3004],{},[366,3005,3006,3008,3010],{},[369,3007,2153],{},[369,3009,2156],{},[369,3011,2159],{},[376,3013,3014,3029,3044,3059,3074],{},[366,3015,3016,3020,3024],{},[381,3017,3018],{},[352,3019,2168],{},[381,3021,3022],{},[352,3023,2173],{},[381,3025,3026],{},[352,3027,3028],{},"status == MutationStatus.idle",[366,3030,3031,3035,3039],{},[381,3032,3033],{},[352,3034,2187],{},[381,3036,3037],{},[352,3038,2173],{},[381,3040,3041],{},[352,3042,3043],{},"status == MutationStatus.pending",[366,3045,3046,3050,3054],{},[381,3047,3048],{},[352,3049,2204],{},[381,3051,3052],{},[352,3053,2173],{},[381,3055,3056],{},[352,3057,3058],{},"status == MutationStatus.success",[366,3060,3061,3065,3069],{},[381,3062,3063],{},[352,3064,2221],{},[381,3066,3067],{},[352,3068,2173],{},[381,3070,3071],{},[352,3072,3073],{},"status == MutationStatus.error",[366,3075,3076,3081,3085],{},[381,3077,3078],{},[352,3079,3080],{},"isFinished",[381,3082,3083],{},[352,3084,2173],{},[381,3086,3087,3090,3091,3093,3094],{},[352,3088,3089],{},"isSuccess || isError"," : utilisé par ",[352,3092,202],{}," pour purger automatiquement ",[352,3095,3096],{},"activeMutations",[1271,3098],{},[348,3100,3102],{"id":3101},"mutationtracker",[352,3103,3104],{},"MutationTracker",[356,3106,3107,3108,3110,3111,3113],{},"Interface abstraite implémentée par ",[352,3109,202],{},". Découple ",[352,3112,354],{}," du client pour éviter les imports circulaires.",[422,3115,3117],{"className":424,"code":3116,"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,3118,3119,3135,3153,3163,3183,3204,3211,3215,3231],{"__ignoreMap":427},[431,3120,3121,3124,3127,3130,3132],{"class":433,"line":434},[431,3122,3123],{"class":467},"abstract",[431,3125,3126],{"class":467}," interface",[431,3128,3129],{"class":467}," class",[431,3131,947],{"class":437},[431,3133,3134],{"class":440}," {\n",[431,3136,3137,3139,3142,3144,3146,3148,3150],{"class":433,"line":444},[431,3138,2307],{"class":447},[431,3140,3141],{"class":606}," trackMutation",[431,3143,454],{"class":440},[431,3145,385],{"class":437},[431,3147,459],{"class":440},[431,3149,395],{"class":437},[431,3151,3152],{"class":440},">(\n",[431,3154,3155,3158,3161],{"class":433,"line":471},[431,3156,3157],{"class":437},"    String",[431,3159,3160],{"class":440}," id",[431,3162,468],{"class":467},[431,3164,3165,3168,3170,3172,3174,3176,3179,3181],{"class":433,"line":500},[431,3166,3167],{"class":437},"    MutationState",[431,3169,454],{"class":440},[431,3171,385],{"class":437},[431,3173,459],{"class":440},[431,3175,395],{"class":437},[431,3177,3178],{"class":440},"> state",[431,3180,674],{"class":467},[431,3182,3134],{"class":440},[431,3184,3185,3188,3190,3192,3194,3196,3198,3200,3202],{"class":433,"line":513},[431,3186,3187],{"class":437},"    Map",[431,3189,454],{"class":440},[431,3191,521],{"class":437},[431,3193,459],{"class":440},[431,3195,526],{"class":437},[431,3197,529],{"class":440},[431,3199,492],{"class":467},[431,3201,534],{"class":440},[431,3203,468],{"class":467},[431,3205,3206,3209],{"class":433,"line":539},[431,3207,3208],{"class":440},"  })",[431,3210,809],{"class":467},[431,3212,3213],{"class":433,"line":749},[431,3214,1921],{"emptyLinePlaceholder":1920},[431,3216,3217,3219,3222,3224,3226,3229],{"class":433,"line":757},[431,3218,2307],{"class":447},[431,3220,3221],{"class":606}," untrackMutation",[431,3223,1117],{"class":440},[431,3225,521],{"class":437},[431,3227,3228],{"class":440}," id)",[431,3230,809],{"class":467},[431,3232,3233],{"class":433,"line":769},[431,3234,3235],{"class":440},"}\n",[356,3237,3238,3239,3241],{},"Implémenter ",[352,3240,3104],{}," pour construire des DevTools personnalisés, un middleware de journalisation ou des espions de test :",[422,3243,3246],{"className":424,"code":3244,"filename":3245,"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] disposé');\n}\n","mutation_logger.dart",[352,3247,3248,3263,3268,3284,3292,3310,3330,3335,3382,3387,3391,3396,3430],{"__ignoreMap":427},[431,3249,3250,3253,3256,3259,3261],{"class":433,"line":434},[431,3251,3252],{"class":467},"class",[431,3254,3255],{"class":437}," MutationLogger",[431,3257,3258],{"class":467}," implements",[431,3260,947],{"class":437},[431,3262,3134],{"class":440},[431,3264,3265],{"class":433,"line":444},[431,3266,3267],{"class":447},"  @override\n",[431,3269,3270,3272,3274,3276,3278,3280,3282],{"class":433,"line":471},[431,3271,2307],{"class":447},[431,3273,3141],{"class":606},[431,3275,454],{"class":440},[431,3277,385],{"class":437},[431,3279,459],{"class":440},[431,3281,395],{"class":437},[431,3283,3152],{"class":440},[431,3285,3286,3288,3290],{"class":433,"line":500},[431,3287,3157],{"class":437},[431,3289,3160],{"class":440},[431,3291,468],{"class":467},[431,3293,3294,3296,3298,3300,3302,3304,3306,3308],{"class":433,"line":513},[431,3295,3167],{"class":437},[431,3297,454],{"class":440},[431,3299,385],{"class":437},[431,3301,459],{"class":440},[431,3303,395],{"class":437},[431,3305,3178],{"class":440},[431,3307,674],{"class":467},[431,3309,3134],{"class":440},[431,3311,3312,3314,3316,3318,3320,3322,3324,3326,3328],{"class":433,"line":539},[431,3313,3187],{"class":437},[431,3315,454],{"class":440},[431,3317,521],{"class":437},[431,3319,459],{"class":440},[431,3321,526],{"class":437},[431,3323,529],{"class":440},[431,3325,492],{"class":467},[431,3327,534],{"class":440},[431,3329,468],{"class":467},[431,3331,3332],{"class":433,"line":749},[431,3333,3334],{"class":440},"  }) {\n",[431,3336,3337,3340,3342,3345,3347,3349,3352,3354,3356,3358,3361,3363,3366,3368,3371,3374,3376,3378,3380],{"class":433,"line":757},[431,3338,3339],{"class":606},"    print",[431,3341,1117],{"class":440},[431,3343,3344],{"class":655},"'[",[431,3346,2767],{"class":440},[431,3348,817],{"class":2728},[431,3350,3351],{"class":655},"] → ",[431,3353,2725],{"class":440},[431,3355,1004],{"class":2728},[431,3357,603],{"class":440},[431,3359,3360],{"class":2728},"runtimeType",[431,3362,798],{"class":440},[431,3364,3365],{"class":440}," ${",[431,3367,965],{"class":2728},[431,3369,3370],{"class":440}," ?? ",[431,3372,3373],{"class":655},"''",[431,3375,798],{"class":440},[431,3377,2739],{"class":655},[431,3379,806],{"class":440},[431,3381,809],{"class":467},[431,3383,3384],{"class":433,"line":769},[431,3385,3386],{"class":440},"  }\n",[431,3388,3389],{"class":433,"line":803},[431,3390,1921],{"emptyLinePlaceholder":1920},[431,3392,3394],{"class":433,"line":3393},11,[431,3395,3267],{"class":447},[431,3397,3399,3401,3403,3405,3407,3410,3412,3415,3417,3419,3421,3423,3426,3428],{"class":433,"line":3398},12,[431,3400,2307],{"class":447},[431,3402,3221],{"class":606},[431,3404,1117],{"class":440},[431,3406,521],{"class":437},[431,3408,3409],{"class":440}," id) ",[431,3411,597],{"class":467},[431,3413,3414],{"class":606}," print",[431,3416,1117],{"class":440},[431,3418,3344],{"class":655},[431,3420,2767],{"class":440},[431,3422,817],{"class":2728},[431,3424,3425],{"class":655},"] disposé'",[431,3427,806],{"class":440},[431,3429,809],{"class":467},[431,3431,3433],{"class":433,"line":3432},13,[431,3434,3235],{"class":440},[1271,3436],{},[348,3438,3440,3442],{"id":3439},"qoraclient-observabilité-des-mutations",[352,3441,202],{}," : Observabilité des mutations",[356,3444,3445,3447,3448,3450],{},[352,3446,202],{}," implémente ",[352,3449,3104],{}," et expose deux surfaces pour observer les mutations suivies.",[417,3452,3454],{"id":3453},"mutationevents",[352,3455,3456],{},"mutationEvents",[422,3458,3460],{"className":424,"code":3459,"language":426,"meta":427,"style":427},"Stream\u003CMutationUpdate> get mutationEvents\n",[352,3461,3462],{"__ignoreMap":427},[431,3463,3464,3466,3468,3470,3472,3474],{"class":433,"line":434},[431,3465,1051],{"class":437},[431,3467,454],{"class":440},[431,3469,1000],{"class":437},[431,3471,1027],{"class":440},[431,3473,1030],{"class":467},[431,3475,3476],{"class":440}," mutationEvents\n",[356,3478,3479,3480,3482,3483,3485,3486,603],{},"Stream broadcast en temps réel de chaque ",[352,3481,1000],{}," de tous les contrôleurs suivis. Émet à chaque transition d'état : y compris ",[352,3484,1223],{}," (reset) et ",[352,3487,1166],{},[422,3489,3492],{"className":424,"code":3490,"filename":3491,"language":426,"meta":427,"style":427},"client.mutationEvents.listen((event) {\n  if (event.isError) {\n    logger.error(\n      '[${event.mutatorId}] Mutation échouée',\n      event.error,\n      event.metadata,\n    );\n  }\n});\n","app_error_handler.dart",[352,3493,3494,3511,3524,3535,3556,3567,3577,3584,3588],{"__ignoreMap":427},[431,3495,3496,3499,3501,3503,3505,3508],{"class":433,"line":434},[431,3497,3498],{"class":440},"client",[431,3500,603],{"class":467},[431,3502,3456],{"class":440},[431,3504,603],{"class":467},[431,3506,3507],{"class":606},"listen",[431,3509,3510],{"class":440},"((event) {\n",[431,3512,3513,3516,3519,3521],{"class":433,"line":444},[431,3514,3515],{"class":637},"  if",[431,3517,3518],{"class":440}," (event",[431,3520,603],{"class":467},[431,3522,3523],{"class":440},"isError) {\n",[431,3525,3526,3529,3531,3533],{"class":433,"line":471},[431,3527,3528],{"class":440},"    logger",[431,3530,603],{"class":467},[431,3532,1761],{"class":606},[431,3534,625],{"class":440},[431,3536,3537,3540,3542,3545,3547,3549,3551,3554],{"class":433,"line":500},[431,3538,3539],{"class":655},"      '[",[431,3541,2725],{"class":440},[431,3543,3544],{"class":2728},"event",[431,3546,603],{"class":440},[431,3548,2896],{"class":2728},[431,3550,798],{"class":440},[431,3552,3553],{"class":655},"] Mutation échouée'",[431,3555,468],{"class":467},[431,3557,3558,3561,3563,3565],{"class":433,"line":513},[431,3559,3560],{"class":440},"      event",[431,3562,603],{"class":467},[431,3564,1761],{"class":440},[431,3566,468],{"class":467},[431,3568,3569,3571,3573,3575],{"class":433,"line":539},[431,3570,3560],{"class":440},[431,3572,603],{"class":467},[431,3574,965],{"class":440},[431,3576,468],{"class":467},[431,3578,3579,3582],{"class":433,"line":749},[431,3580,3581],{"class":440},"    )",[431,3583,809],{"class":467},[431,3585,3586],{"class":433,"line":757},[431,3587,3386],{"class":440},[431,3589,3590,3593],{"class":433,"line":769},[431,3591,3592],{"class":440},"})",[431,3594,809],{"class":467},[3596,3597,3598,3600,3601,603],"tip",{},[352,3599,3456],{}," est un stream broadcast : les événements émis avant votre abonnement sont perdus. Pour attraper les mutations démarrées avant l'abonnement, lire d'abord ",[352,3602,3096],{},[417,3604,3606],{"id":3605},"activemutations",[352,3607,3096],{},[422,3609,3611],{"className":424,"code":3610,"language":426,"meta":427,"style":427},"Map\u003CString, MutationUpdate> get activeMutations\n",[352,3612,3613],{"__ignoreMap":427},[431,3614,3615,3618,3620,3622,3624,3626,3628,3630],{"class":433,"line":434},[431,3616,3617],{"class":437},"Map",[431,3619,454],{"class":440},[431,3621,521],{"class":437},[431,3623,459],{"class":440},[431,3625,1000],{"class":437},[431,3627,1027],{"class":440},[431,3629,1030],{"class":467},[431,3631,3632],{"class":440}," activeMutations\n",[356,3634,3635,3636,3639,3640,603],{},"Snapshot non modifiable de toutes les mutations ",[1076,3637,3638],{},"actuellement en cours"," (pending), indexées par ",[352,3641,3642],{},"MutationController.id",[3644,3645,3646,3655,3665],"ul",{},[1130,3647,3648,3649,3652,3653],{},"Entrée ",[1076,3650,3651],{},"ajoutée"," quand un contrôleur transite vers ",[352,3654,1144],{},[1130,3656,3648,3657,3660,3661,1264,3663,806],{},[1076,3658,3659],{},"purgée automatiquement"," quand la mutation se termine (",[352,3662,1155],{},[352,3664,1166],{},[1130,3666,3648,3667,3670,3671,3673],{},[1076,3668,3669],{},"supprimée"," quand le contrôleur revient à ",[352,3672,1223],{}," ou est disposé",[422,3675,3678],{"className":424,"code":3676,"filename":3677,"language":426,"meta":427,"style":427},"// Pattern de connexion tardive DevTools :\n// 1. Lire le snapshot pour voir ce qui est actuellement en vol\nfinal pending = client.activeMutations;\n\n// 2. S'abonner au stream pour les mises à jour en temps réel (y compris les complétions)\nclient.mutationEvents.listen((event) {\n  devtools.push(event);\n});\n","devtools_panel.dart",[352,3679,3680,3685,3690,3707,3711,3716,3730,3745],{"__ignoreMap":427},[431,3681,3682],{"class":433,"line":434},[431,3683,3684],{"class":1874},"// Pattern de connexion tardive DevTools :\n",[431,3686,3687],{"class":433,"line":444},[431,3688,3689],{"class":1874},"// 1. Lire le snapshot pour voir ce qui est actuellement en vol\n",[431,3691,3692,3694,3697,3699,3701,3703,3705],{"class":433,"line":471},[431,3693,553],{"class":447},[431,3695,3696],{"class":440}," pending ",[431,3698,559],{"class":467},[431,3700,644],{"class":440},[431,3702,603],{"class":467},[431,3704,3096],{"class":440},[431,3706,809],{"class":467},[431,3708,3709],{"class":433,"line":500},[431,3710,1921],{"emptyLinePlaceholder":1920},[431,3712,3713],{"class":433,"line":513},[431,3714,3715],{"class":1874},"// 2. S'abonner au stream pour les mises à jour en temps réel (y compris les complétions)\n",[431,3717,3718,3720,3722,3724,3726,3728],{"class":433,"line":539},[431,3719,3498],{"class":440},[431,3721,603],{"class":467},[431,3723,3456],{"class":440},[431,3725,603],{"class":467},[431,3727,3507],{"class":606},[431,3729,3510],{"class":440},[431,3731,3732,3735,3737,3740,3743],{"class":433,"line":749},[431,3733,3734],{"class":440},"  devtools",[431,3736,603],{"class":467},[431,3738,3739],{"class":606},"push",[431,3741,3742],{"class":440},"(event)",[431,3744,809],{"class":467},[431,3746,3747,3749],{"class":433,"line":757},[431,3748,3592],{"class":440},[431,3750,809],{"class":467},[356,3752,3753,3755],{},[352,3754,3096],{}," n'accumule jamais d'entrées \"fantômes\" pour les mutations terminées : c'est toujours un indicateur fiable de \"en cours d'exécution\".",[417,3757,3759],{"id":3758},"debuginfo",[352,3760,3761],{},"debugInfo",[356,3763,3764,3767],{},[352,3765,3766],{},"QoraClient.debugInfo()"," inclut l'état des mutations dans sa sortie :",[422,3769,3772],{"className":424,"code":3770,"filename":3771,"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,   // ← mutations actuellement en attente\n//   keys: [...]\n// }\n","main.dart",[352,3773,3774,3791,3796,3801,3806,3811,3816,3821,3829,3834],{"__ignoreMap":427},[431,3775,3776,3779,3782,3784,3786,3789],{"class":433,"line":434},[431,3777,3778],{"class":606},"print",[431,3780,3781],{"class":440},"(client",[431,3783,603],{"class":467},[431,3785,3761],{"class":606},[431,3787,3788],{"class":440},"())",[431,3790,809],{"class":467},[431,3792,3793],{"class":433,"line":444},[431,3794,3795],{"class":1874},"// {\n",[431,3797,3798],{"class":433,"line":471},[431,3799,3800],{"class":1874},"//   total_queries: 5,\n",[431,3802,3803],{"class":433,"line":500},[431,3804,3805],{"class":1874},"//   active_queries: 2,\n",[431,3807,3808],{"class":433,"line":513},[431,3809,3810],{"class":1874},"//   inactive_queries: 3,\n",[431,3812,3813],{"class":433,"line":539},[431,3814,3815],{"class":1874},"//   pending_requests: 0,\n",[431,3817,3818],{"class":433,"line":749},[431,3819,3820],{"class":1874},"//   max_size: 100,\n",[431,3822,3823,3826],{"class":433,"line":757},[431,3824,3825],{"class":1874},"//   active_mutations: 1,",[431,3827,3828],{"class":1874},"   // ← mutations actuellement en attente\n",[431,3830,3831],{"class":433,"line":769},[431,3832,3833],{"class":1874},"//   keys: [...]\n",[431,3835,3836],{"class":433,"line":803},[431,3837,3838],{"class":1874},"// }\n",[1271,3840],{},[348,3842,3844],{"id":3843},"mutatorfunction",[352,3845,3846],{},"MutatorFunction",[422,3848,3850],{"className":424,"code":3849,"language":426,"meta":427,"style":427},"typedef MutatorFunction\u003CTData, TVariables> =\n    Future\u003CTData> Function(TVariables variables);\n",[352,3851,3852,3872],{"__ignoreMap":427},[431,3853,3854,3857,3859,3861,3863,3865,3867,3869],{"class":433,"line":434},[431,3855,3856],{"class":467},"typedef",[431,3858,451],{"class":437},[431,3860,454],{"class":440},[431,3862,385],{"class":437},[431,3864,459],{"class":440},[431,3866,395],{"class":437},[431,3868,1027],{"class":440},[431,3870,3871],{"class":467},"=\n",[431,3873,3874,3877,3879,3881,3883,3885,3887,3889,3891],{"class":433,"line":444},[431,3875,3876],{"class":437},"    Future",[431,3878,454],{"class":440},[431,3880,385],{"class":437},[431,3882,1027],{"class":440},[431,3884,1311],{"class":437},[431,3886,1117],{"class":440},[431,3888,395],{"class":437},[431,3890,1318],{"class":440},[431,3892,809],{"class":467},[356,3894,3895,3896,3899,3900,1570,3902,3904],{},"Alias de type pour la fonction de mutation. Fait écho à ",[352,3897,3898],{},"QueryFunction\u003CT>"," pour la cohérence avec la convention de nommage ",[352,3901,884],{},[352,3903,851],{}," dans toute l'API.",[1271,3906],{},[348,3908,3910],{"id":3909},"voir-aussi","Voir aussi",[3644,3912,3913,3921,3927],{},[1130,3914,3915,3920],{},[3916,3917,3919],"a",{"href":3918},"../recipes/mutations","Guide des mutations"," : guide conceptuel avec tous les patterns",[1130,3922,3923,3926],{},[3916,3924,113],{"href":3925},"../flutter-integration/qora-mutation-builder"," : référence du widget Flutter",[1130,3928,3929,3932],{},[3916,3930,202],{"href":3931},"./qora-client"," : référence complète de l'API client",[3934,3935,3936],"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":3938},[3939,3944,3948,3957,3958,3962,3963,3969,3970],{"id":350,"depth":444,"text":354,"children":3940},[3941,3942,3943],{"id":419,"depth":471,"text":420},{"id":812,"depth":471,"text":813},{"id":1089,"depth":471,"text":1090},{"id":1275,"depth":444,"text":929,"children":3945},[3946,3947],{"id":1283,"depth":471,"text":420},{"id":1528,"depth":471,"text":813},{"id":2124,"depth":444,"text":1016,"children":3949},[3950,3951,3952,3953,3955],{"id":2140,"depth":471,"text":2141},{"id":2286,"depth":471,"text":2286},{"id":2407,"depth":471,"text":2410},{"id":2540,"depth":471,"text":3954},"fold (extension)",{"id":2783,"depth":471,"text":3956},"status (extension)",{"id":2816,"depth":444,"text":2796},{"id":2860,"depth":444,"text":1000,"children":3959},[3960,3961],{"id":2874,"depth":471,"text":813},{"id":2998,"depth":471,"text":2999},{"id":3101,"depth":444,"text":3104},{"id":3439,"depth":444,"text":3964,"children":3965},"QoraClient : Observabilité des mutations",[3966,3967,3968],{"id":3453,"depth":471,"text":3456},{"id":3605,"depth":471,"text":3096},{"id":3758,"depth":471,"text":3761},{"id":3843,"depth":444,"text":3846},{"id":3909,"depth":444,"text":3910},"Référence complète de MutationController, MutationState, MutationOptions, MutationUpdate et l'observabilité des mutations sur QoraClient.","md",null,{},{"icon":85},{"title":3977,"description":3978},"Référence API Mutation - Qora","Référence API complète pour MutationController, MutationState, MutationOptions, MutationUpdate et l'observabilité des mutations sur QoraClient.","yvu0lLeKHxkcp_ym13xUwKr6NrT7wVS0d0v-1Xqy8Q8",[3981,3983],{"title":220,"path":221,"stem":222,"description":3982,"icon":223,"children":-1},"Configuration globale de QoraClient. Appliquée comme référence pour chaque requête. Les QoraOptions par requête sont fusionnées par-dessus.",{"title":229,"path":230,"stem":231,"description":3984,"icon":156,"children":-1},"Sous-classe de QoraClient qui persiste les résultats des requêtes dans un StorageAdapter et les restaure au démarrage via hydrate().",1794040409241]