[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-flutter-dart-write-documentation":3,"mdc-hhr5hc-key":32,"related-org-flutter-dart-write-documentation":1190,"related-repo-flutter-dart-write-documentation":1321},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":30,"mdContent":31},"dart-write-documentation","write API documentation for Dart code","Rules and formatting guidelines for writing Dart \u002F\u002F\u002F API documentation and doc comments. Use when documenting Dart code, writing doc comments for any Dart declaration (libraries, classes, methods, variables, etc.), or when instructed to follow the Effective Dart documentation guidelines.",{"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,19],{"name":13,"slug":14,"type":15},"Documentation","documentation","tag",{"name":17,"slug":18,"type":15},"Dart","dart",{"name":20,"slug":21,"type":15},"Technical Writing","technical-writing",2664,"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins","2026-08-26T04:11:16.10549",null,155,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":25},[],"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins\u002Ftree\u002FHEAD\u002Fskills\u002Fdart-write-documentation","---\nname: dart-write-documentation\ndescription: \"Rules and formatting guidelines for writing Dart \u002F\u002F\u002F API documentation and doc comments. Use when documenting Dart code, writing doc comments for any Dart declaration (libraries, classes, methods, variables, etc.), or when instructed to follow the Effective Dart documentation guidelines.\"\n---\n\n# Writing Dart API Documentation\n\n## Contents\n*   [1. Scope and Structure](#1-scope-and-structure)\n*   [2. Tone and Openers](#2-tone-and-openers)\n*   [3. Strict Anti-Patterns (Banned)](#3-strict-anti-patterns-banned)\n*   [4. Technical Placement & Resolution](#4-technical-placement--resolution)\n*   [5. Linking and Markdown](#5-linking-and-markdown)\n*   [6. Verification](#6-verification)\n*   [Examples](#examples)\n\nWhen asked to write or update documentation for Dart code, you must strictly follow these formatting rules based on the \"Effective Dart: Documentation\" guidelines.\n\n## 1. Scope and Structure\n*   **Target Public APIs:** Focus your documentation efforts on public declarations. Do not document private members (those starting with an underscore `_`) unless explicitly instructed, as they do not appear in generated API reference sites.\n*   **Always use `\u002F\u002F\u002F`:** Use `\u002F\u002F\u002F` consecutive line comments for all API documentation. Never use `\u002F** ... *\u002F` block comments.\n*   **Proper Sentences:** Format all comments like proper sentences. Capitalize the first word (unless it's a lowercase identifier) and end with a period.\n*   **The First Paragraph:** The first paragraph of a doc comment must be a single, concise sentence that summarizes the element. End it with a period. Dartdoc extracts this verbatim for list views.\n*   **Separation:** Always separate the first sentence summary from the rest of the documentation with a blank line containing `\u002F\u002F\u002F`. Never output a completely empty newline (e.g., a `\\n` without `\u002F\u002F\u002F`), as this terminates the doc comment block.\n\n## 2. Tone and Openers\n*   **Noun phrases for properties:** Start descriptions of variables, getters, or setters with a noun phrase.\n    `\u002F\u002F\u002F The radius of the sphere.` (Not \"Gets the radius...\")\n*   **\"Whether\" for booleans:** Start documentation for boolean properties with \"Whether\".\n    `\u002F\u002F\u002F Whether the connection is active.`\n*   **Third-person verbs for methods:** Start descriptions of methods or functions with a third-person verb that describes what it does.\n    `\u002F\u002F\u002F Initializes the database.` (Not \"Initialize\" or \"This method initializes\").\n*   **Avoid redundancy:** Do not restate the signature or the element name. Do not say \"This class is a...\" or \"The foo method does...\".\n\n## 3. Strict Anti-Patterns (Banned)\n*   **No Javadoc\u002FTSDoc Tags (`@param`, `@return`, `@throws`, etc.):** Never use Javadoc-style tags (`@param`, `@return`, `@returns`, `@throws`, `@exception`, `@see`, `@type`). Instead, weave parameter names, return behavior, and exceptions into the prose.\n\n## 4. Technical Placement & Resolution\n*   **Annotations (`@override`, etc.):** Doc comments must be placed before metadata annotations.\n*   **Inherited Documentation:** Avoid duplicating doc comments on `@override` members if the behavior does not differ from the superclass or interface. Dartdoc automatically inherits the base documentation.\n*   **Getter\u002FSetter Pairs:** If a property has both a getter and a setter, place the documentation only on the getter. Tooling will emit a warning if both are documented.\n*   **Default Constructors:** To link to a default, unnamed constructor in doc comments, you must use the `.new` syntax (e.g., `[ClassName.new]`).\n\n## 5. Linking and Markdown\n*   **Square brackets (`[identifier]`) for in-scope symbols:** Use square brackets to link to any in-scope identifier (parameters, classes, methods, fields, and top-level functions) so dartdoc can resolve them. Never use backticks for parameters.\n*   **No parentheses in method links:** Avoid parentheses in links (e.g., use `[String.contains]`, not `[String.contains()]`).\n*   **Backticks for keywords & literals:** Use backticks for keywords, literals, and arbitrary expressions (e.g. `` `null` ``, `` `true` ``, `` `void` ``). Never put keywords in square brackets (avoid `[null]` or `[true]`).\n*   **Out-of-Scope Links:** If you need to link to a symbol that is not imported by the current library, use the `@docImport` directive at the top of the file (on the `library;` declaration) rather than adding a standard `import`.\n*   **Code Blocks:** For code samples, always label the language fence. Use ```` ```dart ```` for Dart, or ```` ```sh ```` for shell commands. Do not leave code blocks unlabelled, as Dartdoc will attempt to auto-detect the language and frequently guesses wrong.\n*   **Formatting:** Use standard Markdown (bold, lists, etc.) after the first paragraph to fully explain edge cases, exceptions thrown, and internal behavior the caller cannot see.\n\n## 6. Verification\nAfter writing or updating doc comments:\n1. Run `dart analyze` to ensure all bracketed references resolve properly without triggering `comment_references` warnings.\n2. (Optional) Run `dart doc` to verify the generated documentation renders cleanly.\n\n## Examples\n\n### 1. Banned Tags vs. Prose\n**Bad:**\n```dart\n\u002F\u002F\u002F This method fetches data.\n\u002F\u002F\u002F @param force true to force reload.\n\u002F\u002F\u002F @return the data\n\u002F\u002F\u002F @throws NetworkException if host is unreachable.\nData load(bool force) { ... }\n```\n**Good:**\n```dart\n\u002F\u002F\u002F Fetches the remote data.\n\u002F\u002F\u002F\n\u002F\u002F\u002F If [force] is true, this bypasses the local cache and forces a\n\u002F\u002F\u002F network request.\n\u002F\u002F\u002F\n\u002F\u002F\u002F Throws a [NetworkException] if the host is unreachable.\nData load(bool force) { ... }\n```\n\n### 2. The Annotation Placement Trap\n**Bad:**\n```dart\n@override\n\u002F\u002F\u002F Renders the widget to the screen.\nWidget build(BuildContext context) { ... }\n```\n**Good:**\n```dart\n\u002F\u002F\u002F Renders the widget to the screen.\n@override\nWidget build(BuildContext context) { ... }\n```\n\n### 3. Openers and Tone\n**Bad:**\n```dart\n\u002F\u002F\u002F Gets if the connection is active.\nbool get isActive => _active;\n\n\u002F\u002F\u002F This method initializes the connection.\nvoid init() { ... }\n```\n**Good:**\n```dart\n\u002F\u002F\u002F Whether the connection is active.\nbool get isActive => _active;\n\n\u002F\u002F\u002F Initializes the connection.\nvoid init() { ... }\n```\n\n### 4. Constructor Linking\n**Bad:**\n```dart\n\u002F\u002F\u002F Creates a new user. Similar to calling [User()].\nUser.create() { ... }\n```\n**Good:**\n```dart\n\u002F\u002F\u002F Creates a new user. Similar to calling [User.new].\nUser.create() { ... }\n```\n\n### 5. Out-of-Scope Links (@docImport)\n**Bad:**\n```dart\nimport 'package:http\u002Fhttp.dart'; \u002F\u002F Adds unnecessary runtime dependency just for docs\n\n\u002F\u002F\u002F To use this, you must pass a [Client].\n```\n**Good:**\n```dart\n\u002F\u002F\u002F @docImport 'package:http\u002Fhttp.dart';\nlibrary;\n\n\u002F\u002F\u002F To use this, you must pass a [Client].\n```\n",{"data":33,"body":34},{"name":4,"description":6},{"type":35,"children":36},"root",[37,46,53,122,128,133,241,246,311,316,399,404,477,482,645,650,655,693,698,705,713,770,778,841,847,854,885,892,920,926,933,981,988,1032,1038,1045,1068,1075,1097,1103,1110,1140,1147,1184],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"writing-dart-api-documentation",[43],{"type":44,"value":45},"text","Writing Dart API Documentation",{"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,95,104,113],{"type":38,"tag":58,"props":59,"children":60},"li",{},[61],{"type":38,"tag":62,"props":63,"children":65},"a",{"href":64},"#1-scope-and-structure",[66],{"type":44,"value":67},"1. Scope and Structure",{"type":38,"tag":58,"props":69,"children":70},{},[71],{"type":38,"tag":62,"props":72,"children":74},{"href":73},"#2-tone-and-openers",[75],{"type":44,"value":76},"2. Tone and Openers",{"type":38,"tag":58,"props":78,"children":79},{},[80],{"type":38,"tag":62,"props":81,"children":83},{"href":82},"#3-strict-anti-patterns-banned",[84],{"type":44,"value":85},"3. Strict Anti-Patterns (Banned)",{"type":38,"tag":58,"props":87,"children":88},{},[89],{"type":38,"tag":62,"props":90,"children":92},{"href":91},"#4-technical-placement--resolution",[93],{"type":44,"value":94},"4. Technical Placement & Resolution",{"type":38,"tag":58,"props":96,"children":97},{},[98],{"type":38,"tag":62,"props":99,"children":101},{"href":100},"#5-linking-and-markdown",[102],{"type":44,"value":103},"5. Linking and Markdown",{"type":38,"tag":58,"props":105,"children":106},{},[107],{"type":38,"tag":62,"props":108,"children":110},{"href":109},"#6-verification",[111],{"type":44,"value":112},"6. Verification",{"type":38,"tag":58,"props":114,"children":115},{},[116],{"type":38,"tag":62,"props":117,"children":119},{"href":118},"#examples",[120],{"type":44,"value":121},"Examples",{"type":38,"tag":123,"props":124,"children":125},"p",{},[126],{"type":44,"value":127},"When asked to write or update documentation for Dart code, you must strictly follow these formatting rules based on the \"Effective Dart: Documentation\" guidelines.",{"type":38,"tag":47,"props":129,"children":131},{"id":130},"_1-scope-and-structure",[132],{"type":44,"value":67},{"type":38,"tag":54,"props":134,"children":135},{},[136,156,189,199,209],{"type":38,"tag":58,"props":137,"children":138},{},[139,145,147,154],{"type":38,"tag":140,"props":141,"children":142},"strong",{},[143],{"type":44,"value":144},"Target Public APIs:",{"type":44,"value":146}," Focus your documentation efforts on public declarations. Do not document private members (those starting with an underscore ",{"type":38,"tag":148,"props":149,"children":151},"code",{"className":150},[],[152],{"type":44,"value":153},"_",{"type":44,"value":155},") unless explicitly instructed, as they do not appear in generated API reference sites.",{"type":38,"tag":58,"props":157,"children":158},{},[159,172,174,179,181,187],{"type":38,"tag":140,"props":160,"children":161},{},[162,164,170],{"type":44,"value":163},"Always use ",{"type":38,"tag":148,"props":165,"children":167},{"className":166},[],[168],{"type":44,"value":169},"\u002F\u002F\u002F",{"type":44,"value":171},":",{"type":44,"value":173}," Use ",{"type":38,"tag":148,"props":175,"children":177},{"className":176},[],[178],{"type":44,"value":169},{"type":44,"value":180}," consecutive line comments for all API documentation. Never use ",{"type":38,"tag":148,"props":182,"children":184},{"className":183},[],[185],{"type":44,"value":186},"\u002F** ... *\u002F",{"type":44,"value":188}," block comments.",{"type":38,"tag":58,"props":190,"children":191},{},[192,197],{"type":38,"tag":140,"props":193,"children":194},{},[195],{"type":44,"value":196},"Proper Sentences:",{"type":44,"value":198}," Format all comments like proper sentences. Capitalize the first word (unless it's a lowercase identifier) and end with a period.",{"type":38,"tag":58,"props":200,"children":201},{},[202,207],{"type":38,"tag":140,"props":203,"children":204},{},[205],{"type":44,"value":206},"The First Paragraph:",{"type":44,"value":208}," The first paragraph of a doc comment must be a single, concise sentence that summarizes the element. End it with a period. Dartdoc extracts this verbatim for list views.",{"type":38,"tag":58,"props":210,"children":211},{},[212,217,219,224,226,232,234,239],{"type":38,"tag":140,"props":213,"children":214},{},[215],{"type":44,"value":216},"Separation:",{"type":44,"value":218}," Always separate the first sentence summary from the rest of the documentation with a blank line containing ",{"type":38,"tag":148,"props":220,"children":222},{"className":221},[],[223],{"type":44,"value":169},{"type":44,"value":225},". Never output a completely empty newline (e.g., a ",{"type":38,"tag":148,"props":227,"children":229},{"className":228},[],[230],{"type":44,"value":231},"\\n",{"type":44,"value":233}," without ",{"type":38,"tag":148,"props":235,"children":237},{"className":236},[],[238],{"type":44,"value":169},{"type":44,"value":240},"), as this terminates the doc comment block.",{"type":38,"tag":47,"props":242,"children":244},{"id":243},"_2-tone-and-openers",[245],{"type":44,"value":76},{"type":38,"tag":54,"props":247,"children":248},{},[249,267,283,301],{"type":38,"tag":58,"props":250,"children":251},{},[252,257,259,265],{"type":38,"tag":140,"props":253,"children":254},{},[255],{"type":44,"value":256},"Noun phrases for properties:",{"type":44,"value":258}," Start descriptions of variables, getters, or setters with a noun phrase.\n",{"type":38,"tag":148,"props":260,"children":262},{"className":261},[],[263],{"type":44,"value":264},"\u002F\u002F\u002F The radius of the sphere.",{"type":44,"value":266}," (Not \"Gets the radius...\")",{"type":38,"tag":58,"props":268,"children":269},{},[270,275,277],{"type":38,"tag":140,"props":271,"children":272},{},[273],{"type":44,"value":274},"\"Whether\" for booleans:",{"type":44,"value":276}," Start documentation for boolean properties with \"Whether\".\n",{"type":38,"tag":148,"props":278,"children":280},{"className":279},[],[281],{"type":44,"value":282},"\u002F\u002F\u002F Whether the connection is active.",{"type":38,"tag":58,"props":284,"children":285},{},[286,291,293,299],{"type":38,"tag":140,"props":287,"children":288},{},[289],{"type":44,"value":290},"Third-person verbs for methods:",{"type":44,"value":292}," Start descriptions of methods or functions with a third-person verb that describes what it does.\n",{"type":38,"tag":148,"props":294,"children":296},{"className":295},[],[297],{"type":44,"value":298},"\u002F\u002F\u002F Initializes the database.",{"type":44,"value":300}," (Not \"Initialize\" or \"This method initializes\").",{"type":38,"tag":58,"props":302,"children":303},{},[304,309],{"type":38,"tag":140,"props":305,"children":306},{},[307],{"type":44,"value":308},"Avoid redundancy:",{"type":44,"value":310}," Do not restate the signature or the element name. Do not say \"This class is a...\" or \"The foo method does...\".",{"type":38,"tag":47,"props":312,"children":314},{"id":313},"_3-strict-anti-patterns-banned",[315],{"type":44,"value":85},{"type":38,"tag":54,"props":317,"children":318},{},[319],{"type":38,"tag":58,"props":320,"children":321},{},[322,350,352,357,358,363,364,370,371,376,377,383,384,390,391,397],{"type":38,"tag":140,"props":323,"children":324},{},[325,327,333,335,341,342,348],{"type":44,"value":326},"No Javadoc\u002FTSDoc Tags (",{"type":38,"tag":148,"props":328,"children":330},{"className":329},[],[331],{"type":44,"value":332},"@param",{"type":44,"value":334},", ",{"type":38,"tag":148,"props":336,"children":338},{"className":337},[],[339],{"type":44,"value":340},"@return",{"type":44,"value":334},{"type":38,"tag":148,"props":343,"children":345},{"className":344},[],[346],{"type":44,"value":347},"@throws",{"type":44,"value":349},", etc.):",{"type":44,"value":351}," Never use Javadoc-style tags (",{"type":38,"tag":148,"props":353,"children":355},{"className":354},[],[356],{"type":44,"value":332},{"type":44,"value":334},{"type":38,"tag":148,"props":359,"children":361},{"className":360},[],[362],{"type":44,"value":340},{"type":44,"value":334},{"type":38,"tag":148,"props":365,"children":367},{"className":366},[],[368],{"type":44,"value":369},"@returns",{"type":44,"value":334},{"type":38,"tag":148,"props":372,"children":374},{"className":373},[],[375],{"type":44,"value":347},{"type":44,"value":334},{"type":38,"tag":148,"props":378,"children":380},{"className":379},[],[381],{"type":44,"value":382},"@exception",{"type":44,"value":334},{"type":38,"tag":148,"props":385,"children":387},{"className":386},[],[388],{"type":44,"value":389},"@see",{"type":44,"value":334},{"type":38,"tag":148,"props":392,"children":394},{"className":393},[],[395],{"type":44,"value":396},"@type",{"type":44,"value":398},"). Instead, weave parameter names, return behavior, and exceptions into the prose.",{"type":38,"tag":47,"props":400,"children":402},{"id":401},"_4-technical-placement-resolution",[403],{"type":44,"value":94},{"type":38,"tag":54,"props":405,"children":406},{},[407,424,441,451],{"type":38,"tag":58,"props":408,"children":409},{},[410,422],{"type":38,"tag":140,"props":411,"children":412},{},[413,415,421],{"type":44,"value":414},"Annotations (",{"type":38,"tag":148,"props":416,"children":418},{"className":417},[],[419],{"type":44,"value":420},"@override",{"type":44,"value":349},{"type":44,"value":423}," Doc comments must be placed before metadata annotations.",{"type":38,"tag":58,"props":425,"children":426},{},[427,432,434,439],{"type":38,"tag":140,"props":428,"children":429},{},[430],{"type":44,"value":431},"Inherited Documentation:",{"type":44,"value":433}," Avoid duplicating doc comments on ",{"type":38,"tag":148,"props":435,"children":437},{"className":436},[],[438],{"type":44,"value":420},{"type":44,"value":440}," members if the behavior does not differ from the superclass or interface. Dartdoc automatically inherits the base documentation.",{"type":38,"tag":58,"props":442,"children":443},{},[444,449],{"type":38,"tag":140,"props":445,"children":446},{},[447],{"type":44,"value":448},"Getter\u002FSetter Pairs:",{"type":44,"value":450}," If a property has both a getter and a setter, place the documentation only on the getter. Tooling will emit a warning if both are documented.",{"type":38,"tag":58,"props":452,"children":453},{},[454,459,461,467,469,475],{"type":38,"tag":140,"props":455,"children":456},{},[457],{"type":44,"value":458},"Default Constructors:",{"type":44,"value":460}," To link to a default, unnamed constructor in doc comments, you must use the ",{"type":38,"tag":148,"props":462,"children":464},{"className":463},[],[465],{"type":44,"value":466},".new",{"type":44,"value":468}," syntax (e.g., ",{"type":38,"tag":148,"props":470,"children":472},{"className":471},[],[473],{"type":44,"value":474},"[ClassName.new]",{"type":44,"value":476},").",{"type":38,"tag":47,"props":478,"children":480},{"id":479},"_5-linking-and-markdown",[481],{"type":44,"value":103},{"type":38,"tag":54,"props":483,"children":484},{},[485,503,528,575,609,635],{"type":38,"tag":58,"props":486,"children":487},{},[488,501],{"type":38,"tag":140,"props":489,"children":490},{},[491,493,499],{"type":44,"value":492},"Square brackets (",{"type":38,"tag":148,"props":494,"children":496},{"className":495},[],[497],{"type":44,"value":498},"[identifier]",{"type":44,"value":500},") for in-scope symbols:",{"type":44,"value":502}," Use square brackets to link to any in-scope identifier (parameters, classes, methods, fields, and top-level functions) so dartdoc can resolve them. Never use backticks for parameters.",{"type":38,"tag":58,"props":504,"children":505},{},[506,511,513,519,521,527],{"type":38,"tag":140,"props":507,"children":508},{},[509],{"type":44,"value":510},"No parentheses in method links:",{"type":44,"value":512}," Avoid parentheses in links (e.g., use ",{"type":38,"tag":148,"props":514,"children":516},{"className":515},[],[517],{"type":44,"value":518},"[String.contains]",{"type":44,"value":520},", not ",{"type":38,"tag":148,"props":522,"children":524},{"className":523},[],[525],{"type":44,"value":526},"[String.contains()]",{"type":44,"value":476},{"type":38,"tag":58,"props":529,"children":530},{},[531,536,538,544,545,551,552,558,560,566,568,574],{"type":38,"tag":140,"props":532,"children":533},{},[534],{"type":44,"value":535},"Backticks for keywords & literals:",{"type":44,"value":537}," Use backticks for keywords, literals, and arbitrary expressions (e.g. ",{"type":38,"tag":148,"props":539,"children":541},{"className":540},[],[542],{"type":44,"value":543},"`null`",{"type":44,"value":334},{"type":38,"tag":148,"props":546,"children":548},{"className":547},[],[549],{"type":44,"value":550},"`true`",{"type":44,"value":334},{"type":38,"tag":148,"props":553,"children":555},{"className":554},[],[556],{"type":44,"value":557},"`void`",{"type":44,"value":559},"). Never put keywords in square brackets (avoid ",{"type":38,"tag":148,"props":561,"children":563},{"className":562},[],[564],{"type":44,"value":565},"[null]",{"type":44,"value":567}," or ",{"type":38,"tag":148,"props":569,"children":571},{"className":570},[],[572],{"type":44,"value":573},"[true]",{"type":44,"value":476},{"type":38,"tag":58,"props":576,"children":577},{},[578,583,585,591,593,599,601,607],{"type":38,"tag":140,"props":579,"children":580},{},[581],{"type":44,"value":582},"Out-of-Scope Links:",{"type":44,"value":584}," If you need to link to a symbol that is not imported by the current library, use the ",{"type":38,"tag":148,"props":586,"children":588},{"className":587},[],[589],{"type":44,"value":590},"@docImport",{"type":44,"value":592}," directive at the top of the file (on the ",{"type":38,"tag":148,"props":594,"children":596},{"className":595},[],[597],{"type":44,"value":598},"library;",{"type":44,"value":600}," declaration) rather than adding a standard ",{"type":38,"tag":148,"props":602,"children":604},{"className":603},[],[605],{"type":44,"value":606},"import",{"type":44,"value":608},".",{"type":38,"tag":58,"props":610,"children":611},{},[612,617,619,625,627,633],{"type":38,"tag":140,"props":613,"children":614},{},[615],{"type":44,"value":616},"Code Blocks:",{"type":44,"value":618}," For code samples, always label the language fence. Use ",{"type":38,"tag":148,"props":620,"children":622},{"className":621},[],[623],{"type":44,"value":624},"```dart",{"type":44,"value":626}," for Dart, or ",{"type":38,"tag":148,"props":628,"children":630},{"className":629},[],[631],{"type":44,"value":632},"```sh",{"type":44,"value":634}," for shell commands. Do not leave code blocks unlabelled, as Dartdoc will attempt to auto-detect the language and frequently guesses wrong.",{"type":38,"tag":58,"props":636,"children":637},{},[638,643],{"type":38,"tag":140,"props":639,"children":640},{},[641],{"type":44,"value":642},"Formatting:",{"type":44,"value":644}," Use standard Markdown (bold, lists, etc.) after the first paragraph to fully explain edge cases, exceptions thrown, and internal behavior the caller cannot see.",{"type":38,"tag":47,"props":646,"children":648},{"id":647},"_6-verification",[649],{"type":44,"value":112},{"type":38,"tag":123,"props":651,"children":652},{},[653],{"type":44,"value":654},"After writing or updating doc comments:",{"type":38,"tag":656,"props":657,"children":658},"ol",{},[659,680],{"type":38,"tag":58,"props":660,"children":661},{},[662,664,670,672,678],{"type":44,"value":663},"Run ",{"type":38,"tag":148,"props":665,"children":667},{"className":666},[],[668],{"type":44,"value":669},"dart analyze",{"type":44,"value":671}," to ensure all bracketed references resolve properly without triggering ",{"type":38,"tag":148,"props":673,"children":675},{"className":674},[],[676],{"type":44,"value":677},"comment_references",{"type":44,"value":679}," warnings.",{"type":38,"tag":58,"props":681,"children":682},{},[683,685,691],{"type":44,"value":684},"(Optional) Run ",{"type":38,"tag":148,"props":686,"children":688},{"className":687},[],[689],{"type":44,"value":690},"dart doc",{"type":44,"value":692}," to verify the generated documentation renders cleanly.",{"type":38,"tag":47,"props":694,"children":696},{"id":695},"examples",[697],{"type":44,"value":121},{"type":38,"tag":699,"props":700,"children":702},"h3",{"id":701},"_1-banned-tags-vs-prose",[703],{"type":44,"value":704},"1. Banned Tags vs. Prose",{"type":38,"tag":123,"props":706,"children":707},{},[708],{"type":38,"tag":140,"props":709,"children":710},{},[711],{"type":44,"value":712},"Bad:",{"type":38,"tag":714,"props":715,"children":719},"pre",{"className":716,"code":717,"language":18,"meta":718,"style":718},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F\u002F This method fetches data.\n\u002F\u002F\u002F @param force true to force reload.\n\u002F\u002F\u002F @return the data\n\u002F\u002F\u002F @throws NetworkException if host is unreachable.\nData load(bool force) { ... }\n","",[720],{"type":38,"tag":148,"props":721,"children":722},{"__ignoreMap":718},[723,734,743,752,761],{"type":38,"tag":724,"props":725,"children":728},"span",{"class":726,"line":727},"line",1,[729],{"type":38,"tag":724,"props":730,"children":731},{},[732],{"type":44,"value":733},"\u002F\u002F\u002F This method fetches data.\n",{"type":38,"tag":724,"props":735,"children":737},{"class":726,"line":736},2,[738],{"type":38,"tag":724,"props":739,"children":740},{},[741],{"type":44,"value":742},"\u002F\u002F\u002F @param force true to force reload.\n",{"type":38,"tag":724,"props":744,"children":746},{"class":726,"line":745},3,[747],{"type":38,"tag":724,"props":748,"children":749},{},[750],{"type":44,"value":751},"\u002F\u002F\u002F @return the data\n",{"type":38,"tag":724,"props":753,"children":755},{"class":726,"line":754},4,[756],{"type":38,"tag":724,"props":757,"children":758},{},[759],{"type":44,"value":760},"\u002F\u002F\u002F @throws NetworkException if host is unreachable.\n",{"type":38,"tag":724,"props":762,"children":764},{"class":726,"line":763},5,[765],{"type":38,"tag":724,"props":766,"children":767},{},[768],{"type":44,"value":769},"Data load(bool force) { ... }\n",{"type":38,"tag":123,"props":771,"children":772},{},[773],{"type":38,"tag":140,"props":774,"children":775},{},[776],{"type":44,"value":777},"Good:",{"type":38,"tag":714,"props":779,"children":781},{"className":716,"code":780,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F Fetches the remote data.\n\u002F\u002F\u002F\n\u002F\u002F\u002F If [force] is true, this bypasses the local cache and forces a\n\u002F\u002F\u002F network request.\n\u002F\u002F\u002F\n\u002F\u002F\u002F Throws a [NetworkException] if the host is unreachable.\nData load(bool force) { ... }\n",[782],{"type":38,"tag":148,"props":783,"children":784},{"__ignoreMap":718},[785,793,801,809,817,824,833],{"type":38,"tag":724,"props":786,"children":787},{"class":726,"line":727},[788],{"type":38,"tag":724,"props":789,"children":790},{},[791],{"type":44,"value":792},"\u002F\u002F\u002F Fetches the remote data.\n",{"type":38,"tag":724,"props":794,"children":795},{"class":726,"line":736},[796],{"type":38,"tag":724,"props":797,"children":798},{},[799],{"type":44,"value":800},"\u002F\u002F\u002F\n",{"type":38,"tag":724,"props":802,"children":803},{"class":726,"line":745},[804],{"type":38,"tag":724,"props":805,"children":806},{},[807],{"type":44,"value":808},"\u002F\u002F\u002F If [force] is true, this bypasses the local cache and forces a\n",{"type":38,"tag":724,"props":810,"children":811},{"class":726,"line":754},[812],{"type":38,"tag":724,"props":813,"children":814},{},[815],{"type":44,"value":816},"\u002F\u002F\u002F network request.\n",{"type":38,"tag":724,"props":818,"children":819},{"class":726,"line":763},[820],{"type":38,"tag":724,"props":821,"children":822},{},[823],{"type":44,"value":800},{"type":38,"tag":724,"props":825,"children":827},{"class":726,"line":826},6,[828],{"type":38,"tag":724,"props":829,"children":830},{},[831],{"type":44,"value":832},"\u002F\u002F\u002F Throws a [NetworkException] if the host is unreachable.\n",{"type":38,"tag":724,"props":834,"children":836},{"class":726,"line":835},7,[837],{"type":38,"tag":724,"props":838,"children":839},{},[840],{"type":44,"value":769},{"type":38,"tag":699,"props":842,"children":844},{"id":843},"_2-the-annotation-placement-trap",[845],{"type":44,"value":846},"2. The Annotation Placement Trap",{"type":38,"tag":123,"props":848,"children":849},{},[850],{"type":38,"tag":140,"props":851,"children":852},{},[853],{"type":44,"value":712},{"type":38,"tag":714,"props":855,"children":857},{"className":716,"code":856,"language":18,"meta":718,"style":718},"@override\n\u002F\u002F\u002F Renders the widget to the screen.\nWidget build(BuildContext context) { ... }\n",[858],{"type":38,"tag":148,"props":859,"children":860},{"__ignoreMap":718},[861,869,877],{"type":38,"tag":724,"props":862,"children":863},{"class":726,"line":727},[864],{"type":38,"tag":724,"props":865,"children":866},{},[867],{"type":44,"value":868},"@override\n",{"type":38,"tag":724,"props":870,"children":871},{"class":726,"line":736},[872],{"type":38,"tag":724,"props":873,"children":874},{},[875],{"type":44,"value":876},"\u002F\u002F\u002F Renders the widget to the screen.\n",{"type":38,"tag":724,"props":878,"children":879},{"class":726,"line":745},[880],{"type":38,"tag":724,"props":881,"children":882},{},[883],{"type":44,"value":884},"Widget build(BuildContext context) { ... }\n",{"type":38,"tag":123,"props":886,"children":887},{},[888],{"type":38,"tag":140,"props":889,"children":890},{},[891],{"type":44,"value":777},{"type":38,"tag":714,"props":893,"children":895},{"className":716,"code":894,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F Renders the widget to the screen.\n@override\nWidget build(BuildContext context) { ... }\n",[896],{"type":38,"tag":148,"props":897,"children":898},{"__ignoreMap":718},[899,906,913],{"type":38,"tag":724,"props":900,"children":901},{"class":726,"line":727},[902],{"type":38,"tag":724,"props":903,"children":904},{},[905],{"type":44,"value":876},{"type":38,"tag":724,"props":907,"children":908},{"class":726,"line":736},[909],{"type":38,"tag":724,"props":910,"children":911},{},[912],{"type":44,"value":868},{"type":38,"tag":724,"props":914,"children":915},{"class":726,"line":745},[916],{"type":38,"tag":724,"props":917,"children":918},{},[919],{"type":44,"value":884},{"type":38,"tag":699,"props":921,"children":923},{"id":922},"_3-openers-and-tone",[924],{"type":44,"value":925},"3. Openers and Tone",{"type":38,"tag":123,"props":927,"children":928},{},[929],{"type":38,"tag":140,"props":930,"children":931},{},[932],{"type":44,"value":712},{"type":38,"tag":714,"props":934,"children":936},{"className":716,"code":935,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F Gets if the connection is active.\nbool get isActive => _active;\n\n\u002F\u002F\u002F This method initializes the connection.\nvoid init() { ... }\n",[937],{"type":38,"tag":148,"props":938,"children":939},{"__ignoreMap":718},[940,948,956,965,973],{"type":38,"tag":724,"props":941,"children":942},{"class":726,"line":727},[943],{"type":38,"tag":724,"props":944,"children":945},{},[946],{"type":44,"value":947},"\u002F\u002F\u002F Gets if the connection is active.\n",{"type":38,"tag":724,"props":949,"children":950},{"class":726,"line":736},[951],{"type":38,"tag":724,"props":952,"children":953},{},[954],{"type":44,"value":955},"bool get isActive => _active;\n",{"type":38,"tag":724,"props":957,"children":958},{"class":726,"line":745},[959],{"type":38,"tag":724,"props":960,"children":962},{"emptyLinePlaceholder":961},true,[963],{"type":44,"value":964},"\n",{"type":38,"tag":724,"props":966,"children":967},{"class":726,"line":754},[968],{"type":38,"tag":724,"props":969,"children":970},{},[971],{"type":44,"value":972},"\u002F\u002F\u002F This method initializes the connection.\n",{"type":38,"tag":724,"props":974,"children":975},{"class":726,"line":763},[976],{"type":38,"tag":724,"props":977,"children":978},{},[979],{"type":44,"value":980},"void init() { ... }\n",{"type":38,"tag":123,"props":982,"children":983},{},[984],{"type":38,"tag":140,"props":985,"children":986},{},[987],{"type":44,"value":777},{"type":38,"tag":714,"props":989,"children":991},{"className":716,"code":990,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F Whether the connection is active.\nbool get isActive => _active;\n\n\u002F\u002F\u002F Initializes the connection.\nvoid init() { ... }\n",[992],{"type":38,"tag":148,"props":993,"children":994},{"__ignoreMap":718},[995,1003,1010,1017,1025],{"type":38,"tag":724,"props":996,"children":997},{"class":726,"line":727},[998],{"type":38,"tag":724,"props":999,"children":1000},{},[1001],{"type":44,"value":1002},"\u002F\u002F\u002F Whether the connection is active.\n",{"type":38,"tag":724,"props":1004,"children":1005},{"class":726,"line":736},[1006],{"type":38,"tag":724,"props":1007,"children":1008},{},[1009],{"type":44,"value":955},{"type":38,"tag":724,"props":1011,"children":1012},{"class":726,"line":745},[1013],{"type":38,"tag":724,"props":1014,"children":1015},{"emptyLinePlaceholder":961},[1016],{"type":44,"value":964},{"type":38,"tag":724,"props":1018,"children":1019},{"class":726,"line":754},[1020],{"type":38,"tag":724,"props":1021,"children":1022},{},[1023],{"type":44,"value":1024},"\u002F\u002F\u002F Initializes the connection.\n",{"type":38,"tag":724,"props":1026,"children":1027},{"class":726,"line":763},[1028],{"type":38,"tag":724,"props":1029,"children":1030},{},[1031],{"type":44,"value":980},{"type":38,"tag":699,"props":1033,"children":1035},{"id":1034},"_4-constructor-linking",[1036],{"type":44,"value":1037},"4. Constructor Linking",{"type":38,"tag":123,"props":1039,"children":1040},{},[1041],{"type":38,"tag":140,"props":1042,"children":1043},{},[1044],{"type":44,"value":712},{"type":38,"tag":714,"props":1046,"children":1048},{"className":716,"code":1047,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F Creates a new user. Similar to calling [User()].\nUser.create() { ... }\n",[1049],{"type":38,"tag":148,"props":1050,"children":1051},{"__ignoreMap":718},[1052,1060],{"type":38,"tag":724,"props":1053,"children":1054},{"class":726,"line":727},[1055],{"type":38,"tag":724,"props":1056,"children":1057},{},[1058],{"type":44,"value":1059},"\u002F\u002F\u002F Creates a new user. Similar to calling [User()].\n",{"type":38,"tag":724,"props":1061,"children":1062},{"class":726,"line":736},[1063],{"type":38,"tag":724,"props":1064,"children":1065},{},[1066],{"type":44,"value":1067},"User.create() { ... }\n",{"type":38,"tag":123,"props":1069,"children":1070},{},[1071],{"type":38,"tag":140,"props":1072,"children":1073},{},[1074],{"type":44,"value":777},{"type":38,"tag":714,"props":1076,"children":1078},{"className":716,"code":1077,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F Creates a new user. Similar to calling [User.new].\nUser.create() { ... }\n",[1079],{"type":38,"tag":148,"props":1080,"children":1081},{"__ignoreMap":718},[1082,1090],{"type":38,"tag":724,"props":1083,"children":1084},{"class":726,"line":727},[1085],{"type":38,"tag":724,"props":1086,"children":1087},{},[1088],{"type":44,"value":1089},"\u002F\u002F\u002F Creates a new user. Similar to calling [User.new].\n",{"type":38,"tag":724,"props":1091,"children":1092},{"class":726,"line":736},[1093],{"type":38,"tag":724,"props":1094,"children":1095},{},[1096],{"type":44,"value":1067},{"type":38,"tag":699,"props":1098,"children":1100},{"id":1099},"_5-out-of-scope-links-docimport",[1101],{"type":44,"value":1102},"5. Out-of-Scope Links (@docImport)",{"type":38,"tag":123,"props":1104,"children":1105},{},[1106],{"type":38,"tag":140,"props":1107,"children":1108},{},[1109],{"type":44,"value":712},{"type":38,"tag":714,"props":1111,"children":1113},{"className":716,"code":1112,"language":18,"meta":718,"style":718},"import 'package:http\u002Fhttp.dart'; \u002F\u002F Adds unnecessary runtime dependency just for docs\n\n\u002F\u002F\u002F To use this, you must pass a [Client].\n",[1114],{"type":38,"tag":148,"props":1115,"children":1116},{"__ignoreMap":718},[1117,1125,1132],{"type":38,"tag":724,"props":1118,"children":1119},{"class":726,"line":727},[1120],{"type":38,"tag":724,"props":1121,"children":1122},{},[1123],{"type":44,"value":1124},"import 'package:http\u002Fhttp.dart'; \u002F\u002F Adds unnecessary runtime dependency just for docs\n",{"type":38,"tag":724,"props":1126,"children":1127},{"class":726,"line":736},[1128],{"type":38,"tag":724,"props":1129,"children":1130},{"emptyLinePlaceholder":961},[1131],{"type":44,"value":964},{"type":38,"tag":724,"props":1133,"children":1134},{"class":726,"line":745},[1135],{"type":38,"tag":724,"props":1136,"children":1137},{},[1138],{"type":44,"value":1139},"\u002F\u002F\u002F To use this, you must pass a [Client].\n",{"type":38,"tag":123,"props":1141,"children":1142},{},[1143],{"type":38,"tag":140,"props":1144,"children":1145},{},[1146],{"type":44,"value":777},{"type":38,"tag":714,"props":1148,"children":1150},{"className":716,"code":1149,"language":18,"meta":718,"style":718},"\u002F\u002F\u002F @docImport 'package:http\u002Fhttp.dart';\nlibrary;\n\n\u002F\u002F\u002F To use this, you must pass a [Client].\n",[1151],{"type":38,"tag":148,"props":1152,"children":1153},{"__ignoreMap":718},[1154,1162,1170,1177],{"type":38,"tag":724,"props":1155,"children":1156},{"class":726,"line":727},[1157],{"type":38,"tag":724,"props":1158,"children":1159},{},[1160],{"type":44,"value":1161},"\u002F\u002F\u002F @docImport 'package:http\u002Fhttp.dart';\n",{"type":38,"tag":724,"props":1163,"children":1164},{"class":726,"line":736},[1165],{"type":38,"tag":724,"props":1166,"children":1167},{},[1168],{"type":44,"value":1169},"library;\n",{"type":38,"tag":724,"props":1171,"children":1172},{"class":726,"line":745},[1173],{"type":38,"tag":724,"props":1174,"children":1175},{"emptyLinePlaceholder":961},[1176],{"type":44,"value":964},{"type":38,"tag":724,"props":1178,"children":1179},{"class":726,"line":754},[1180],{"type":38,"tag":724,"props":1181,"children":1182},{},[1183],{"type":44,"value":1139},{"type":38,"tag":1185,"props":1186,"children":1187},"style",{},[1188],{"type":44,"value":1189},"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":1191,"total":1320},[1192,1203,1214,1226,1237,1246,1258,1270,1282,1294,1303,1312],{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1196,"tags":1197,"stars":22,"repoUrl":23,"updatedAt":1202},"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},[1198,1199],{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},"Testing","testing","2026-08-06T05:38:41.522664",{"slug":1204,"name":1204,"fn":1205,"description":1206,"org":1207,"tags":1208,"stars":22,"repoUrl":23,"updatedAt":1213},"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},[1209,1212],{"name":1210,"slug":1211,"type":15},"CLI","cli",{"name":17,"slug":18,"type":15},"2026-07-15T05:22:18.863572",{"slug":1215,"name":1215,"fn":1216,"description":1217,"org":1218,"tags":1219,"stars":22,"repoUrl":23,"updatedAt":1225},"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},[1220,1221,1224],{"name":17,"slug":18,"type":15},{"name":1222,"slug":1223,"type":15},"Reporting","reporting",{"name":1200,"slug":1201,"type":15},"2026-07-15T05:22:21.38636",{"slug":1227,"name":1227,"fn":1228,"description":1229,"org":1230,"tags":1231,"stars":22,"repoUrl":23,"updatedAt":1236},"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},[1232,1233],{"name":17,"slug":18,"type":15},{"name":1234,"slug":1235,"type":15},"Debugging","debugging","2026-07-15T05:22:22.622501",{"slug":1238,"name":1238,"fn":1239,"description":1240,"org":1241,"tags":1242,"stars":22,"repoUrl":23,"updatedAt":1245},"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},[1243,1244],{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},"2026-07-15T05:22:42.607449",{"slug":1247,"name":1247,"fn":1248,"description":1249,"org":1250,"tags":1251,"stars":22,"repoUrl":23,"updatedAt":1257},"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},[1252,1253,1256],{"name":17,"slug":18,"type":15},{"name":1254,"slug":1255,"type":15},"Migration","migration",{"name":1200,"slug":1201,"type":15},"2026-07-15T05:22:31.276564",{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1262,"tags":1263,"stars":22,"repoUrl":23,"updatedAt":1269},"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},[1264,1265,1266],{"name":17,"slug":18,"type":15},{"name":1234,"slug":1235,"type":15},{"name":1267,"slug":1268,"type":15},"Engineering","engineering","2026-07-15T05:22:30.059335",{"slug":1271,"name":1271,"fn":1272,"description":1273,"org":1274,"tags":1275,"stars":22,"repoUrl":23,"updatedAt":1281},"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},[1276,1279,1280],{"name":1277,"slug":1278,"type":15},"Code Analysis","code-analysis",{"name":17,"slug":18,"type":15},{"name":1234,"slug":1235,"type":15},"2026-07-15T05:22:23.861119",{"slug":1283,"name":1283,"fn":1284,"description":1285,"org":1286,"tags":1287,"stars":22,"repoUrl":23,"updatedAt":1293},"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},[1288,1289,1292],{"name":17,"slug":18,"type":15},{"name":1290,"slug":1291,"type":15},"Deployment","deployment",{"name":1267,"slug":1268,"type":15},"2026-07-15T05:22:20.138636",{"slug":1295,"name":1295,"fn":1296,"description":1297,"org":1298,"tags":1299,"stars":22,"repoUrl":23,"updatedAt":1302},"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},[1300,1301],{"name":17,"slug":18,"type":15},{"name":1267,"slug":1268,"type":15},"2026-07-15T05:22:17.592351",{"slug":1304,"name":1304,"fn":1305,"description":1306,"org":1307,"tags":1308,"stars":22,"repoUrl":23,"updatedAt":1311},"dart-use-pattern-matching","use Dart switch expressions and pattern matching","Use switch expressions and pattern matching where appropriate",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1309,1310],{"name":1277,"slug":1278,"type":15},{"name":17,"slug":18,"type":15},"2026-07-15T05:22:25.097872",{"slug":1313,"name":1313,"fn":1314,"description":1315,"org":1316,"tags":1317,"stars":22,"repoUrl":23,"updatedAt":1319},"dart-use-primary-constructors","implement Dart primary constructors","Help users write syntactically and semantically correct primary constructors in Dart, and migrate\u002Fuse the new constructor syntax, empty-body semicolon syntax, in-body initializer list syntax, and abbreviated concise constructor syntax.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1318],{"name":17,"slug":18,"type":15},"2026-07-15T05:22:38.873578",26,{"items":1322,"total":1361},[1323,1328,1333,1339,1344,1349,1355],{"slug":1193,"name":1193,"fn":1194,"description":1195,"org":1324,"tags":1325,"stars":22,"repoUrl":23,"updatedAt":1202},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1326,1327],{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},{"slug":1204,"name":1204,"fn":1205,"description":1206,"org":1329,"tags":1330,"stars":22,"repoUrl":23,"updatedAt":1213},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1331,1332],{"name":1210,"slug":1211,"type":15},{"name":17,"slug":18,"type":15},{"slug":1215,"name":1215,"fn":1216,"description":1217,"org":1334,"tags":1335,"stars":22,"repoUrl":23,"updatedAt":1225},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1336,1337,1338],{"name":17,"slug":18,"type":15},{"name":1222,"slug":1223,"type":15},{"name":1200,"slug":1201,"type":15},{"slug":1227,"name":1227,"fn":1228,"description":1229,"org":1340,"tags":1341,"stars":22,"repoUrl":23,"updatedAt":1236},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1342,1343],{"name":17,"slug":18,"type":15},{"name":1234,"slug":1235,"type":15},{"slug":1238,"name":1238,"fn":1239,"description":1240,"org":1345,"tags":1346,"stars":22,"repoUrl":23,"updatedAt":1245},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1347,1348],{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},{"slug":1247,"name":1247,"fn":1248,"description":1249,"org":1350,"tags":1351,"stars":22,"repoUrl":23,"updatedAt":1257},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1352,1353,1354],{"name":17,"slug":18,"type":15},{"name":1254,"slug":1255,"type":15},{"name":1200,"slug":1201,"type":15},{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1356,"tags":1357,"stars":22,"repoUrl":23,"updatedAt":1269},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1358,1359,1360],{"name":17,"slug":18,"type":15},{"name":1234,"slug":1235,"type":15},{"name":1267,"slug":1268,"type":15},23]