[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-flutter-flutter-implement-json-serialization":3,"mdc-8p1br-key":29,"related-repo-flutter-flutter-implement-json-serialization":1291,"related-org-flutter-flutter-implement-json-serialization":1371},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":19,"repoUrl":20,"updatedAt":21,"license":22,"forks":23,"topics":24,"repo":25,"sourceUrl":27,"mdContent":28},"flutter-implement-json-serialization","implement JSON serialization for Dart models","Create model classes with `fromJson` and `toJson` methods using `dart:convert`. Use when manually mapping JSON keys to class properties for simple data structures.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"flutter","Flutter (Google)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fflutter.png",[12,16],{"name":13,"slug":14,"type":15},"Data Modeling","data-modeling","tag",{"name":17,"slug":18,"type":15},"Dart","dart",2664,"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins","2026-07-15T05:22:35.172461",null,155,[],{"repoUrl":20,"stars":19,"forks":23,"topics":26,"description":22},[],"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins\u002Ftree\u002FHEAD\u002Fskills\u002Fflutter-implement-json-serialization","---\nname: flutter-implement-json-serialization\ndescription: Create model classes with `fromJson` and `toJson` methods using `dart:convert`. Use when manually mapping JSON keys to class properties for simple data structures.\nmetadata:\n  model: models\u002Fgemini-3.1-pro-preview\n  last_modified: Tue, 21 Apr 2026 21:44:50 GMT\n---\n# Serializing JSON Manually in Flutter\n\n## Contents\n- [Core Guidelines](#core-guidelines)\n- [Workflow: Implementing a Serializable Model](#workflow-implementing-a-serializable-model)\n- [Workflow: Fetching and Parsing JSON](#workflow-fetching-and-parsing-json)\n- [Examples](#examples)\n\n## Core Guidelines\n\n- **Import `dart:convert`**: Utilize Flutter's built-in `dart:convert` library for manual JSON encoding (`jsonEncode`) and decoding (`jsonDecode`).\n- **Enforce Type Safety**: Always cast the `dynamic` result of `jsonDecode()` to the expected type, typically `Map\u003CString, dynamic>` for objects or `List\u003Cdynamic>` for arrays.\n- **Encapsulate Serialization Logic**: Define plain model classes containing properties corresponding to the JSON structure. Implement a `fromJson` factory constructor and a `toJson` method within the model.\n- **Handle Background Parsing**: If parsing large JSON documents (execution time > 16ms), offload the parsing logic to a separate isolate using Flutter's `compute()` function to prevent UI jank.\n- **Throw Exceptions on Failure**: When handling HTTP responses, throw an exception if the status code is not successful (e.g., not 200 OK or 201 Created). Do not return `null`.\n\n## Workflow: Implementing a Serializable Model\n\nUse this checklist to implement manual JSON serialization for a data model.\n\n**Task Progress:**\n- [ ] Define the plain model class with `final` properties.\n- [ ] Implement the `factory Model.fromJson(Map\u003CString, dynamic> json)` constructor.\n- [ ] Implement the `Map\u003CString, dynamic> toJson()` method.\n- [ ] Write unit tests for both serialization methods.\n- [ ] Run validator -> review type mismatch errors -> fix casting logic.\n\n1. **Define the Model**: Create a class with properties matching the JSON keys.\n2. **Implement `fromJson`**: Extract values from the `Map` and cast them to the appropriate Dart types. Use pattern matching or explicit casting.\n3. **Implement `toJson`**: Return a `Map\u003CString, dynamic>` mapping the class properties back to their JSON string keys.\n4. **Validate**: Execute unit tests to ensure type safety, autocompletion, and compile-time exception handling function correctly.\n\n## Workflow: Fetching and Parsing JSON\n\nUse this conditional workflow when retrieving and parsing JSON from a network request.\n\n**Task Progress:**\n- [ ] Execute the HTTP request.\n- [ ] Validate the response status code.\n- [ ] Determine parsing strategy (Synchronous vs. Isolate).\n- [ ] Decode and map the JSON to the model.\n\n1. **Execute Request**: Use the `http` package to perform the network call.\n2. **Validate Response**: \n   - If `response.statusCode == 200` (or 201 for POST), proceed to parsing.\n   - If the status code indicates failure, throw an `Exception`.\n3. **Determine Parsing Strategy**:\n   - If parsing a **small payload** (e.g., a single object), parse synchronously on the main thread.\n   - If parsing a **large payload** (e.g., an array of thousands of objects), use `compute(parseFunction, response.body)` to parse in a background isolate.\n4. **Decode and Map**: Pass the decoded JSON to your model's `fromJson` constructor.\n\n## Examples\n\n### High-Fidelity Model Implementation\n\n```dart\nimport 'dart:convert';\n\nclass User {\n  final int id;\n  final String name;\n  final String email;\n\n  const User({\n    required this.id,\n    required this.name,\n    required this.email,\n  });\n\n  \u002F\u002F Factory constructor for deserialization\n  factory User.fromJson(Map\u003CString, dynamic> json) {\n    return switch (json) {\n      {\n        'id': int id,\n        'name': String name,\n        'email': String email,\n      } => \n        User(\n          id: id,\n          name: name,\n          email: email,\n        ),\n      _ => throw const FormatException('Failed to load User.'),\n    };\n  }\n\n  \u002F\u002F Method for serialization\n  Map\u003CString, dynamic> toJson() {\n    return {\n      'id': id,\n      'name': name,\n      'email': email,\n    };\n  }\n}\n```\n\n### Synchronous Parsing (Small Payload)\n\n```dart\nimport 'dart:convert';\nimport 'package:http\u002Fhttp.dart' as http;\n\nFuture\u003CUser> fetchUser(http.Client client, int userId) async {\n  final response = await client.get(\n    Uri.parse('https:\u002F\u002Fapi.example.com\u002Fusers\u002F$userId'),\n    headers: {'Accept': 'application\u002Fjson'},\n  );\n\n  if (response.statusCode == 200) {\n    \u002F\u002F Decode returns dynamic, cast to Map\u003CString, dynamic>\n    final Map\u003CString, dynamic> jsonMap = jsonDecode(response.body) as Map\u003CString, dynamic>;\n    return User.fromJson(jsonMap);\n  } else {\n    throw Exception('Failed to load user');\n  }\n}\n```\n\n### Background Parsing (Large Payload)\n\n```dart\nimport 'dart:convert';\nimport 'package:flutter\u002Ffoundation.dart';\nimport 'package:http\u002Fhttp.dart' as http;\n\n\u002F\u002F Top-level function required for compute()\nList\u003CUser> parseUsers(String responseBody) {\n  final parsed = (jsonDecode(responseBody) as List\u003Cdynamic>).cast\u003CMap\u003CString, dynamic>>();\n  return parsed.map\u003CUser>((json) => User.fromJson(json)).toList();\n}\n\nFuture\u003CList\u003CUser>> fetchUsers(http.Client client) async {\n  final response = await client.get(\n    Uri.parse('https:\u002F\u002Fapi.example.com\u002Fusers'),\n    headers: {'Accept': 'application\u002Fjson'},\n  );\n\n  if (response.statusCode == 200) {\n    \u002F\u002F Offload expensive parsing to a background isolate\n    return compute(parseUsers, response.body);\n  } else {\n    throw Exception('Failed to load users');\n  }\n}\n```\n",{"data":30,"body":34},{"name":4,"description":6,"metadata":31},{"model":32,"last_modified":33},"models\u002Fgemini-3.1-pro-preview","Tue, 21 Apr 2026 21:44:50 GMT",{"type":35,"children":36},"root",[37,46,53,95,100,248,253,259,267,344,412,417,422,429,469,587,592,599,957,963,1101,1107,1285],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"serializing-json-manually-in-flutter",[43],{"type":44,"value":45},"text","Serializing JSON Manually in Flutter",{"type":38,"tag":47,"props":48,"children":50},"h2",{"id":49},"contents",[51],{"type":44,"value":52},"Contents",{"type":38,"tag":54,"props":55,"children":56},"ul",{},[57,68,77,86],{"type":38,"tag":58,"props":59,"children":60},"li",{},[61],{"type":38,"tag":62,"props":63,"children":65},"a",{"href":64},"#core-guidelines",[66],{"type":44,"value":67},"Core Guidelines",{"type":38,"tag":58,"props":69,"children":70},{},[71],{"type":38,"tag":62,"props":72,"children":74},{"href":73},"#workflow-implementing-a-serializable-model",[75],{"type":44,"value":76},"Workflow: Implementing a Serializable Model",{"type":38,"tag":58,"props":78,"children":79},{},[80],{"type":38,"tag":62,"props":81,"children":83},{"href":82},"#workflow-fetching-and-parsing-json",[84],{"type":44,"value":85},"Workflow: Fetching and Parsing JSON",{"type":38,"tag":58,"props":87,"children":88},{},[89],{"type":38,"tag":62,"props":90,"children":92},{"href":91},"#examples",[93],{"type":44,"value":94},"Examples",{"type":38,"tag":47,"props":96,"children":98},{"id":97},"core-guidelines",[99],{"type":44,"value":67},{"type":38,"tag":54,"props":101,"children":102},{},[103,144,186,212,230],{"type":38,"tag":58,"props":104,"children":105},{},[106,119,121,126,128,134,136,142],{"type":38,"tag":107,"props":108,"children":109},"strong",{},[110,112],{"type":44,"value":111},"Import ",{"type":38,"tag":113,"props":114,"children":116},"code",{"className":115},[],[117],{"type":44,"value":118},"dart:convert",{"type":44,"value":120},": Utilize Flutter's built-in ",{"type":38,"tag":113,"props":122,"children":124},{"className":123},[],[125],{"type":44,"value":118},{"type":44,"value":127}," library for manual JSON encoding (",{"type":38,"tag":113,"props":129,"children":131},{"className":130},[],[132],{"type":44,"value":133},"jsonEncode",{"type":44,"value":135},") and decoding (",{"type":38,"tag":113,"props":137,"children":139},{"className":138},[],[140],{"type":44,"value":141},"jsonDecode",{"type":44,"value":143},").",{"type":38,"tag":58,"props":145,"children":146},{},[147,152,154,160,162,168,170,176,178,184],{"type":38,"tag":107,"props":148,"children":149},{},[150],{"type":44,"value":151},"Enforce Type Safety",{"type":44,"value":153},": Always cast the ",{"type":38,"tag":113,"props":155,"children":157},{"className":156},[],[158],{"type":44,"value":159},"dynamic",{"type":44,"value":161}," result of ",{"type":38,"tag":113,"props":163,"children":165},{"className":164},[],[166],{"type":44,"value":167},"jsonDecode()",{"type":44,"value":169}," to the expected type, typically ",{"type":38,"tag":113,"props":171,"children":173},{"className":172},[],[174],{"type":44,"value":175},"Map\u003CString, dynamic>",{"type":44,"value":177}," for objects or ",{"type":38,"tag":113,"props":179,"children":181},{"className":180},[],[182],{"type":44,"value":183},"List\u003Cdynamic>",{"type":44,"value":185}," for arrays.",{"type":38,"tag":58,"props":187,"children":188},{},[189,194,196,202,204,210],{"type":38,"tag":107,"props":190,"children":191},{},[192],{"type":44,"value":193},"Encapsulate Serialization Logic",{"type":44,"value":195},": Define plain model classes containing properties corresponding to the JSON structure. Implement a ",{"type":38,"tag":113,"props":197,"children":199},{"className":198},[],[200],{"type":44,"value":201},"fromJson",{"type":44,"value":203}," factory constructor and a ",{"type":38,"tag":113,"props":205,"children":207},{"className":206},[],[208],{"type":44,"value":209},"toJson",{"type":44,"value":211}," method within the model.",{"type":38,"tag":58,"props":213,"children":214},{},[215,220,222,228],{"type":38,"tag":107,"props":216,"children":217},{},[218],{"type":44,"value":219},"Handle Background Parsing",{"type":44,"value":221},": If parsing large JSON documents (execution time > 16ms), offload the parsing logic to a separate isolate using Flutter's ",{"type":38,"tag":113,"props":223,"children":225},{"className":224},[],[226],{"type":44,"value":227},"compute()",{"type":44,"value":229}," function to prevent UI jank.",{"type":38,"tag":58,"props":231,"children":232},{},[233,238,240,246],{"type":38,"tag":107,"props":234,"children":235},{},[236],{"type":44,"value":237},"Throw Exceptions on Failure",{"type":44,"value":239},": When handling HTTP responses, throw an exception if the status code is not successful (e.g., not 200 OK or 201 Created). Do not return ",{"type":38,"tag":113,"props":241,"children":243},{"className":242},[],[244],{"type":44,"value":245},"null",{"type":44,"value":247},".",{"type":38,"tag":47,"props":249,"children":251},{"id":250},"workflow-implementing-a-serializable-model",[252],{"type":44,"value":76},{"type":38,"tag":254,"props":255,"children":256},"p",{},[257],{"type":44,"value":258},"Use this checklist to implement manual JSON serialization for a data model.",{"type":38,"tag":254,"props":260,"children":261},{},[262],{"type":38,"tag":107,"props":263,"children":264},{},[265],{"type":44,"value":266},"Task Progress:",{"type":38,"tag":54,"props":268,"children":271},{"className":269},[270],"contains-task-list",[272,293,310,326,335],{"type":38,"tag":58,"props":273,"children":276},{"className":274},[275],"task-list-item",[277,283,285,291],{"type":38,"tag":278,"props":279,"children":282},"input",{"disabled":280,"type":281},true,"checkbox",[],{"type":44,"value":284}," Define the plain model class with ",{"type":38,"tag":113,"props":286,"children":288},{"className":287},[],[289],{"type":44,"value":290},"final",{"type":44,"value":292}," properties.",{"type":38,"tag":58,"props":294,"children":296},{"className":295},[275],[297,300,302,308],{"type":38,"tag":278,"props":298,"children":299},{"disabled":280,"type":281},[],{"type":44,"value":301}," Implement the ",{"type":38,"tag":113,"props":303,"children":305},{"className":304},[],[306],{"type":44,"value":307},"factory Model.fromJson(Map\u003CString, dynamic> json)",{"type":44,"value":309}," constructor.",{"type":38,"tag":58,"props":311,"children":313},{"className":312},[275],[314,317,318,324],{"type":38,"tag":278,"props":315,"children":316},{"disabled":280,"type":281},[],{"type":44,"value":301},{"type":38,"tag":113,"props":319,"children":321},{"className":320},[],[322],{"type":44,"value":323},"Map\u003CString, dynamic> toJson()",{"type":44,"value":325}," method.",{"type":38,"tag":58,"props":327,"children":329},{"className":328},[275],[330,333],{"type":38,"tag":278,"props":331,"children":332},{"disabled":280,"type":281},[],{"type":44,"value":334}," Write unit tests for both serialization methods.",{"type":38,"tag":58,"props":336,"children":338},{"className":337},[275],[339,342],{"type":38,"tag":278,"props":340,"children":341},{"disabled":280,"type":281},[],{"type":44,"value":343}," Run validator -> review type mismatch errors -> fix casting logic.",{"type":38,"tag":345,"props":346,"children":347},"ol",{},[348,358,381,402],{"type":38,"tag":58,"props":349,"children":350},{},[351,356],{"type":38,"tag":107,"props":352,"children":353},{},[354],{"type":44,"value":355},"Define the Model",{"type":44,"value":357},": Create a class with properties matching the JSON keys.",{"type":38,"tag":58,"props":359,"children":360},{},[361,371,373,379],{"type":38,"tag":107,"props":362,"children":363},{},[364,366],{"type":44,"value":365},"Implement ",{"type":38,"tag":113,"props":367,"children":369},{"className":368},[],[370],{"type":44,"value":201},{"type":44,"value":372},": Extract values from the ",{"type":38,"tag":113,"props":374,"children":376},{"className":375},[],[377],{"type":44,"value":378},"Map",{"type":44,"value":380}," and cast them to the appropriate Dart types. Use pattern matching or explicit casting.",{"type":38,"tag":58,"props":382,"children":383},{},[384,393,395,400],{"type":38,"tag":107,"props":385,"children":386},{},[387,388],{"type":44,"value":365},{"type":38,"tag":113,"props":389,"children":391},{"className":390},[],[392],{"type":44,"value":209},{"type":44,"value":394},": Return a ",{"type":38,"tag":113,"props":396,"children":398},{"className":397},[],[399],{"type":44,"value":175},{"type":44,"value":401}," mapping the class properties back to their JSON string keys.",{"type":38,"tag":58,"props":403,"children":404},{},[405,410],{"type":38,"tag":107,"props":406,"children":407},{},[408],{"type":44,"value":409},"Validate",{"type":44,"value":411},": Execute unit tests to ensure type safety, autocompletion, and compile-time exception handling function correctly.",{"type":38,"tag":47,"props":413,"children":415},{"id":414},"workflow-fetching-and-parsing-json",[416],{"type":44,"value":85},{"type":38,"tag":254,"props":418,"children":419},{},[420],{"type":44,"value":421},"Use this conditional workflow when retrieving and parsing JSON from a network request.",{"type":38,"tag":254,"props":423,"children":424},{},[425],{"type":38,"tag":107,"props":426,"children":427},{},[428],{"type":44,"value":266},{"type":38,"tag":54,"props":430,"children":432},{"className":431},[270],[433,442,451,460],{"type":38,"tag":58,"props":434,"children":436},{"className":435},[275],[437,440],{"type":38,"tag":278,"props":438,"children":439},{"disabled":280,"type":281},[],{"type":44,"value":441}," Execute the HTTP request.",{"type":38,"tag":58,"props":443,"children":445},{"className":444},[275],[446,449],{"type":38,"tag":278,"props":447,"children":448},{"disabled":280,"type":281},[],{"type":44,"value":450}," Validate the response status code.",{"type":38,"tag":58,"props":452,"children":454},{"className":453},[275],[455,458],{"type":38,"tag":278,"props":456,"children":457},{"disabled":280,"type":281},[],{"type":44,"value":459}," Determine parsing strategy (Synchronous vs. Isolate).",{"type":38,"tag":58,"props":461,"children":463},{"className":462},[275],[464,467],{"type":38,"tag":278,"props":465,"children":466},{"disabled":280,"type":281},[],{"type":44,"value":468}," Decode and map the JSON to the model.",{"type":38,"tag":345,"props":470,"children":471},{},[472,490,528,571],{"type":38,"tag":58,"props":473,"children":474},{},[475,480,482,488],{"type":38,"tag":107,"props":476,"children":477},{},[478],{"type":44,"value":479},"Execute Request",{"type":44,"value":481},": Use the ",{"type":38,"tag":113,"props":483,"children":485},{"className":484},[],[486],{"type":44,"value":487},"http",{"type":44,"value":489}," package to perform the network call.",{"type":38,"tag":58,"props":491,"children":492},{},[493,498,500],{"type":38,"tag":107,"props":494,"children":495},{},[496],{"type":44,"value":497},"Validate Response",{"type":44,"value":499},":\n",{"type":38,"tag":54,"props":501,"children":502},{},[503,516],{"type":38,"tag":58,"props":504,"children":505},{},[506,508,514],{"type":44,"value":507},"If ",{"type":38,"tag":113,"props":509,"children":511},{"className":510},[],[512],{"type":44,"value":513},"response.statusCode == 200",{"type":44,"value":515}," (or 201 for POST), proceed to parsing.",{"type":38,"tag":58,"props":517,"children":518},{},[519,521,527],{"type":44,"value":520},"If the status code indicates failure, throw an ",{"type":38,"tag":113,"props":522,"children":524},{"className":523},[],[525],{"type":44,"value":526},"Exception",{"type":44,"value":247},{"type":38,"tag":58,"props":529,"children":530},{},[531,536,537],{"type":38,"tag":107,"props":532,"children":533},{},[534],{"type":44,"value":535},"Determine Parsing Strategy",{"type":44,"value":499},{"type":38,"tag":54,"props":538,"children":539},{},[540,552],{"type":38,"tag":58,"props":541,"children":542},{},[543,545,550],{"type":44,"value":544},"If parsing a ",{"type":38,"tag":107,"props":546,"children":547},{},[548],{"type":44,"value":549},"small payload",{"type":44,"value":551}," (e.g., a single object), parse synchronously on the main thread.",{"type":38,"tag":58,"props":553,"children":554},{},[555,556,561,563,569],{"type":44,"value":544},{"type":38,"tag":107,"props":557,"children":558},{},[559],{"type":44,"value":560},"large payload",{"type":44,"value":562}," (e.g., an array of thousands of objects), use ",{"type":38,"tag":113,"props":564,"children":566},{"className":565},[],[567],{"type":44,"value":568},"compute(parseFunction, response.body)",{"type":44,"value":570}," to parse in a background isolate.",{"type":38,"tag":58,"props":572,"children":573},{},[574,579,581,586],{"type":38,"tag":107,"props":575,"children":576},{},[577],{"type":44,"value":578},"Decode and Map",{"type":44,"value":580},": Pass the decoded JSON to your model's ",{"type":38,"tag":113,"props":582,"children":584},{"className":583},[],[585],{"type":44,"value":201},{"type":44,"value":309},{"type":38,"tag":47,"props":588,"children":590},{"id":589},"examples",[591],{"type":44,"value":94},{"type":38,"tag":593,"props":594,"children":596},"h3",{"id":595},"high-fidelity-model-implementation",[597],{"type":44,"value":598},"High-Fidelity Model Implementation",{"type":38,"tag":600,"props":601,"children":605},"pre",{"className":602,"code":603,"language":18,"meta":604,"style":604},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'dart:convert';\n\nclass User {\n  final int id;\n  final String name;\n  final String email;\n\n  const User({\n    required this.id,\n    required this.name,\n    required this.email,\n  });\n\n  \u002F\u002F Factory constructor for deserialization\n  factory User.fromJson(Map\u003CString, dynamic> json) {\n    return switch (json) {\n      {\n        'id': int id,\n        'name': String name,\n        'email': String email,\n      } => \n        User(\n          id: id,\n          name: name,\n          email: email,\n        ),\n      _ => throw const FormatException('Failed to load User.'),\n    };\n  }\n\n  \u002F\u002F Method for serialization\n  Map\u003CString, dynamic> toJson() {\n    return {\n      'id': id,\n      'name': name,\n      'email': email,\n    };\n  }\n}\n","",[606],{"type":38,"tag":113,"props":607,"children":608},{"__ignoreMap":604},[609,620,629,638,647,656,665,673,682,691,700,709,718,726,735,744,753,762,771,780,789,798,807,816,825,834,843,852,861,870,878,887,896,905,914,923,932,940,948],{"type":38,"tag":610,"props":611,"children":614},"span",{"class":612,"line":613},"line",1,[615],{"type":38,"tag":610,"props":616,"children":617},{},[618],{"type":44,"value":619},"import 'dart:convert';\n",{"type":38,"tag":610,"props":621,"children":623},{"class":612,"line":622},2,[624],{"type":38,"tag":610,"props":625,"children":626},{"emptyLinePlaceholder":280},[627],{"type":44,"value":628},"\n",{"type":38,"tag":610,"props":630,"children":632},{"class":612,"line":631},3,[633],{"type":38,"tag":610,"props":634,"children":635},{},[636],{"type":44,"value":637},"class User {\n",{"type":38,"tag":610,"props":639,"children":641},{"class":612,"line":640},4,[642],{"type":38,"tag":610,"props":643,"children":644},{},[645],{"type":44,"value":646},"  final int id;\n",{"type":38,"tag":610,"props":648,"children":650},{"class":612,"line":649},5,[651],{"type":38,"tag":610,"props":652,"children":653},{},[654],{"type":44,"value":655},"  final String name;\n",{"type":38,"tag":610,"props":657,"children":659},{"class":612,"line":658},6,[660],{"type":38,"tag":610,"props":661,"children":662},{},[663],{"type":44,"value":664},"  final String email;\n",{"type":38,"tag":610,"props":666,"children":668},{"class":612,"line":667},7,[669],{"type":38,"tag":610,"props":670,"children":671},{"emptyLinePlaceholder":280},[672],{"type":44,"value":628},{"type":38,"tag":610,"props":674,"children":676},{"class":612,"line":675},8,[677],{"type":38,"tag":610,"props":678,"children":679},{},[680],{"type":44,"value":681},"  const User({\n",{"type":38,"tag":610,"props":683,"children":685},{"class":612,"line":684},9,[686],{"type":38,"tag":610,"props":687,"children":688},{},[689],{"type":44,"value":690},"    required this.id,\n",{"type":38,"tag":610,"props":692,"children":694},{"class":612,"line":693},10,[695],{"type":38,"tag":610,"props":696,"children":697},{},[698],{"type":44,"value":699},"    required this.name,\n",{"type":38,"tag":610,"props":701,"children":703},{"class":612,"line":702},11,[704],{"type":38,"tag":610,"props":705,"children":706},{},[707],{"type":44,"value":708},"    required this.email,\n",{"type":38,"tag":610,"props":710,"children":712},{"class":612,"line":711},12,[713],{"type":38,"tag":610,"props":714,"children":715},{},[716],{"type":44,"value":717},"  });\n",{"type":38,"tag":610,"props":719,"children":721},{"class":612,"line":720},13,[722],{"type":38,"tag":610,"props":723,"children":724},{"emptyLinePlaceholder":280},[725],{"type":44,"value":628},{"type":38,"tag":610,"props":727,"children":729},{"class":612,"line":728},14,[730],{"type":38,"tag":610,"props":731,"children":732},{},[733],{"type":44,"value":734},"  \u002F\u002F Factory constructor for deserialization\n",{"type":38,"tag":610,"props":736,"children":738},{"class":612,"line":737},15,[739],{"type":38,"tag":610,"props":740,"children":741},{},[742],{"type":44,"value":743},"  factory User.fromJson(Map\u003CString, dynamic> json) {\n",{"type":38,"tag":610,"props":745,"children":747},{"class":612,"line":746},16,[748],{"type":38,"tag":610,"props":749,"children":750},{},[751],{"type":44,"value":752},"    return switch (json) {\n",{"type":38,"tag":610,"props":754,"children":756},{"class":612,"line":755},17,[757],{"type":38,"tag":610,"props":758,"children":759},{},[760],{"type":44,"value":761},"      {\n",{"type":38,"tag":610,"props":763,"children":765},{"class":612,"line":764},18,[766],{"type":38,"tag":610,"props":767,"children":768},{},[769],{"type":44,"value":770},"        'id': int id,\n",{"type":38,"tag":610,"props":772,"children":774},{"class":612,"line":773},19,[775],{"type":38,"tag":610,"props":776,"children":777},{},[778],{"type":44,"value":779},"        'name': String name,\n",{"type":38,"tag":610,"props":781,"children":783},{"class":612,"line":782},20,[784],{"type":38,"tag":610,"props":785,"children":786},{},[787],{"type":44,"value":788},"        'email': String email,\n",{"type":38,"tag":610,"props":790,"children":792},{"class":612,"line":791},21,[793],{"type":38,"tag":610,"props":794,"children":795},{},[796],{"type":44,"value":797},"      } => \n",{"type":38,"tag":610,"props":799,"children":801},{"class":612,"line":800},22,[802],{"type":38,"tag":610,"props":803,"children":804},{},[805],{"type":44,"value":806},"        User(\n",{"type":38,"tag":610,"props":808,"children":810},{"class":612,"line":809},23,[811],{"type":38,"tag":610,"props":812,"children":813},{},[814],{"type":44,"value":815},"          id: id,\n",{"type":38,"tag":610,"props":817,"children":819},{"class":612,"line":818},24,[820],{"type":38,"tag":610,"props":821,"children":822},{},[823],{"type":44,"value":824},"          name: name,\n",{"type":38,"tag":610,"props":826,"children":828},{"class":612,"line":827},25,[829],{"type":38,"tag":610,"props":830,"children":831},{},[832],{"type":44,"value":833},"          email: email,\n",{"type":38,"tag":610,"props":835,"children":837},{"class":612,"line":836},26,[838],{"type":38,"tag":610,"props":839,"children":840},{},[841],{"type":44,"value":842},"        ),\n",{"type":38,"tag":610,"props":844,"children":846},{"class":612,"line":845},27,[847],{"type":38,"tag":610,"props":848,"children":849},{},[850],{"type":44,"value":851},"      _ => throw const FormatException('Failed to load User.'),\n",{"type":38,"tag":610,"props":853,"children":855},{"class":612,"line":854},28,[856],{"type":38,"tag":610,"props":857,"children":858},{},[859],{"type":44,"value":860},"    };\n",{"type":38,"tag":610,"props":862,"children":864},{"class":612,"line":863},29,[865],{"type":38,"tag":610,"props":866,"children":867},{},[868],{"type":44,"value":869},"  }\n",{"type":38,"tag":610,"props":871,"children":873},{"class":612,"line":872},30,[874],{"type":38,"tag":610,"props":875,"children":876},{"emptyLinePlaceholder":280},[877],{"type":44,"value":628},{"type":38,"tag":610,"props":879,"children":881},{"class":612,"line":880},31,[882],{"type":38,"tag":610,"props":883,"children":884},{},[885],{"type":44,"value":886},"  \u002F\u002F Method for serialization\n",{"type":38,"tag":610,"props":888,"children":890},{"class":612,"line":889},32,[891],{"type":38,"tag":610,"props":892,"children":893},{},[894],{"type":44,"value":895},"  Map\u003CString, dynamic> toJson() {\n",{"type":38,"tag":610,"props":897,"children":899},{"class":612,"line":898},33,[900],{"type":38,"tag":610,"props":901,"children":902},{},[903],{"type":44,"value":904},"    return {\n",{"type":38,"tag":610,"props":906,"children":908},{"class":612,"line":907},34,[909],{"type":38,"tag":610,"props":910,"children":911},{},[912],{"type":44,"value":913},"      'id': id,\n",{"type":38,"tag":610,"props":915,"children":917},{"class":612,"line":916},35,[918],{"type":38,"tag":610,"props":919,"children":920},{},[921],{"type":44,"value":922},"      'name': name,\n",{"type":38,"tag":610,"props":924,"children":926},{"class":612,"line":925},36,[927],{"type":38,"tag":610,"props":928,"children":929},{},[930],{"type":44,"value":931},"      'email': email,\n",{"type":38,"tag":610,"props":933,"children":935},{"class":612,"line":934},37,[936],{"type":38,"tag":610,"props":937,"children":938},{},[939],{"type":44,"value":860},{"type":38,"tag":610,"props":941,"children":943},{"class":612,"line":942},38,[944],{"type":38,"tag":610,"props":945,"children":946},{},[947],{"type":44,"value":869},{"type":38,"tag":610,"props":949,"children":951},{"class":612,"line":950},39,[952],{"type":38,"tag":610,"props":953,"children":954},{},[955],{"type":44,"value":956},"}\n",{"type":38,"tag":593,"props":958,"children":960},{"id":959},"synchronous-parsing-small-payload",[961],{"type":44,"value":962},"Synchronous Parsing (Small Payload)",{"type":38,"tag":600,"props":964,"children":966},{"className":602,"code":965,"language":18,"meta":604,"style":604},"import 'dart:convert';\nimport 'package:http\u002Fhttp.dart' as http;\n\nFuture\u003CUser> fetchUser(http.Client client, int userId) async {\n  final response = await client.get(\n    Uri.parse('https:\u002F\u002Fapi.example.com\u002Fusers\u002F$userId'),\n    headers: {'Accept': 'application\u002Fjson'},\n  );\n\n  if (response.statusCode == 200) {\n    \u002F\u002F Decode returns dynamic, cast to Map\u003CString, dynamic>\n    final Map\u003CString, dynamic> jsonMap = jsonDecode(response.body) as Map\u003CString, dynamic>;\n    return User.fromJson(jsonMap);\n  } else {\n    throw Exception('Failed to load user');\n  }\n}\n",[967],{"type":38,"tag":113,"props":968,"children":969},{"__ignoreMap":604},[970,977,985,992,1000,1008,1016,1024,1032,1039,1047,1055,1063,1071,1079,1087,1094],{"type":38,"tag":610,"props":971,"children":972},{"class":612,"line":613},[973],{"type":38,"tag":610,"props":974,"children":975},{},[976],{"type":44,"value":619},{"type":38,"tag":610,"props":978,"children":979},{"class":612,"line":622},[980],{"type":38,"tag":610,"props":981,"children":982},{},[983],{"type":44,"value":984},"import 'package:http\u002Fhttp.dart' as http;\n",{"type":38,"tag":610,"props":986,"children":987},{"class":612,"line":631},[988],{"type":38,"tag":610,"props":989,"children":990},{"emptyLinePlaceholder":280},[991],{"type":44,"value":628},{"type":38,"tag":610,"props":993,"children":994},{"class":612,"line":640},[995],{"type":38,"tag":610,"props":996,"children":997},{},[998],{"type":44,"value":999},"Future\u003CUser> fetchUser(http.Client client, int userId) async {\n",{"type":38,"tag":610,"props":1001,"children":1002},{"class":612,"line":649},[1003],{"type":38,"tag":610,"props":1004,"children":1005},{},[1006],{"type":44,"value":1007},"  final response = await client.get(\n",{"type":38,"tag":610,"props":1009,"children":1010},{"class":612,"line":658},[1011],{"type":38,"tag":610,"props":1012,"children":1013},{},[1014],{"type":44,"value":1015},"    Uri.parse('https:\u002F\u002Fapi.example.com\u002Fusers\u002F$userId'),\n",{"type":38,"tag":610,"props":1017,"children":1018},{"class":612,"line":667},[1019],{"type":38,"tag":610,"props":1020,"children":1021},{},[1022],{"type":44,"value":1023},"    headers: {'Accept': 'application\u002Fjson'},\n",{"type":38,"tag":610,"props":1025,"children":1026},{"class":612,"line":675},[1027],{"type":38,"tag":610,"props":1028,"children":1029},{},[1030],{"type":44,"value":1031},"  );\n",{"type":38,"tag":610,"props":1033,"children":1034},{"class":612,"line":684},[1035],{"type":38,"tag":610,"props":1036,"children":1037},{"emptyLinePlaceholder":280},[1038],{"type":44,"value":628},{"type":38,"tag":610,"props":1040,"children":1041},{"class":612,"line":693},[1042],{"type":38,"tag":610,"props":1043,"children":1044},{},[1045],{"type":44,"value":1046},"  if (response.statusCode == 200) {\n",{"type":38,"tag":610,"props":1048,"children":1049},{"class":612,"line":702},[1050],{"type":38,"tag":610,"props":1051,"children":1052},{},[1053],{"type":44,"value":1054},"    \u002F\u002F Decode returns dynamic, cast to Map\u003CString, dynamic>\n",{"type":38,"tag":610,"props":1056,"children":1057},{"class":612,"line":711},[1058],{"type":38,"tag":610,"props":1059,"children":1060},{},[1061],{"type":44,"value":1062},"    final Map\u003CString, dynamic> jsonMap = jsonDecode(response.body) as Map\u003CString, dynamic>;\n",{"type":38,"tag":610,"props":1064,"children":1065},{"class":612,"line":720},[1066],{"type":38,"tag":610,"props":1067,"children":1068},{},[1069],{"type":44,"value":1070},"    return User.fromJson(jsonMap);\n",{"type":38,"tag":610,"props":1072,"children":1073},{"class":612,"line":728},[1074],{"type":38,"tag":610,"props":1075,"children":1076},{},[1077],{"type":44,"value":1078},"  } else {\n",{"type":38,"tag":610,"props":1080,"children":1081},{"class":612,"line":737},[1082],{"type":38,"tag":610,"props":1083,"children":1084},{},[1085],{"type":44,"value":1086},"    throw Exception('Failed to load user');\n",{"type":38,"tag":610,"props":1088,"children":1089},{"class":612,"line":746},[1090],{"type":38,"tag":610,"props":1091,"children":1092},{},[1093],{"type":44,"value":869},{"type":38,"tag":610,"props":1095,"children":1096},{"class":612,"line":755},[1097],{"type":38,"tag":610,"props":1098,"children":1099},{},[1100],{"type":44,"value":956},{"type":38,"tag":593,"props":1102,"children":1104},{"id":1103},"background-parsing-large-payload",[1105],{"type":44,"value":1106},"Background Parsing (Large Payload)",{"type":38,"tag":600,"props":1108,"children":1110},{"className":602,"code":1109,"language":18,"meta":604,"style":604},"import 'dart:convert';\nimport 'package:flutter\u002Ffoundation.dart';\nimport 'package:http\u002Fhttp.dart' as http;\n\n\u002F\u002F Top-level function required for compute()\nList\u003CUser> parseUsers(String responseBody) {\n  final parsed = (jsonDecode(responseBody) as List\u003Cdynamic>).cast\u003CMap\u003CString, dynamic>>();\n  return parsed.map\u003CUser>((json) => User.fromJson(json)).toList();\n}\n\nFuture\u003CList\u003CUser>> fetchUsers(http.Client client) async {\n  final response = await client.get(\n    Uri.parse('https:\u002F\u002Fapi.example.com\u002Fusers'),\n    headers: {'Accept': 'application\u002Fjson'},\n  );\n\n  if (response.statusCode == 200) {\n    \u002F\u002F Offload expensive parsing to a background isolate\n    return compute(parseUsers, response.body);\n  } else {\n    throw Exception('Failed to load users');\n  }\n}\n",[1111],{"type":38,"tag":113,"props":1112,"children":1113},{"__ignoreMap":604},[1114,1121,1129,1136,1143,1151,1159,1167,1175,1182,1189,1197,1204,1212,1219,1226,1233,1240,1248,1256,1263,1271,1278],{"type":38,"tag":610,"props":1115,"children":1116},{"class":612,"line":613},[1117],{"type":38,"tag":610,"props":1118,"children":1119},{},[1120],{"type":44,"value":619},{"type":38,"tag":610,"props":1122,"children":1123},{"class":612,"line":622},[1124],{"type":38,"tag":610,"props":1125,"children":1126},{},[1127],{"type":44,"value":1128},"import 'package:flutter\u002Ffoundation.dart';\n",{"type":38,"tag":610,"props":1130,"children":1131},{"class":612,"line":631},[1132],{"type":38,"tag":610,"props":1133,"children":1134},{},[1135],{"type":44,"value":984},{"type":38,"tag":610,"props":1137,"children":1138},{"class":612,"line":640},[1139],{"type":38,"tag":610,"props":1140,"children":1141},{"emptyLinePlaceholder":280},[1142],{"type":44,"value":628},{"type":38,"tag":610,"props":1144,"children":1145},{"class":612,"line":649},[1146],{"type":38,"tag":610,"props":1147,"children":1148},{},[1149],{"type":44,"value":1150},"\u002F\u002F Top-level function required for compute()\n",{"type":38,"tag":610,"props":1152,"children":1153},{"class":612,"line":658},[1154],{"type":38,"tag":610,"props":1155,"children":1156},{},[1157],{"type":44,"value":1158},"List\u003CUser> parseUsers(String responseBody) {\n",{"type":38,"tag":610,"props":1160,"children":1161},{"class":612,"line":667},[1162],{"type":38,"tag":610,"props":1163,"children":1164},{},[1165],{"type":44,"value":1166},"  final parsed = (jsonDecode(responseBody) as List\u003Cdynamic>).cast\u003CMap\u003CString, dynamic>>();\n",{"type":38,"tag":610,"props":1168,"children":1169},{"class":612,"line":675},[1170],{"type":38,"tag":610,"props":1171,"children":1172},{},[1173],{"type":44,"value":1174},"  return parsed.map\u003CUser>((json) => User.fromJson(json)).toList();\n",{"type":38,"tag":610,"props":1176,"children":1177},{"class":612,"line":684},[1178],{"type":38,"tag":610,"props":1179,"children":1180},{},[1181],{"type":44,"value":956},{"type":38,"tag":610,"props":1183,"children":1184},{"class":612,"line":693},[1185],{"type":38,"tag":610,"props":1186,"children":1187},{"emptyLinePlaceholder":280},[1188],{"type":44,"value":628},{"type":38,"tag":610,"props":1190,"children":1191},{"class":612,"line":702},[1192],{"type":38,"tag":610,"props":1193,"children":1194},{},[1195],{"type":44,"value":1196},"Future\u003CList\u003CUser>> fetchUsers(http.Client client) async {\n",{"type":38,"tag":610,"props":1198,"children":1199},{"class":612,"line":711},[1200],{"type":38,"tag":610,"props":1201,"children":1202},{},[1203],{"type":44,"value":1007},{"type":38,"tag":610,"props":1205,"children":1206},{"class":612,"line":720},[1207],{"type":38,"tag":610,"props":1208,"children":1209},{},[1210],{"type":44,"value":1211},"    Uri.parse('https:\u002F\u002Fapi.example.com\u002Fusers'),\n",{"type":38,"tag":610,"props":1213,"children":1214},{"class":612,"line":728},[1215],{"type":38,"tag":610,"props":1216,"children":1217},{},[1218],{"type":44,"value":1023},{"type":38,"tag":610,"props":1220,"children":1221},{"class":612,"line":737},[1222],{"type":38,"tag":610,"props":1223,"children":1224},{},[1225],{"type":44,"value":1031},{"type":38,"tag":610,"props":1227,"children":1228},{"class":612,"line":746},[1229],{"type":38,"tag":610,"props":1230,"children":1231},{"emptyLinePlaceholder":280},[1232],{"type":44,"value":628},{"type":38,"tag":610,"props":1234,"children":1235},{"class":612,"line":755},[1236],{"type":38,"tag":610,"props":1237,"children":1238},{},[1239],{"type":44,"value":1046},{"type":38,"tag":610,"props":1241,"children":1242},{"class":612,"line":764},[1243],{"type":38,"tag":610,"props":1244,"children":1245},{},[1246],{"type":44,"value":1247},"    \u002F\u002F Offload expensive parsing to a background isolate\n",{"type":38,"tag":610,"props":1249,"children":1250},{"class":612,"line":773},[1251],{"type":38,"tag":610,"props":1252,"children":1253},{},[1254],{"type":44,"value":1255},"    return compute(parseUsers, response.body);\n",{"type":38,"tag":610,"props":1257,"children":1258},{"class":612,"line":782},[1259],{"type":38,"tag":610,"props":1260,"children":1261},{},[1262],{"type":44,"value":1078},{"type":38,"tag":610,"props":1264,"children":1265},{"class":612,"line":791},[1266],{"type":38,"tag":610,"props":1267,"children":1268},{},[1269],{"type":44,"value":1270},"    throw Exception('Failed to load users');\n",{"type":38,"tag":610,"props":1272,"children":1273},{"class":612,"line":800},[1274],{"type":38,"tag":610,"props":1275,"children":1276},{},[1277],{"type":44,"value":869},{"type":38,"tag":610,"props":1279,"children":1280},{"class":612,"line":809},[1281],{"type":38,"tag":610,"props":1282,"children":1283},{},[1284],{"type":44,"value":956},{"type":38,"tag":1286,"props":1287,"children":1288},"style",{},[1289],{"type":44,"value":1290},"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);}",{"items":1292,"total":818},[1293,1304,1315,1327,1338,1347,1359],{"slug":1294,"name":1294,"fn":1295,"description":1296,"org":1297,"tags":1298,"stars":19,"repoUrl":20,"updatedAt":1303},"dart-add-unit-test","write unit tests for Dart code","Write and organize unit tests for functions, methods, and classes using `package:test`. Use when creating new logic or fixing bugs to ensure code remains correct and regression-free.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1299,1300],{"name":17,"slug":18,"type":15},{"name":1301,"slug":1302,"type":15},"Testing","testing","2026-07-15T05:22:40.104823",{"slug":1305,"name":1305,"fn":1306,"description":1307,"org":1308,"tags":1309,"stars":19,"repoUrl":20,"updatedAt":1314},"dart-build-cli-app","build Dart command line applications","Entrypoint structure, exit codes, cross-platform scripts. Use when building command line utilities, scripts, or applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1310,1313],{"name":1311,"slug":1312,"type":15},"CLI","cli",{"name":17,"slug":18,"type":15},"2026-07-15T05:22:18.863572",{"slug":1316,"name":1316,"fn":1317,"description":1318,"org":1319,"tags":1320,"stars":19,"repoUrl":20,"updatedAt":1326},"dart-collect-coverage","collect Dart test coverage reports","Collect coverage using the coverage packge and create an LCOV report",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1321,1322,1325],{"name":17,"slug":18,"type":15},{"name":1323,"slug":1324,"type":15},"Reporting","reporting",{"name":1301,"slug":1302,"type":15},"2026-07-15T05:22:21.38636",{"slug":1328,"name":1328,"fn":1329,"description":1330,"org":1331,"tags":1332,"stars":19,"repoUrl":20,"updatedAt":1337},"dart-fix-runtime-errors","debug and fix Dart runtime errors","Uses get_runtime_errors and lsp to fetch an active stack trace, locate the failing line, apply a fix, and verify resolution via hot_reload.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1333,1334],{"name":17,"slug":18,"type":15},{"name":1335,"slug":1336,"type":15},"Debugging","debugging","2026-07-15T05:22:22.622501",{"slug":1339,"name":1339,"fn":1340,"description":1341,"org":1342,"tags":1343,"stars":19,"repoUrl":20,"updatedAt":1346},"dart-generate-test-mocks","generate mock objects for Dart tests","Define and generate mock objects for external dependencies using `package:mockito` and `build_runner`. Use when unit testing classes that depend on complex external services like APIs or databases.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1344,1345],{"name":17,"slug":18,"type":15},{"name":1301,"slug":1302,"type":15},"2026-07-15T05:22:42.607449",{"slug":1348,"name":1348,"fn":1349,"description":1350,"org":1351,"tags":1352,"stars":19,"repoUrl":20,"updatedAt":1358},"dart-migrate-to-checks-package","migrate test matchers to checks package","Replace the usage of `expect` and similar functions from `package:matcher`\nto `package:checks` equivalents.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1353,1354,1357],{"name":17,"slug":18,"type":15},{"name":1355,"slug":1356,"type":15},"Migration","migration",{"name":1301,"slug":1302,"type":15},"2026-07-15T05:22:31.276564",{"slug":1360,"name":1360,"fn":1361,"description":1362,"org":1363,"tags":1364,"stars":19,"repoUrl":20,"updatedAt":1370},"dart-resolve-package-conflicts","resolve Dart package version conflicts","Workflow for fixing package version conflicts. Use this when `pub get` fails due to incompatible package versions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1365,1366,1367],{"name":17,"slug":18,"type":15},{"name":1335,"slug":1336,"type":15},{"name":1368,"slug":1369,"type":15},"Engineering","engineering","2026-07-15T05:22:30.059335",{"items":1372,"total":845},[1373,1378,1383,1389,1394,1399,1405,1411,1423,1435,1449,1459],{"slug":1294,"name":1294,"fn":1295,"description":1296,"org":1374,"tags":1375,"stars":19,"repoUrl":20,"updatedAt":1303},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1376,1377],{"name":17,"slug":18,"type":15},{"name":1301,"slug":1302,"type":15},{"slug":1305,"name":1305,"fn":1306,"description":1307,"org":1379,"tags":1380,"stars":19,"repoUrl":20,"updatedAt":1314},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1381,1382],{"name":1311,"slug":1312,"type":15},{"name":17,"slug":18,"type":15},{"slug":1316,"name":1316,"fn":1317,"description":1318,"org":1384,"tags":1385,"stars":19,"repoUrl":20,"updatedAt":1326},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1386,1387,1388],{"name":17,"slug":18,"type":15},{"name":1323,"slug":1324,"type":15},{"name":1301,"slug":1302,"type":15},{"slug":1328,"name":1328,"fn":1329,"description":1330,"org":1390,"tags":1391,"stars":19,"repoUrl":20,"updatedAt":1337},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1392,1393],{"name":17,"slug":18,"type":15},{"name":1335,"slug":1336,"type":15},{"slug":1339,"name":1339,"fn":1340,"description":1341,"org":1395,"tags":1396,"stars":19,"repoUrl":20,"updatedAt":1346},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1397,1398],{"name":17,"slug":18,"type":15},{"name":1301,"slug":1302,"type":15},{"slug":1348,"name":1348,"fn":1349,"description":1350,"org":1400,"tags":1401,"stars":19,"repoUrl":20,"updatedAt":1358},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1402,1403,1404],{"name":17,"slug":18,"type":15},{"name":1355,"slug":1356,"type":15},{"name":1301,"slug":1302,"type":15},{"slug":1360,"name":1360,"fn":1361,"description":1362,"org":1406,"tags":1407,"stars":19,"repoUrl":20,"updatedAt":1370},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1408,1409,1410],{"name":17,"slug":18,"type":15},{"name":1335,"slug":1336,"type":15},{"name":1368,"slug":1369,"type":15},{"slug":1412,"name":1412,"fn":1413,"description":1414,"org":1415,"tags":1416,"stars":19,"repoUrl":20,"updatedAt":1422},"dart-run-static-analysis","run static analysis and apply fixes","Execute `dart analyze` to identify warnings and errors, and use `dart fix --apply` to automatically resolve mechanical lint issues. Use during development to ensure code quality and before committing changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1417,1420,1421],{"name":1418,"slug":1419,"type":15},"Code Analysis","code-analysis",{"name":17,"slug":18,"type":15},{"name":1335,"slug":1336,"type":15},"2026-07-15T05:22:23.861119",{"slug":1424,"name":1424,"fn":1425,"description":1426,"org":1427,"tags":1428,"stars":19,"repoUrl":20,"updatedAt":1434},"dart-setup-ffi-assets","package C\u002FC++ assets for Dart","Guides agents in compiling and packaging C\u002FC++ source code into dynamic or static libraries (Code Assets) using Dart's Native Assets hook system (via hook\u002Fbuild.dart and hook\u002Flink.dart utilizing package:hooks and package:native_toolchain_c). Use when a user asks to: 'setup native assets', 'compile C\u002FC++ source code', 'bundle dynamic libraries', 'build native C code', 'link native assets', 'implement build.dart or link.dart hooks', or 'integrate C\u002FC++ interop in Dart\u002FFlutter'. Helps agents avoid manual toolchain orchestration and configures secure hash-validated binary downloads or advanced linker tree-shaking with package:record_use mapping.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1429,1430,1433],{"name":17,"slug":18,"type":15},{"name":1431,"slug":1432,"type":15},"Deployment","deployment",{"name":1368,"slug":1369,"type":15},"2026-07-15T05:22:20.138636",{"slug":1436,"name":1436,"fn":1437,"description":1438,"org":1439,"tags":1440,"stars":19,"repoUrl":20,"updatedAt":1448},"dart-skills-lint-setup","configure dart_skills_lint for Dart projects","Use this skill when you need to set up validation for AI agent skills in a Dart project for the first time.\nAdds the linter as a dev_dependency, creates a configuration file, and generates a baseline for legacy repos.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1441,1442,1445],{"name":17,"slug":18,"type":15},{"name":1443,"slug":1444,"type":15},"Plugin Development","plugin-development",{"name":1446,"slug":1447,"type":15},"QA","qa","2026-07-15T05:22:47.488998",{"slug":1450,"name":1450,"fn":1451,"description":1452,"org":1453,"tags":1454,"stars":19,"repoUrl":20,"updatedAt":1458},"dart-skills-lint-validation","validate agent skills with dart_skills_lint","Use this skill when you need to validate AI agent skills with dart_skills_lint — running the linter, interpreting failures, fixing violations, and authoring custom rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1455,1456,1457],{"name":17,"slug":18,"type":15},{"name":1443,"slug":1444,"type":15},{"name":1446,"slug":1447,"type":15},"2026-07-21T05:38:34.451024",{"slug":1460,"name":1460,"fn":1461,"description":1462,"org":1463,"tags":1464,"stars":19,"repoUrl":20,"updatedAt":1467},"dart-use-ffigen","generate FFI bindings with ffigen","Guide agents to use `package:ffigen` to automatically generate FFI bindings instead of writing them manually. Use this skill when a task involves writing new FFI bindings, extending C\u002FObjective-C\u002FSwift integrations, or replacing hand-crafted `dart:ffi` setups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1465,1466],{"name":17,"slug":18,"type":15},{"name":1368,"slug":1369,"type":15},"2026-07-15T05:22:17.592351"]