[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-flutter-flutter-setup-declarative-routing":3,"mdc-cx4nx8-key":31,"related-org-flutter-flutter-setup-declarative-routing":2412,"related-repo-flutter-flutter-setup-declarative-routing":2550},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":27,"sourceUrl":29,"mdContent":30},"flutter-setup-declarative-routing","configure declarative routing in Flutter","Configure `MaterialApp.router` using a package like `go_router` for advanced URL-based navigation. Use when developing web applications or mobile apps that require specific deep linking and browser history support.",{"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,15,18],{"name":13,"slug":8,"type":14},"Flutter","tag",{"name":16,"slug":17,"type":14},"Mobile","mobile",{"name":19,"slug":20,"type":14},"Navigation","navigation",2664,"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins","2026-07-15T05:22:33.920149",null,155,[],{"repoUrl":22,"stars":21,"forks":25,"topics":28,"description":24},[],"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins\u002Ftree\u002FHEAD\u002Fskills\u002Fflutter-setup-declarative-routing","---\nname: flutter-setup-declarative-routing\ndescription: Configure `MaterialApp.router` using a package like `go_router` for advanced URL-based navigation. Use when developing web applications or mobile apps that require specific deep linking and browser history support.\nmetadata:\n  model: models\u002Fgemini-3.1-pro-preview\n  last_modified: Tue, 21 Apr 2026 21:08:03 GMT\n---\n# Implementing Routing and Deep Linking\n\n## Contents\n- [Core Concepts](#core-concepts)\n- [Workflow: Initializing the Application and Router](#workflow-initializing-the-application-and-router)\n- [Workflow: Configuring Platform Deep Linking](#workflow-configuring-platform-deep-linking)\n- [Workflow: Implementing Nested Navigation](#workflow-implementing-nested-navigation)\n- [Examples](#examples)\n\n## Core Concepts\n\nUse the `go_router` package for declarative routing in Flutter. It provides a robust API for complex routing scenarios, deep linking, and nested navigation. \n\n- **GoRouter**: The central configuration object defining the application's route tree.\n- **GoRoute**: A standard route mapping a URL path to a Flutter screen.\n- **ShellRoute \u002F StatefulShellRoute**: Wraps child routes in a persistent UI shell (e.g., a `BottomNavigationBar`). `StatefulShellRoute` maintains the state of parallel navigation branches.\n- **Path URL Strategy**: Removes the default `#` fragment from web URLs, essential for clean deep linking across platforms.\n\n## Workflow: Initializing the Application and Router\n\nFollow this workflow to bootstrap a new Flutter application with `go_router` and configure the root routing mechanism.\n\n### Task Progress\n- [ ] Create the Flutter application.\n- [ ] Add the `go_router` dependency.\n- [ ] Configure the URL strategy for web\u002Fdeep linking.\n- [ ] Implement the `GoRouter` configuration.\n- [ ] Bind the router to `MaterialApp.router`.\n\n### 1. Scaffold the Application\nRun the following commands to create the app and add the required routing package:\n```bash\nflutter create \u003Capp-name>\ncd \u003Capp-name>\nflutter pub add go_router\n```\n\n### 2. Configure the Router\nDefine a top-level `GoRouter` instance. Handle authentication or state-based routing using the `redirect` parameter.\n\n```dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:go_router\u002Fgo_router.dart';\nimport 'package:flutter_web_plugins\u002Furl_strategy.dart';\n\nvoid main() {\n  \u002F\u002F Use path URL strategy to remove the '#' from web URLs\n  usePathUrlStrategy();\n  runApp(const MyApp());\n}\n\nfinal GoRouter _router = GoRouter(\n  initialLocation: '\u002F',\n  routes: [\n    GoRoute(\n      path: '\u002F',\n      builder: (context, state) => const HomeScreen(),\n      routes: [\n        GoRoute(\n          path: 'details\u002F:id',\n          builder: (context, state) => DetailsScreen(id: state.pathParameters['id']!),\n        ),\n      ],\n    ),\n  ],\n  errorBuilder: (context, state) => ErrorScreen(error: state.error),\n);\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp.router(\n      routerConfig: _router,\n      title: 'Routing App',\n    );\n  }\n}\n```\n\n## Workflow: Configuring Platform Deep Linking\n\nConfigure the native platforms to intercept specific URLs and route them into the Flutter application.\n\n### Task Progress\n- [ ] Determine target platforms (iOS, Android, or both).\n- [ ] Apply conditional configuration for Android (Manifest + Asset Links).\n- [ ] Apply conditional configuration for iOS (Plist + Entitlements + AASA).\n- [ ] Run validator -> review errors -> fix.\n\n### If configuring for Android:\n1. **Modify `AndroidManifest.xml`**: Add the intent filter inside the `\u003Cactivity>` tag for `.MainActivity`.\n```xml\n\u003Cintent-filter android:autoVerify=\"true\">\n    \u003Caction android:name=\"android.intent.action.VIEW\" \u002F>\n    \u003Ccategory android:name=\"android.intent.category.DEFAULT\" \u002F>\n    \u003Ccategory android:name=\"android.intent.category.BROWSABLE\" \u002F>\n    \u003Cdata android:scheme=\"http\" android:host=\"yourdomain.com\" \u002F>\n    \u003Cdata android:scheme=\"https\" \u002F>\n\u003C\u002Fintent-filter>\n```\n2. **Host `assetlinks.json`**: Serve the following JSON at `https:\u002F\u002Fyourdomain.com\u002F.well-known\u002Fassetlinks.json`.\n```json\n[{\n  \"relation\": [\"delegate_permission\u002Fcommon.handle_all_urls\"],\n  \"target\": {\n    \"namespace\": \"android_app\",\n    \"package_name\": \"com.yourcompany.yourapp\",\n    \"sha256_cert_fingerprints\": [\"YOUR_SHA256_FINGERPRINT\"]\n  }\n}]\n```\n\n### If configuring for iOS:\n1. **Modify `Info.plist`**: Opt-in to Flutter's default deep link handler. \n*Note: If using a third-party deep linking plugin (e.g., `app_links`), set this to `NO` to prevent conflicts.*\n```xml\n\u003Ckey>FlutterDeepLinkingEnabled\u003C\u002Fkey>\n\u003Ctrue\u002F>\n```\n2. **Modify `Runner.entitlements`**: Add the associated domain.\n```xml\n\u003Ckey>com.apple.developer.associated-domains\u003C\u002Fkey>\n\u003Carray>\n  \u003Cstring>applinks:yourdomain.com\u003C\u002Fstring>\n\u003C\u002Farray>\n```\n3. **Host `apple-app-site-association`**: Serve the following JSON (without a `.json` extension) at `https:\u002F\u002Fyourdomain.com\u002F.well-known\u002Fapple-app-site-association`.\n```json\n{\n  \"applinks\": {\n    \"apps\": [],\n    \"details\": [{\n      \"appIDs\": [\"TEAM_ID.com.yourcompany.yourapp\"],\n      \"paths\": [\"*\"],\n      \"components\": [{\"\u002F\": \"\u002F*\"}]\n    }]\n  }\n}\n```\n\n### Validation Loop\nRun validator -> review errors -> fix.\n- **Android**: Test using ADB.\n  ```bash\n  adb shell 'am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d \"https:\u002F\u002Fyourdomain.com\u002Fdetails\u002F123\"' com.yourcompany.yourapp\n  ```\n- **iOS**: Test using `xcrun` on a booted simulator.\n  ```bash\n  xcrun simctl openurl booted https:\u002F\u002Fyourdomain.com\u002Fdetails\u002F123\n  ```\n\n## Workflow: Implementing Nested Navigation\n\nUse `StatefulShellRoute` to implement persistent UI shells (like a bottom navigation bar) that maintain the state of their child routes.\n\n### Task Progress\n- [ ] Define `StatefulShellRoute.indexedStack` in the `GoRouter` configuration.\n- [ ] Create `StatefulShellBranch` instances for each navigation tab.\n- [ ] Implement the shell widget using `StatefulNavigationShell`.\n\n```dart\nfinal GoRouter _router = GoRouter(\n  initialLocation: '\u002Fhome',\n  routes: [\n    StatefulShellRoute.indexedStack(\n      builder: (context, state, navigationShell) {\n        return ScaffoldWithNavBar(navigationShell: navigationShell);\n      },\n      branches: [\n        StatefulShellBranch(\n          routes: [\n            GoRoute(\n              path: '\u002Fhome',\n              builder: (context, state) => const HomeScreen(),\n            ),\n          ],\n        ),\n        StatefulShellBranch(\n          routes: [\n            GoRoute(\n              path: '\u002Fsettings',\n              builder: (context, state) => const SettingsScreen(),\n            ),\n          ],\n        ),\n      ],\n    ),\n  ],\n);\n```\n\n## Examples\n\n### High-Fidelity Shell Widget Implementation\nImplement the UI shell that consumes the `StatefulNavigationShell` to handle branch switching.\n\n```dart\nclass ScaffoldWithNavBar extends StatelessWidget {\n  const ScaffoldWithNavBar({\n    required this.navigationShell,\n    super.key,\n  });\n\n  final StatefulNavigationShell navigationShell;\n\n  void _goBranch(int index) {\n    navigationShell.goBranch(\n      index,\n      \u002F\u002F Support navigating to the initial location when tapping the active tab.\n      initialLocation: index == navigationShell.currentIndex,\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: navigationShell,\n      bottomNavigationBar: NavigationBar(\n        selectedIndex: navigationShell.currentIndex,\n        onDestinationSelected: _goBranch,\n        destinations: const [\n          NavigationDestination(icon: Icon(Icons.home), label: 'Home'),\n          NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),\n        ],\n      ),\n    );\n  }\n}\n```\n\n### Programmatic Navigation\nUse the `context.go()` and `context.push()` extension methods provided by `go_router`.\n\n```dart\n\u002F\u002F Replaces the current route stack with the target route (Declarative)\ncontext.go('\u002Fdetails\u002F123');\n\n\u002F\u002F Pushes the target route onto the existing stack (Imperative)\ncontext.push('\u002Fdetails\u002F123');\n\n\u002F\u002F Navigates using a named route and path parameters\ncontext.goNamed('details', pathParameters: {'id': '123'});\n\n\u002F\u002F Pops the current route\ncontext.pop();\n```\n",{"data":32,"body":36},{"name":4,"description":6,"metadata":33},{"model":34,"last_modified":35},"models\u002Fgemini-3.1-pro-preview","Tue, 21 Apr 2026 21:08:03 GMT",{"type":37,"children":38},"root",[39,48,55,106,111,126,194,199,211,218,294,300,305,404,410,430,774,779,784,789,829,835,870,935,961,1184,1190,1230,1253,1271,1310,1343,1598,1604,1609,1714,1719,1731,1736,1796,2014,2019,2025,2037,2282,2288,2314,2406],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"implementing-routing-and-deep-linking",[45],{"type":46,"value":47},"text","Implementing Routing and Deep Linking",{"type":40,"tag":49,"props":50,"children":52},"h2",{"id":51},"contents",[53],{"type":46,"value":54},"Contents",{"type":40,"tag":56,"props":57,"children":58},"ul",{},[59,70,79,88,97],{"type":40,"tag":60,"props":61,"children":62},"li",{},[63],{"type":40,"tag":64,"props":65,"children":67},"a",{"href":66},"#core-concepts",[68],{"type":46,"value":69},"Core Concepts",{"type":40,"tag":60,"props":71,"children":72},{},[73],{"type":40,"tag":64,"props":74,"children":76},{"href":75},"#workflow-initializing-the-application-and-router",[77],{"type":46,"value":78},"Workflow: Initializing the Application and Router",{"type":40,"tag":60,"props":80,"children":81},{},[82],{"type":40,"tag":64,"props":83,"children":85},{"href":84},"#workflow-configuring-platform-deep-linking",[86],{"type":46,"value":87},"Workflow: Configuring Platform Deep Linking",{"type":40,"tag":60,"props":89,"children":90},{},[91],{"type":40,"tag":64,"props":92,"children":94},{"href":93},"#workflow-implementing-nested-navigation",[95],{"type":46,"value":96},"Workflow: Implementing Nested Navigation",{"type":40,"tag":60,"props":98,"children":99},{},[100],{"type":40,"tag":64,"props":101,"children":103},{"href":102},"#examples",[104],{"type":46,"value":105},"Examples",{"type":40,"tag":49,"props":107,"children":109},{"id":108},"core-concepts",[110],{"type":46,"value":69},{"type":40,"tag":112,"props":113,"children":114},"p",{},[115,117,124],{"type":46,"value":116},"Use the ",{"type":40,"tag":118,"props":119,"children":121},"code",{"className":120},[],[122],{"type":46,"value":123},"go_router",{"type":46,"value":125}," package for declarative routing in Flutter. It provides a robust API for complex routing scenarios, deep linking, and nested navigation.",{"type":40,"tag":56,"props":127,"children":128},{},[129,140,150,176],{"type":40,"tag":60,"props":130,"children":131},{},[132,138],{"type":40,"tag":133,"props":134,"children":135},"strong",{},[136],{"type":46,"value":137},"GoRouter",{"type":46,"value":139},": The central configuration object defining the application's route tree.",{"type":40,"tag":60,"props":141,"children":142},{},[143,148],{"type":40,"tag":133,"props":144,"children":145},{},[146],{"type":46,"value":147},"GoRoute",{"type":46,"value":149},": A standard route mapping a URL path to a Flutter screen.",{"type":40,"tag":60,"props":151,"children":152},{},[153,158,160,166,168,174],{"type":40,"tag":133,"props":154,"children":155},{},[156],{"type":46,"value":157},"ShellRoute \u002F StatefulShellRoute",{"type":46,"value":159},": Wraps child routes in a persistent UI shell (e.g., a ",{"type":40,"tag":118,"props":161,"children":163},{"className":162},[],[164],{"type":46,"value":165},"BottomNavigationBar",{"type":46,"value":167},"). ",{"type":40,"tag":118,"props":169,"children":171},{"className":170},[],[172],{"type":46,"value":173},"StatefulShellRoute",{"type":46,"value":175}," maintains the state of parallel navigation branches.",{"type":40,"tag":60,"props":177,"children":178},{},[179,184,186,192],{"type":40,"tag":133,"props":180,"children":181},{},[182],{"type":46,"value":183},"Path URL Strategy",{"type":46,"value":185},": Removes the default ",{"type":40,"tag":118,"props":187,"children":189},{"className":188},[],[190],{"type":46,"value":191},"#",{"type":46,"value":193}," fragment from web URLs, essential for clean deep linking across platforms.",{"type":40,"tag":49,"props":195,"children":197},{"id":196},"workflow-initializing-the-application-and-router",[198],{"type":46,"value":78},{"type":40,"tag":112,"props":200,"children":201},{},[202,204,209],{"type":46,"value":203},"Follow this workflow to bootstrap a new Flutter application with ",{"type":40,"tag":118,"props":205,"children":207},{"className":206},[],[208],{"type":46,"value":123},{"type":46,"value":210}," and configure the root routing mechanism.",{"type":40,"tag":212,"props":213,"children":215},"h3",{"id":214},"task-progress",[216],{"type":46,"value":217},"Task Progress",{"type":40,"tag":56,"props":219,"children":222},{"className":220},[221],"contains-task-list",[223,236,252,261,277],{"type":40,"tag":60,"props":224,"children":227},{"className":225},[226],"task-list-item",[228,234],{"type":40,"tag":229,"props":230,"children":233},"input",{"disabled":231,"type":232},true,"checkbox",[],{"type":46,"value":235}," Create the Flutter application.",{"type":40,"tag":60,"props":237,"children":239},{"className":238},[226],[240,243,245,250],{"type":40,"tag":229,"props":241,"children":242},{"disabled":231,"type":232},[],{"type":46,"value":244}," Add the ",{"type":40,"tag":118,"props":246,"children":248},{"className":247},[],[249],{"type":46,"value":123},{"type":46,"value":251}," dependency.",{"type":40,"tag":60,"props":253,"children":255},{"className":254},[226],[256,259],{"type":40,"tag":229,"props":257,"children":258},{"disabled":231,"type":232},[],{"type":46,"value":260}," Configure the URL strategy for web\u002Fdeep linking.",{"type":40,"tag":60,"props":262,"children":264},{"className":263},[226],[265,268,270,275],{"type":40,"tag":229,"props":266,"children":267},{"disabled":231,"type":232},[],{"type":46,"value":269}," Implement the ",{"type":40,"tag":118,"props":271,"children":273},{"className":272},[],[274],{"type":46,"value":137},{"type":46,"value":276}," configuration.",{"type":40,"tag":60,"props":278,"children":280},{"className":279},[226],[281,284,286,292],{"type":40,"tag":229,"props":282,"children":283},{"disabled":231,"type":232},[],{"type":46,"value":285}," Bind the router to ",{"type":40,"tag":118,"props":287,"children":289},{"className":288},[],[290],{"type":46,"value":291},"MaterialApp.router",{"type":46,"value":293},".",{"type":40,"tag":212,"props":295,"children":297},{"id":296},"_1-scaffold-the-application",[298],{"type":46,"value":299},"1. Scaffold the Application",{"type":40,"tag":112,"props":301,"children":302},{},[303],{"type":46,"value":304},"Run the following commands to create the app and add the required routing package:",{"type":40,"tag":306,"props":307,"children":312},"pre",{"className":308,"code":309,"language":310,"meta":311,"style":311},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flutter create \u003Capp-name>\ncd \u003Capp-name>\nflutter pub add go_router\n","bash","",[313],{"type":40,"tag":118,"props":314,"children":315},{"__ignoreMap":311},[316,355,381],{"type":40,"tag":317,"props":318,"children":321},"span",{"class":319,"line":320},"line",1,[322,327,333,339,344,350],{"type":40,"tag":317,"props":323,"children":325},{"style":324},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[326],{"type":46,"value":8},{"type":40,"tag":317,"props":328,"children":330},{"style":329},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[331],{"type":46,"value":332}," create",{"type":40,"tag":317,"props":334,"children":336},{"style":335},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[337],{"type":46,"value":338}," \u003C",{"type":40,"tag":317,"props":340,"children":341},{"style":329},[342],{"type":46,"value":343},"app-nam",{"type":40,"tag":317,"props":345,"children":347},{"style":346},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[348],{"type":46,"value":349},"e",{"type":40,"tag":317,"props":351,"children":352},{"style":335},[353],{"type":46,"value":354},">\n",{"type":40,"tag":317,"props":356,"children":358},{"class":319,"line":357},2,[359,365,369,373,377],{"type":40,"tag":317,"props":360,"children":362},{"style":361},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[363],{"type":46,"value":364},"cd",{"type":40,"tag":317,"props":366,"children":367},{"style":335},[368],{"type":46,"value":338},{"type":40,"tag":317,"props":370,"children":371},{"style":329},[372],{"type":46,"value":343},{"type":40,"tag":317,"props":374,"children":375},{"style":346},[376],{"type":46,"value":349},{"type":40,"tag":317,"props":378,"children":379},{"style":335},[380],{"type":46,"value":354},{"type":40,"tag":317,"props":382,"children":384},{"class":319,"line":383},3,[385,389,394,399],{"type":40,"tag":317,"props":386,"children":387},{"style":324},[388],{"type":46,"value":8},{"type":40,"tag":317,"props":390,"children":391},{"style":329},[392],{"type":46,"value":393}," pub",{"type":40,"tag":317,"props":395,"children":396},{"style":329},[397],{"type":46,"value":398}," add",{"type":40,"tag":317,"props":400,"children":401},{"style":329},[402],{"type":46,"value":403}," go_router\n",{"type":40,"tag":212,"props":405,"children":407},{"id":406},"_2-configure-the-router",[408],{"type":46,"value":409},"2. Configure the Router",{"type":40,"tag":112,"props":411,"children":412},{},[413,415,420,422,428],{"type":46,"value":414},"Define a top-level ",{"type":40,"tag":118,"props":416,"children":418},{"className":417},[],[419],{"type":46,"value":137},{"type":46,"value":421}," instance. Handle authentication or state-based routing using the ",{"type":40,"tag":118,"props":423,"children":425},{"className":424},[],[426],{"type":46,"value":427},"redirect",{"type":46,"value":429}," parameter.",{"type":40,"tag":306,"props":431,"children":435},{"className":432,"code":433,"language":434,"meta":311,"style":311},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import 'package:flutter\u002Fmaterial.dart';\nimport 'package:go_router\u002Fgo_router.dart';\nimport 'package:flutter_web_plugins\u002Furl_strategy.dart';\n\nvoid main() {\n  \u002F\u002F Use path URL strategy to remove the '#' from web URLs\n  usePathUrlStrategy();\n  runApp(const MyApp());\n}\n\nfinal GoRouter _router = GoRouter(\n  initialLocation: '\u002F',\n  routes: [\n    GoRoute(\n      path: '\u002F',\n      builder: (context, state) => const HomeScreen(),\n      routes: [\n        GoRoute(\n          path: 'details\u002F:id',\n          builder: (context, state) => DetailsScreen(id: state.pathParameters['id']!),\n        ),\n      ],\n    ),\n  ],\n  errorBuilder: (context, state) => ErrorScreen(error: state.error),\n);\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp.router(\n      routerConfig: _router,\n      title: 'Routing App',\n    );\n  }\n}\n","dart",[436],{"type":40,"tag":118,"props":437,"children":438},{"__ignoreMap":311},[439,447,455,463,472,481,490,499,508,517,525,534,543,552,561,570,579,588,597,606,615,624,633,642,651,660,669,677,686,695,703,712,721,730,739,748,757,766],{"type":40,"tag":317,"props":440,"children":441},{"class":319,"line":320},[442],{"type":40,"tag":317,"props":443,"children":444},{},[445],{"type":46,"value":446},"import 'package:flutter\u002Fmaterial.dart';\n",{"type":40,"tag":317,"props":448,"children":449},{"class":319,"line":357},[450],{"type":40,"tag":317,"props":451,"children":452},{},[453],{"type":46,"value":454},"import 'package:go_router\u002Fgo_router.dart';\n",{"type":40,"tag":317,"props":456,"children":457},{"class":319,"line":383},[458],{"type":40,"tag":317,"props":459,"children":460},{},[461],{"type":46,"value":462},"import 'package:flutter_web_plugins\u002Furl_strategy.dart';\n",{"type":40,"tag":317,"props":464,"children":466},{"class":319,"line":465},4,[467],{"type":40,"tag":317,"props":468,"children":469},{"emptyLinePlaceholder":231},[470],{"type":46,"value":471},"\n",{"type":40,"tag":317,"props":473,"children":475},{"class":319,"line":474},5,[476],{"type":40,"tag":317,"props":477,"children":478},{},[479],{"type":46,"value":480},"void main() {\n",{"type":40,"tag":317,"props":482,"children":484},{"class":319,"line":483},6,[485],{"type":40,"tag":317,"props":486,"children":487},{},[488],{"type":46,"value":489},"  \u002F\u002F Use path URL strategy to remove the '#' from web URLs\n",{"type":40,"tag":317,"props":491,"children":493},{"class":319,"line":492},7,[494],{"type":40,"tag":317,"props":495,"children":496},{},[497],{"type":46,"value":498},"  usePathUrlStrategy();\n",{"type":40,"tag":317,"props":500,"children":502},{"class":319,"line":501},8,[503],{"type":40,"tag":317,"props":504,"children":505},{},[506],{"type":46,"value":507},"  runApp(const MyApp());\n",{"type":40,"tag":317,"props":509,"children":511},{"class":319,"line":510},9,[512],{"type":40,"tag":317,"props":513,"children":514},{},[515],{"type":46,"value":516},"}\n",{"type":40,"tag":317,"props":518,"children":520},{"class":319,"line":519},10,[521],{"type":40,"tag":317,"props":522,"children":523},{"emptyLinePlaceholder":231},[524],{"type":46,"value":471},{"type":40,"tag":317,"props":526,"children":528},{"class":319,"line":527},11,[529],{"type":40,"tag":317,"props":530,"children":531},{},[532],{"type":46,"value":533},"final GoRouter _router = GoRouter(\n",{"type":40,"tag":317,"props":535,"children":537},{"class":319,"line":536},12,[538],{"type":40,"tag":317,"props":539,"children":540},{},[541],{"type":46,"value":542},"  initialLocation: '\u002F',\n",{"type":40,"tag":317,"props":544,"children":546},{"class":319,"line":545},13,[547],{"type":40,"tag":317,"props":548,"children":549},{},[550],{"type":46,"value":551},"  routes: [\n",{"type":40,"tag":317,"props":553,"children":555},{"class":319,"line":554},14,[556],{"type":40,"tag":317,"props":557,"children":558},{},[559],{"type":46,"value":560},"    GoRoute(\n",{"type":40,"tag":317,"props":562,"children":564},{"class":319,"line":563},15,[565],{"type":40,"tag":317,"props":566,"children":567},{},[568],{"type":46,"value":569},"      path: '\u002F',\n",{"type":40,"tag":317,"props":571,"children":573},{"class":319,"line":572},16,[574],{"type":40,"tag":317,"props":575,"children":576},{},[577],{"type":46,"value":578},"      builder: (context, state) => const HomeScreen(),\n",{"type":40,"tag":317,"props":580,"children":582},{"class":319,"line":581},17,[583],{"type":40,"tag":317,"props":584,"children":585},{},[586],{"type":46,"value":587},"      routes: [\n",{"type":40,"tag":317,"props":589,"children":591},{"class":319,"line":590},18,[592],{"type":40,"tag":317,"props":593,"children":594},{},[595],{"type":46,"value":596},"        GoRoute(\n",{"type":40,"tag":317,"props":598,"children":600},{"class":319,"line":599},19,[601],{"type":40,"tag":317,"props":602,"children":603},{},[604],{"type":46,"value":605},"          path: 'details\u002F:id',\n",{"type":40,"tag":317,"props":607,"children":609},{"class":319,"line":608},20,[610],{"type":40,"tag":317,"props":611,"children":612},{},[613],{"type":46,"value":614},"          builder: (context, state) => DetailsScreen(id: state.pathParameters['id']!),\n",{"type":40,"tag":317,"props":616,"children":618},{"class":319,"line":617},21,[619],{"type":40,"tag":317,"props":620,"children":621},{},[622],{"type":46,"value":623},"        ),\n",{"type":40,"tag":317,"props":625,"children":627},{"class":319,"line":626},22,[628],{"type":40,"tag":317,"props":629,"children":630},{},[631],{"type":46,"value":632},"      ],\n",{"type":40,"tag":317,"props":634,"children":636},{"class":319,"line":635},23,[637],{"type":40,"tag":317,"props":638,"children":639},{},[640],{"type":46,"value":641},"    ),\n",{"type":40,"tag":317,"props":643,"children":645},{"class":319,"line":644},24,[646],{"type":40,"tag":317,"props":647,"children":648},{},[649],{"type":46,"value":650},"  ],\n",{"type":40,"tag":317,"props":652,"children":654},{"class":319,"line":653},25,[655],{"type":40,"tag":317,"props":656,"children":657},{},[658],{"type":46,"value":659},"  errorBuilder: (context, state) => ErrorScreen(error: state.error),\n",{"type":40,"tag":317,"props":661,"children":663},{"class":319,"line":662},26,[664],{"type":40,"tag":317,"props":665,"children":666},{},[667],{"type":46,"value":668},");\n",{"type":40,"tag":317,"props":670,"children":672},{"class":319,"line":671},27,[673],{"type":40,"tag":317,"props":674,"children":675},{"emptyLinePlaceholder":231},[676],{"type":46,"value":471},{"type":40,"tag":317,"props":678,"children":680},{"class":319,"line":679},28,[681],{"type":40,"tag":317,"props":682,"children":683},{},[684],{"type":46,"value":685},"class MyApp extends StatelessWidget {\n",{"type":40,"tag":317,"props":687,"children":689},{"class":319,"line":688},29,[690],{"type":40,"tag":317,"props":691,"children":692},{},[693],{"type":46,"value":694},"  const MyApp({super.key});\n",{"type":40,"tag":317,"props":696,"children":698},{"class":319,"line":697},30,[699],{"type":40,"tag":317,"props":700,"children":701},{"emptyLinePlaceholder":231},[702],{"type":46,"value":471},{"type":40,"tag":317,"props":704,"children":706},{"class":319,"line":705},31,[707],{"type":40,"tag":317,"props":708,"children":709},{},[710],{"type":46,"value":711},"  @override\n",{"type":40,"tag":317,"props":713,"children":715},{"class":319,"line":714},32,[716],{"type":40,"tag":317,"props":717,"children":718},{},[719],{"type":46,"value":720},"  Widget build(BuildContext context) {\n",{"type":40,"tag":317,"props":722,"children":724},{"class":319,"line":723},33,[725],{"type":40,"tag":317,"props":726,"children":727},{},[728],{"type":46,"value":729},"    return MaterialApp.router(\n",{"type":40,"tag":317,"props":731,"children":733},{"class":319,"line":732},34,[734],{"type":40,"tag":317,"props":735,"children":736},{},[737],{"type":46,"value":738},"      routerConfig: _router,\n",{"type":40,"tag":317,"props":740,"children":742},{"class":319,"line":741},35,[743],{"type":40,"tag":317,"props":744,"children":745},{},[746],{"type":46,"value":747},"      title: 'Routing App',\n",{"type":40,"tag":317,"props":749,"children":751},{"class":319,"line":750},36,[752],{"type":40,"tag":317,"props":753,"children":754},{},[755],{"type":46,"value":756},"    );\n",{"type":40,"tag":317,"props":758,"children":760},{"class":319,"line":759},37,[761],{"type":40,"tag":317,"props":762,"children":763},{},[764],{"type":46,"value":765},"  }\n",{"type":40,"tag":317,"props":767,"children":769},{"class":319,"line":768},38,[770],{"type":40,"tag":317,"props":771,"children":772},{},[773],{"type":46,"value":516},{"type":40,"tag":49,"props":775,"children":777},{"id":776},"workflow-configuring-platform-deep-linking",[778],{"type":46,"value":87},{"type":40,"tag":112,"props":780,"children":781},{},[782],{"type":46,"value":783},"Configure the native platforms to intercept specific URLs and route them into the Flutter application.",{"type":40,"tag":212,"props":785,"children":787},{"id":786},"task-progress-1",[788],{"type":46,"value":217},{"type":40,"tag":56,"props":790,"children":792},{"className":791},[221],[793,802,811,820],{"type":40,"tag":60,"props":794,"children":796},{"className":795},[226],[797,800],{"type":40,"tag":229,"props":798,"children":799},{"disabled":231,"type":232},[],{"type":46,"value":801}," Determine target platforms (iOS, Android, or both).",{"type":40,"tag":60,"props":803,"children":805},{"className":804},[226],[806,809],{"type":40,"tag":229,"props":807,"children":808},{"disabled":231,"type":232},[],{"type":46,"value":810}," Apply conditional configuration for Android (Manifest + Asset Links).",{"type":40,"tag":60,"props":812,"children":814},{"className":813},[226],[815,818],{"type":40,"tag":229,"props":816,"children":817},{"disabled":231,"type":232},[],{"type":46,"value":819}," Apply conditional configuration for iOS (Plist + Entitlements + AASA).",{"type":40,"tag":60,"props":821,"children":823},{"className":822},[226],[824,827],{"type":40,"tag":229,"props":825,"children":826},{"disabled":231,"type":232},[],{"type":46,"value":828}," Run validator -> review errors -> fix.",{"type":40,"tag":212,"props":830,"children":832},{"id":831},"if-configuring-for-android",[833],{"type":46,"value":834},"If configuring for Android:",{"type":40,"tag":836,"props":837,"children":838},"ol",{},[839],{"type":40,"tag":60,"props":840,"children":841},{},[842,853,855,861,863,869],{"type":40,"tag":133,"props":843,"children":844},{},[845,847],{"type":46,"value":846},"Modify ",{"type":40,"tag":118,"props":848,"children":850},{"className":849},[],[851],{"type":46,"value":852},"AndroidManifest.xml",{"type":46,"value":854},": Add the intent filter inside the ",{"type":40,"tag":118,"props":856,"children":858},{"className":857},[],[859],{"type":46,"value":860},"\u003Cactivity>",{"type":46,"value":862}," tag for ",{"type":40,"tag":118,"props":864,"children":866},{"className":865},[],[867],{"type":46,"value":868},".MainActivity",{"type":46,"value":293},{"type":40,"tag":306,"props":871,"children":875},{"className":872,"code":873,"language":874,"meta":311,"style":311},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cintent-filter android:autoVerify=\"true\">\n    \u003Caction android:name=\"android.intent.action.VIEW\" \u002F>\n    \u003Ccategory android:name=\"android.intent.category.DEFAULT\" \u002F>\n    \u003Ccategory android:name=\"android.intent.category.BROWSABLE\" \u002F>\n    \u003Cdata android:scheme=\"http\" android:host=\"yourdomain.com\" \u002F>\n    \u003Cdata android:scheme=\"https\" \u002F>\n\u003C\u002Fintent-filter>\n","xml",[876],{"type":40,"tag":118,"props":877,"children":878},{"__ignoreMap":311},[879,887,895,903,911,919,927],{"type":40,"tag":317,"props":880,"children":881},{"class":319,"line":320},[882],{"type":40,"tag":317,"props":883,"children":884},{},[885],{"type":46,"value":886},"\u003Cintent-filter android:autoVerify=\"true\">\n",{"type":40,"tag":317,"props":888,"children":889},{"class":319,"line":357},[890],{"type":40,"tag":317,"props":891,"children":892},{},[893],{"type":46,"value":894},"    \u003Caction android:name=\"android.intent.action.VIEW\" \u002F>\n",{"type":40,"tag":317,"props":896,"children":897},{"class":319,"line":383},[898],{"type":40,"tag":317,"props":899,"children":900},{},[901],{"type":46,"value":902},"    \u003Ccategory android:name=\"android.intent.category.DEFAULT\" \u002F>\n",{"type":40,"tag":317,"props":904,"children":905},{"class":319,"line":465},[906],{"type":40,"tag":317,"props":907,"children":908},{},[909],{"type":46,"value":910},"    \u003Ccategory android:name=\"android.intent.category.BROWSABLE\" \u002F>\n",{"type":40,"tag":317,"props":912,"children":913},{"class":319,"line":474},[914],{"type":40,"tag":317,"props":915,"children":916},{},[917],{"type":46,"value":918},"    \u003Cdata android:scheme=\"http\" android:host=\"yourdomain.com\" \u002F>\n",{"type":40,"tag":317,"props":920,"children":921},{"class":319,"line":483},[922],{"type":40,"tag":317,"props":923,"children":924},{},[925],{"type":46,"value":926},"    \u003Cdata android:scheme=\"https\" \u002F>\n",{"type":40,"tag":317,"props":928,"children":929},{"class":319,"line":492},[930],{"type":40,"tag":317,"props":931,"children":932},{},[933],{"type":46,"value":934},"\u003C\u002Fintent-filter>\n",{"type":40,"tag":836,"props":936,"children":937},{"start":357},[938],{"type":40,"tag":60,"props":939,"children":940},{},[941,952,954,960],{"type":40,"tag":133,"props":942,"children":943},{},[944,946],{"type":46,"value":945},"Host ",{"type":40,"tag":118,"props":947,"children":949},{"className":948},[],[950],{"type":46,"value":951},"assetlinks.json",{"type":46,"value":953},": Serve the following JSON at ",{"type":40,"tag":118,"props":955,"children":957},{"className":956},[],[958],{"type":46,"value":959},"https:\u002F\u002Fyourdomain.com\u002F.well-known\u002Fassetlinks.json",{"type":46,"value":293},{"type":40,"tag":306,"props":962,"children":966},{"className":963,"code":964,"language":965,"meta":311,"style":311},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[{\n  \"relation\": [\"delegate_permission\u002Fcommon.handle_all_urls\"],\n  \"target\": {\n    \"namespace\": \"android_app\",\n    \"package_name\": \"com.yourcompany.yourapp\",\n    \"sha256_cert_fingerprints\": [\"YOUR_SHA256_FINGERPRINT\"]\n  }\n}]\n","json",[967],{"type":40,"tag":118,"props":968,"children":969},{"__ignoreMap":311},[970,978,1025,1050,1090,1127,1169,1176],{"type":40,"tag":317,"props":971,"children":972},{"class":319,"line":320},[973],{"type":40,"tag":317,"props":974,"children":975},{"style":335},[976],{"type":46,"value":977},"[{\n",{"type":40,"tag":317,"props":979,"children":980},{"class":319,"line":357},[981,986,992,997,1002,1007,1011,1016,1020],{"type":40,"tag":317,"props":982,"children":983},{"style":335},[984],{"type":46,"value":985},"  \"",{"type":40,"tag":317,"props":987,"children":989},{"style":988},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[990],{"type":46,"value":991},"relation",{"type":40,"tag":317,"props":993,"children":994},{"style":335},[995],{"type":46,"value":996},"\"",{"type":40,"tag":317,"props":998,"children":999},{"style":335},[1000],{"type":46,"value":1001},":",{"type":40,"tag":317,"props":1003,"children":1004},{"style":335},[1005],{"type":46,"value":1006}," [",{"type":40,"tag":317,"props":1008,"children":1009},{"style":335},[1010],{"type":46,"value":996},{"type":40,"tag":317,"props":1012,"children":1013},{"style":329},[1014],{"type":46,"value":1015},"delegate_permission\u002Fcommon.handle_all_urls",{"type":40,"tag":317,"props":1017,"children":1018},{"style":335},[1019],{"type":46,"value":996},{"type":40,"tag":317,"props":1021,"children":1022},{"style":335},[1023],{"type":46,"value":1024},"],\n",{"type":40,"tag":317,"props":1026,"children":1027},{"class":319,"line":383},[1028,1032,1037,1041,1045],{"type":40,"tag":317,"props":1029,"children":1030},{"style":335},[1031],{"type":46,"value":985},{"type":40,"tag":317,"props":1033,"children":1034},{"style":988},[1035],{"type":46,"value":1036},"target",{"type":40,"tag":317,"props":1038,"children":1039},{"style":335},[1040],{"type":46,"value":996},{"type":40,"tag":317,"props":1042,"children":1043},{"style":335},[1044],{"type":46,"value":1001},{"type":40,"tag":317,"props":1046,"children":1047},{"style":335},[1048],{"type":46,"value":1049}," {\n",{"type":40,"tag":317,"props":1051,"children":1052},{"class":319,"line":465},[1053,1058,1063,1067,1071,1076,1081,1085],{"type":40,"tag":317,"props":1054,"children":1055},{"style":335},[1056],{"type":46,"value":1057},"    \"",{"type":40,"tag":317,"props":1059,"children":1060},{"style":324},[1061],{"type":46,"value":1062},"namespace",{"type":40,"tag":317,"props":1064,"children":1065},{"style":335},[1066],{"type":46,"value":996},{"type":40,"tag":317,"props":1068,"children":1069},{"style":335},[1070],{"type":46,"value":1001},{"type":40,"tag":317,"props":1072,"children":1073},{"style":335},[1074],{"type":46,"value":1075}," \"",{"type":40,"tag":317,"props":1077,"children":1078},{"style":329},[1079],{"type":46,"value":1080},"android_app",{"type":40,"tag":317,"props":1082,"children":1083},{"style":335},[1084],{"type":46,"value":996},{"type":40,"tag":317,"props":1086,"children":1087},{"style":335},[1088],{"type":46,"value":1089},",\n",{"type":40,"tag":317,"props":1091,"children":1092},{"class":319,"line":474},[1093,1097,1102,1106,1110,1114,1119,1123],{"type":40,"tag":317,"props":1094,"children":1095},{"style":335},[1096],{"type":46,"value":1057},{"type":40,"tag":317,"props":1098,"children":1099},{"style":324},[1100],{"type":46,"value":1101},"package_name",{"type":40,"tag":317,"props":1103,"children":1104},{"style":335},[1105],{"type":46,"value":996},{"type":40,"tag":317,"props":1107,"children":1108},{"style":335},[1109],{"type":46,"value":1001},{"type":40,"tag":317,"props":1111,"children":1112},{"style":335},[1113],{"type":46,"value":1075},{"type":40,"tag":317,"props":1115,"children":1116},{"style":329},[1117],{"type":46,"value":1118},"com.yourcompany.yourapp",{"type":40,"tag":317,"props":1120,"children":1121},{"style":335},[1122],{"type":46,"value":996},{"type":40,"tag":317,"props":1124,"children":1125},{"style":335},[1126],{"type":46,"value":1089},{"type":40,"tag":317,"props":1128,"children":1129},{"class":319,"line":483},[1130,1134,1139,1143,1147,1151,1155,1160,1164],{"type":40,"tag":317,"props":1131,"children":1132},{"style":335},[1133],{"type":46,"value":1057},{"type":40,"tag":317,"props":1135,"children":1136},{"style":324},[1137],{"type":46,"value":1138},"sha256_cert_fingerprints",{"type":40,"tag":317,"props":1140,"children":1141},{"style":335},[1142],{"type":46,"value":996},{"type":40,"tag":317,"props":1144,"children":1145},{"style":335},[1146],{"type":46,"value":1001},{"type":40,"tag":317,"props":1148,"children":1149},{"style":335},[1150],{"type":46,"value":1006},{"type":40,"tag":317,"props":1152,"children":1153},{"style":335},[1154],{"type":46,"value":996},{"type":40,"tag":317,"props":1156,"children":1157},{"style":329},[1158],{"type":46,"value":1159},"YOUR_SHA256_FINGERPRINT",{"type":40,"tag":317,"props":1161,"children":1162},{"style":335},[1163],{"type":46,"value":996},{"type":40,"tag":317,"props":1165,"children":1166},{"style":335},[1167],{"type":46,"value":1168},"]\n",{"type":40,"tag":317,"props":1170,"children":1171},{"class":319,"line":492},[1172],{"type":40,"tag":317,"props":1173,"children":1174},{"style":335},[1175],{"type":46,"value":765},{"type":40,"tag":317,"props":1177,"children":1178},{"class":319,"line":501},[1179],{"type":40,"tag":317,"props":1180,"children":1181},{"style":335},[1182],{"type":46,"value":1183},"}]\n",{"type":40,"tag":212,"props":1185,"children":1187},{"id":1186},"if-configuring-for-ios",[1188],{"type":46,"value":1189},"If configuring for iOS:",{"type":40,"tag":836,"props":1191,"children":1192},{},[1193],{"type":40,"tag":60,"props":1194,"children":1195},{},[1196,1206,1208],{"type":40,"tag":133,"props":1197,"children":1198},{},[1199,1200],{"type":46,"value":846},{"type":40,"tag":118,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":46,"value":1205},"Info.plist",{"type":46,"value":1207},": Opt-in to Flutter's default deep link handler.\n",{"type":40,"tag":1209,"props":1210,"children":1211},"em",{},[1212,1214,1220,1222,1228],{"type":46,"value":1213},"Note: If using a third-party deep linking plugin (e.g., ",{"type":40,"tag":118,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":46,"value":1219},"app_links",{"type":46,"value":1221},"), set this to ",{"type":40,"tag":118,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":46,"value":1227},"NO",{"type":46,"value":1229}," to prevent conflicts.",{"type":40,"tag":306,"props":1231,"children":1233},{"className":872,"code":1232,"language":874,"meta":311,"style":311},"\u003Ckey>FlutterDeepLinkingEnabled\u003C\u002Fkey>\n\u003Ctrue\u002F>\n",[1234],{"type":40,"tag":118,"props":1235,"children":1236},{"__ignoreMap":311},[1237,1245],{"type":40,"tag":317,"props":1238,"children":1239},{"class":319,"line":320},[1240],{"type":40,"tag":317,"props":1241,"children":1242},{},[1243],{"type":46,"value":1244},"\u003Ckey>FlutterDeepLinkingEnabled\u003C\u002Fkey>\n",{"type":40,"tag":317,"props":1246,"children":1247},{"class":319,"line":357},[1248],{"type":40,"tag":317,"props":1249,"children":1250},{},[1251],{"type":46,"value":1252},"\u003Ctrue\u002F>\n",{"type":40,"tag":836,"props":1254,"children":1255},{"start":357},[1256],{"type":40,"tag":60,"props":1257,"children":1258},{},[1259,1269],{"type":40,"tag":133,"props":1260,"children":1261},{},[1262,1263],{"type":46,"value":846},{"type":40,"tag":118,"props":1264,"children":1266},{"className":1265},[],[1267],{"type":46,"value":1268},"Runner.entitlements",{"type":46,"value":1270},": Add the associated domain.",{"type":40,"tag":306,"props":1272,"children":1274},{"className":872,"code":1273,"language":874,"meta":311,"style":311},"\u003Ckey>com.apple.developer.associated-domains\u003C\u002Fkey>\n\u003Carray>\n  \u003Cstring>applinks:yourdomain.com\u003C\u002Fstring>\n\u003C\u002Farray>\n",[1275],{"type":40,"tag":118,"props":1276,"children":1277},{"__ignoreMap":311},[1278,1286,1294,1302],{"type":40,"tag":317,"props":1279,"children":1280},{"class":319,"line":320},[1281],{"type":40,"tag":317,"props":1282,"children":1283},{},[1284],{"type":46,"value":1285},"\u003Ckey>com.apple.developer.associated-domains\u003C\u002Fkey>\n",{"type":40,"tag":317,"props":1287,"children":1288},{"class":319,"line":357},[1289],{"type":40,"tag":317,"props":1290,"children":1291},{},[1292],{"type":46,"value":1293},"\u003Carray>\n",{"type":40,"tag":317,"props":1295,"children":1296},{"class":319,"line":383},[1297],{"type":40,"tag":317,"props":1298,"children":1299},{},[1300],{"type":46,"value":1301},"  \u003Cstring>applinks:yourdomain.com\u003C\u002Fstring>\n",{"type":40,"tag":317,"props":1303,"children":1304},{"class":319,"line":465},[1305],{"type":40,"tag":317,"props":1306,"children":1307},{},[1308],{"type":46,"value":1309},"\u003C\u002Farray>\n",{"type":40,"tag":836,"props":1311,"children":1312},{"start":383},[1313],{"type":40,"tag":60,"props":1314,"children":1315},{},[1316,1326,1328,1334,1336,1342],{"type":40,"tag":133,"props":1317,"children":1318},{},[1319,1320],{"type":46,"value":945},{"type":40,"tag":118,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":46,"value":1325},"apple-app-site-association",{"type":46,"value":1327},": Serve the following JSON (without a ",{"type":40,"tag":118,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":46,"value":1333},".json",{"type":46,"value":1335}," extension) at ",{"type":40,"tag":118,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":46,"value":1341},"https:\u002F\u002Fyourdomain.com\u002F.well-known\u002Fapple-app-site-association",{"type":46,"value":293},{"type":40,"tag":306,"props":1344,"children":1346},{"className":963,"code":1345,"language":965,"meta":311,"style":311},"{\n  \"applinks\": {\n    \"apps\": [],\n    \"details\": [{\n      \"appIDs\": [\"TEAM_ID.com.yourcompany.yourapp\"],\n      \"paths\": [\"*\"],\n      \"components\": [{\"\u002F\": \"\u002F*\"}]\n    }]\n  }\n}\n",[1347],{"type":40,"tag":118,"props":1348,"children":1349},{"__ignoreMap":311},[1350,1358,1382,1407,1432,1475,1516,1576,1584,1591],{"type":40,"tag":317,"props":1351,"children":1352},{"class":319,"line":320},[1353],{"type":40,"tag":317,"props":1354,"children":1355},{"style":335},[1356],{"type":46,"value":1357},"{\n",{"type":40,"tag":317,"props":1359,"children":1360},{"class":319,"line":357},[1361,1365,1370,1374,1378],{"type":40,"tag":317,"props":1362,"children":1363},{"style":335},[1364],{"type":46,"value":985},{"type":40,"tag":317,"props":1366,"children":1367},{"style":988},[1368],{"type":46,"value":1369},"applinks",{"type":40,"tag":317,"props":1371,"children":1372},{"style":335},[1373],{"type":46,"value":996},{"type":40,"tag":317,"props":1375,"children":1376},{"style":335},[1377],{"type":46,"value":1001},{"type":40,"tag":317,"props":1379,"children":1380},{"style":335},[1381],{"type":46,"value":1049},{"type":40,"tag":317,"props":1383,"children":1384},{"class":319,"line":383},[1385,1389,1394,1398,1402],{"type":40,"tag":317,"props":1386,"children":1387},{"style":335},[1388],{"type":46,"value":1057},{"type":40,"tag":317,"props":1390,"children":1391},{"style":324},[1392],{"type":46,"value":1393},"apps",{"type":40,"tag":317,"props":1395,"children":1396},{"style":335},[1397],{"type":46,"value":996},{"type":40,"tag":317,"props":1399,"children":1400},{"style":335},[1401],{"type":46,"value":1001},{"type":40,"tag":317,"props":1403,"children":1404},{"style":335},[1405],{"type":46,"value":1406}," [],\n",{"type":40,"tag":317,"props":1408,"children":1409},{"class":319,"line":465},[1410,1414,1419,1423,1427],{"type":40,"tag":317,"props":1411,"children":1412},{"style":335},[1413],{"type":46,"value":1057},{"type":40,"tag":317,"props":1415,"children":1416},{"style":324},[1417],{"type":46,"value":1418},"details",{"type":40,"tag":317,"props":1420,"children":1421},{"style":335},[1422],{"type":46,"value":996},{"type":40,"tag":317,"props":1424,"children":1425},{"style":335},[1426],{"type":46,"value":1001},{"type":40,"tag":317,"props":1428,"children":1429},{"style":335},[1430],{"type":46,"value":1431}," [{\n",{"type":40,"tag":317,"props":1433,"children":1434},{"class":319,"line":474},[1435,1440,1446,1450,1454,1458,1462,1467,1471],{"type":40,"tag":317,"props":1436,"children":1437},{"style":335},[1438],{"type":46,"value":1439},"      \"",{"type":40,"tag":317,"props":1441,"children":1443},{"style":1442},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1444],{"type":46,"value":1445},"appIDs",{"type":40,"tag":317,"props":1447,"children":1448},{"style":335},[1449],{"type":46,"value":996},{"type":40,"tag":317,"props":1451,"children":1452},{"style":335},[1453],{"type":46,"value":1001},{"type":40,"tag":317,"props":1455,"children":1456},{"style":335},[1457],{"type":46,"value":1006},{"type":40,"tag":317,"props":1459,"children":1460},{"style":335},[1461],{"type":46,"value":996},{"type":40,"tag":317,"props":1463,"children":1464},{"style":329},[1465],{"type":46,"value":1466},"TEAM_ID.com.yourcompany.yourapp",{"type":40,"tag":317,"props":1468,"children":1469},{"style":335},[1470],{"type":46,"value":996},{"type":40,"tag":317,"props":1472,"children":1473},{"style":335},[1474],{"type":46,"value":1024},{"type":40,"tag":317,"props":1476,"children":1477},{"class":319,"line":483},[1478,1482,1487,1491,1495,1499,1503,1508,1512],{"type":40,"tag":317,"props":1479,"children":1480},{"style":335},[1481],{"type":46,"value":1439},{"type":40,"tag":317,"props":1483,"children":1484},{"style":1442},[1485],{"type":46,"value":1486},"paths",{"type":40,"tag":317,"props":1488,"children":1489},{"style":335},[1490],{"type":46,"value":996},{"type":40,"tag":317,"props":1492,"children":1493},{"style":335},[1494],{"type":46,"value":1001},{"type":40,"tag":317,"props":1496,"children":1497},{"style":335},[1498],{"type":46,"value":1006},{"type":40,"tag":317,"props":1500,"children":1501},{"style":335},[1502],{"type":46,"value":996},{"type":40,"tag":317,"props":1504,"children":1505},{"style":329},[1506],{"type":46,"value":1507},"*",{"type":40,"tag":317,"props":1509,"children":1510},{"style":335},[1511],{"type":46,"value":996},{"type":40,"tag":317,"props":1513,"children":1514},{"style":335},[1515],{"type":46,"value":1024},{"type":40,"tag":317,"props":1517,"children":1518},{"class":319,"line":492},[1519,1523,1528,1532,1536,1541,1545,1551,1555,1559,1563,1568,1572],{"type":40,"tag":317,"props":1520,"children":1521},{"style":335},[1522],{"type":46,"value":1439},{"type":40,"tag":317,"props":1524,"children":1525},{"style":1442},[1526],{"type":46,"value":1527},"components",{"type":40,"tag":317,"props":1529,"children":1530},{"style":335},[1531],{"type":46,"value":996},{"type":40,"tag":317,"props":1533,"children":1534},{"style":335},[1535],{"type":46,"value":1001},{"type":40,"tag":317,"props":1537,"children":1538},{"style":335},[1539],{"type":46,"value":1540}," [{",{"type":40,"tag":317,"props":1542,"children":1543},{"style":335},[1544],{"type":46,"value":996},{"type":40,"tag":317,"props":1546,"children":1548},{"style":1547},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1549],{"type":46,"value":1550},"\u002F",{"type":40,"tag":317,"props":1552,"children":1553},{"style":335},[1554],{"type":46,"value":996},{"type":40,"tag":317,"props":1556,"children":1557},{"style":335},[1558],{"type":46,"value":1001},{"type":40,"tag":317,"props":1560,"children":1561},{"style":335},[1562],{"type":46,"value":1075},{"type":40,"tag":317,"props":1564,"children":1565},{"style":329},[1566],{"type":46,"value":1567},"\u002F*",{"type":40,"tag":317,"props":1569,"children":1570},{"style":335},[1571],{"type":46,"value":996},{"type":40,"tag":317,"props":1573,"children":1574},{"style":335},[1575],{"type":46,"value":1183},{"type":40,"tag":317,"props":1577,"children":1578},{"class":319,"line":501},[1579],{"type":40,"tag":317,"props":1580,"children":1581},{"style":335},[1582],{"type":46,"value":1583},"    }]\n",{"type":40,"tag":317,"props":1585,"children":1586},{"class":319,"line":510},[1587],{"type":40,"tag":317,"props":1588,"children":1589},{"style":335},[1590],{"type":46,"value":765},{"type":40,"tag":317,"props":1592,"children":1593},{"class":319,"line":519},[1594],{"type":40,"tag":317,"props":1595,"children":1596},{"style":335},[1597],{"type":46,"value":516},{"type":40,"tag":212,"props":1599,"children":1601},{"id":1600},"validation-loop",[1602],{"type":46,"value":1603},"Validation Loop",{"type":40,"tag":112,"props":1605,"children":1606},{},[1607],{"type":46,"value":1608},"Run validator -> review errors -> fix.",{"type":40,"tag":56,"props":1610,"children":1611},{},[1612,1662],{"type":40,"tag":60,"props":1613,"children":1614},{},[1615,1620,1622],{"type":40,"tag":133,"props":1616,"children":1617},{},[1618],{"type":46,"value":1619},"Android",{"type":46,"value":1621},": Test using ADB.\n",{"type":40,"tag":306,"props":1623,"children":1625},{"className":308,"code":1624,"language":310,"meta":311,"style":311},"adb shell 'am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d \"https:\u002F\u002Fyourdomain.com\u002Fdetails\u002F123\"' com.yourcompany.yourapp\n",[1626],{"type":40,"tag":118,"props":1627,"children":1628},{"__ignoreMap":311},[1629],{"type":40,"tag":317,"props":1630,"children":1631},{"class":319,"line":320},[1632,1637,1642,1647,1652,1657],{"type":40,"tag":317,"props":1633,"children":1634},{"style":324},[1635],{"type":46,"value":1636},"adb",{"type":40,"tag":317,"props":1638,"children":1639},{"style":329},[1640],{"type":46,"value":1641}," shell",{"type":40,"tag":317,"props":1643,"children":1644},{"style":335},[1645],{"type":46,"value":1646}," '",{"type":40,"tag":317,"props":1648,"children":1649},{"style":329},[1650],{"type":46,"value":1651},"am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d \"https:\u002F\u002Fyourdomain.com\u002Fdetails\u002F123\"",{"type":40,"tag":317,"props":1653,"children":1654},{"style":335},[1655],{"type":46,"value":1656},"'",{"type":40,"tag":317,"props":1658,"children":1659},{"style":329},[1660],{"type":46,"value":1661}," com.yourcompany.yourapp\n",{"type":40,"tag":60,"props":1663,"children":1664},{},[1665,1670,1672,1678,1680],{"type":40,"tag":133,"props":1666,"children":1667},{},[1668],{"type":46,"value":1669},"iOS",{"type":46,"value":1671},": Test using ",{"type":40,"tag":118,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":46,"value":1677},"xcrun",{"type":46,"value":1679}," on a booted simulator.\n",{"type":40,"tag":306,"props":1681,"children":1683},{"className":308,"code":1682,"language":310,"meta":311,"style":311},"xcrun simctl openurl booted https:\u002F\u002Fyourdomain.com\u002Fdetails\u002F123\n",[1684],{"type":40,"tag":118,"props":1685,"children":1686},{"__ignoreMap":311},[1687],{"type":40,"tag":317,"props":1688,"children":1689},{"class":319,"line":320},[1690,1694,1699,1704,1709],{"type":40,"tag":317,"props":1691,"children":1692},{"style":324},[1693],{"type":46,"value":1677},{"type":40,"tag":317,"props":1695,"children":1696},{"style":329},[1697],{"type":46,"value":1698}," simctl",{"type":40,"tag":317,"props":1700,"children":1701},{"style":329},[1702],{"type":46,"value":1703}," openurl",{"type":40,"tag":317,"props":1705,"children":1706},{"style":329},[1707],{"type":46,"value":1708}," booted",{"type":40,"tag":317,"props":1710,"children":1711},{"style":329},[1712],{"type":46,"value":1713}," https:\u002F\u002Fyourdomain.com\u002Fdetails\u002F123\n",{"type":40,"tag":49,"props":1715,"children":1717},{"id":1716},"workflow-implementing-nested-navigation",[1718],{"type":46,"value":96},{"type":40,"tag":112,"props":1720,"children":1721},{},[1722,1724,1729],{"type":46,"value":1723},"Use ",{"type":40,"tag":118,"props":1725,"children":1727},{"className":1726},[],[1728],{"type":46,"value":173},{"type":46,"value":1730}," to implement persistent UI shells (like a bottom navigation bar) that maintain the state of their child routes.",{"type":40,"tag":212,"props":1732,"children":1734},{"id":1733},"task-progress-2",[1735],{"type":46,"value":217},{"type":40,"tag":56,"props":1737,"children":1739},{"className":1738},[221],[1740,1763,1780],{"type":40,"tag":60,"props":1741,"children":1743},{"className":1742},[226],[1744,1747,1749,1755,1757,1762],{"type":40,"tag":229,"props":1745,"children":1746},{"disabled":231,"type":232},[],{"type":46,"value":1748}," Define ",{"type":40,"tag":118,"props":1750,"children":1752},{"className":1751},[],[1753],{"type":46,"value":1754},"StatefulShellRoute.indexedStack",{"type":46,"value":1756}," in the ",{"type":40,"tag":118,"props":1758,"children":1760},{"className":1759},[],[1761],{"type":46,"value":137},{"type":46,"value":276},{"type":40,"tag":60,"props":1764,"children":1766},{"className":1765},[226],[1767,1770,1772,1778],{"type":40,"tag":229,"props":1768,"children":1769},{"disabled":231,"type":232},[],{"type":46,"value":1771}," Create ",{"type":40,"tag":118,"props":1773,"children":1775},{"className":1774},[],[1776],{"type":46,"value":1777},"StatefulShellBranch",{"type":46,"value":1779}," instances for each navigation tab.",{"type":40,"tag":60,"props":1781,"children":1783},{"className":1782},[226],[1784,1787,1789,1795],{"type":40,"tag":229,"props":1785,"children":1786},{"disabled":231,"type":232},[],{"type":46,"value":1788}," Implement the shell widget using ",{"type":40,"tag":118,"props":1790,"children":1792},{"className":1791},[],[1793],{"type":46,"value":1794},"StatefulNavigationShell",{"type":46,"value":293},{"type":40,"tag":306,"props":1797,"children":1799},{"className":432,"code":1798,"language":434,"meta":311,"style":311},"final GoRouter _router = GoRouter(\n  initialLocation: '\u002Fhome',\n  routes: [\n    StatefulShellRoute.indexedStack(\n      builder: (context, state, navigationShell) {\n        return ScaffoldWithNavBar(navigationShell: navigationShell);\n      },\n      branches: [\n        StatefulShellBranch(\n          routes: [\n            GoRoute(\n              path: '\u002Fhome',\n              builder: (context, state) => const HomeScreen(),\n            ),\n          ],\n        ),\n        StatefulShellBranch(\n          routes: [\n            GoRoute(\n              path: '\u002Fsettings',\n              builder: (context, state) => const SettingsScreen(),\n            ),\n          ],\n        ),\n      ],\n    ),\n  ],\n);\n",[1800],{"type":40,"tag":118,"props":1801,"children":1802},{"__ignoreMap":311},[1803,1810,1818,1825,1833,1841,1849,1857,1865,1873,1881,1889,1897,1905,1913,1921,1928,1935,1942,1949,1957,1965,1972,1979,1986,1993,2000,2007],{"type":40,"tag":317,"props":1804,"children":1805},{"class":319,"line":320},[1806],{"type":40,"tag":317,"props":1807,"children":1808},{},[1809],{"type":46,"value":533},{"type":40,"tag":317,"props":1811,"children":1812},{"class":319,"line":357},[1813],{"type":40,"tag":317,"props":1814,"children":1815},{},[1816],{"type":46,"value":1817},"  initialLocation: '\u002Fhome',\n",{"type":40,"tag":317,"props":1819,"children":1820},{"class":319,"line":383},[1821],{"type":40,"tag":317,"props":1822,"children":1823},{},[1824],{"type":46,"value":551},{"type":40,"tag":317,"props":1826,"children":1827},{"class":319,"line":465},[1828],{"type":40,"tag":317,"props":1829,"children":1830},{},[1831],{"type":46,"value":1832},"    StatefulShellRoute.indexedStack(\n",{"type":40,"tag":317,"props":1834,"children":1835},{"class":319,"line":474},[1836],{"type":40,"tag":317,"props":1837,"children":1838},{},[1839],{"type":46,"value":1840},"      builder: (context, state, navigationShell) {\n",{"type":40,"tag":317,"props":1842,"children":1843},{"class":319,"line":483},[1844],{"type":40,"tag":317,"props":1845,"children":1846},{},[1847],{"type":46,"value":1848},"        return ScaffoldWithNavBar(navigationShell: navigationShell);\n",{"type":40,"tag":317,"props":1850,"children":1851},{"class":319,"line":492},[1852],{"type":40,"tag":317,"props":1853,"children":1854},{},[1855],{"type":46,"value":1856},"      },\n",{"type":40,"tag":317,"props":1858,"children":1859},{"class":319,"line":501},[1860],{"type":40,"tag":317,"props":1861,"children":1862},{},[1863],{"type":46,"value":1864},"      branches: [\n",{"type":40,"tag":317,"props":1866,"children":1867},{"class":319,"line":510},[1868],{"type":40,"tag":317,"props":1869,"children":1870},{},[1871],{"type":46,"value":1872},"        StatefulShellBranch(\n",{"type":40,"tag":317,"props":1874,"children":1875},{"class":319,"line":519},[1876],{"type":40,"tag":317,"props":1877,"children":1878},{},[1879],{"type":46,"value":1880},"          routes: [\n",{"type":40,"tag":317,"props":1882,"children":1883},{"class":319,"line":527},[1884],{"type":40,"tag":317,"props":1885,"children":1886},{},[1887],{"type":46,"value":1888},"            GoRoute(\n",{"type":40,"tag":317,"props":1890,"children":1891},{"class":319,"line":536},[1892],{"type":40,"tag":317,"props":1893,"children":1894},{},[1895],{"type":46,"value":1896},"              path: '\u002Fhome',\n",{"type":40,"tag":317,"props":1898,"children":1899},{"class":319,"line":545},[1900],{"type":40,"tag":317,"props":1901,"children":1902},{},[1903],{"type":46,"value":1904},"              builder: (context, state) => const HomeScreen(),\n",{"type":40,"tag":317,"props":1906,"children":1907},{"class":319,"line":554},[1908],{"type":40,"tag":317,"props":1909,"children":1910},{},[1911],{"type":46,"value":1912},"            ),\n",{"type":40,"tag":317,"props":1914,"children":1915},{"class":319,"line":563},[1916],{"type":40,"tag":317,"props":1917,"children":1918},{},[1919],{"type":46,"value":1920},"          ],\n",{"type":40,"tag":317,"props":1922,"children":1923},{"class":319,"line":572},[1924],{"type":40,"tag":317,"props":1925,"children":1926},{},[1927],{"type":46,"value":623},{"type":40,"tag":317,"props":1929,"children":1930},{"class":319,"line":581},[1931],{"type":40,"tag":317,"props":1932,"children":1933},{},[1934],{"type":46,"value":1872},{"type":40,"tag":317,"props":1936,"children":1937},{"class":319,"line":590},[1938],{"type":40,"tag":317,"props":1939,"children":1940},{},[1941],{"type":46,"value":1880},{"type":40,"tag":317,"props":1943,"children":1944},{"class":319,"line":599},[1945],{"type":40,"tag":317,"props":1946,"children":1947},{},[1948],{"type":46,"value":1888},{"type":40,"tag":317,"props":1950,"children":1951},{"class":319,"line":608},[1952],{"type":40,"tag":317,"props":1953,"children":1954},{},[1955],{"type":46,"value":1956},"              path: '\u002Fsettings',\n",{"type":40,"tag":317,"props":1958,"children":1959},{"class":319,"line":617},[1960],{"type":40,"tag":317,"props":1961,"children":1962},{},[1963],{"type":46,"value":1964},"              builder: (context, state) => const SettingsScreen(),\n",{"type":40,"tag":317,"props":1966,"children":1967},{"class":319,"line":626},[1968],{"type":40,"tag":317,"props":1969,"children":1970},{},[1971],{"type":46,"value":1912},{"type":40,"tag":317,"props":1973,"children":1974},{"class":319,"line":635},[1975],{"type":40,"tag":317,"props":1976,"children":1977},{},[1978],{"type":46,"value":1920},{"type":40,"tag":317,"props":1980,"children":1981},{"class":319,"line":644},[1982],{"type":40,"tag":317,"props":1983,"children":1984},{},[1985],{"type":46,"value":623},{"type":40,"tag":317,"props":1987,"children":1988},{"class":319,"line":653},[1989],{"type":40,"tag":317,"props":1990,"children":1991},{},[1992],{"type":46,"value":632},{"type":40,"tag":317,"props":1994,"children":1995},{"class":319,"line":662},[1996],{"type":40,"tag":317,"props":1997,"children":1998},{},[1999],{"type":46,"value":641},{"type":40,"tag":317,"props":2001,"children":2002},{"class":319,"line":671},[2003],{"type":40,"tag":317,"props":2004,"children":2005},{},[2006],{"type":46,"value":650},{"type":40,"tag":317,"props":2008,"children":2009},{"class":319,"line":679},[2010],{"type":40,"tag":317,"props":2011,"children":2012},{},[2013],{"type":46,"value":668},{"type":40,"tag":49,"props":2015,"children":2017},{"id":2016},"examples",[2018],{"type":46,"value":105},{"type":40,"tag":212,"props":2020,"children":2022},{"id":2021},"high-fidelity-shell-widget-implementation",[2023],{"type":46,"value":2024},"High-Fidelity Shell Widget Implementation",{"type":40,"tag":112,"props":2026,"children":2027},{},[2028,2030,2035],{"type":46,"value":2029},"Implement the UI shell that consumes the ",{"type":40,"tag":118,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":46,"value":1794},{"type":46,"value":2036}," to handle branch switching.",{"type":40,"tag":306,"props":2038,"children":2040},{"className":432,"code":2039,"language":434,"meta":311,"style":311},"class ScaffoldWithNavBar extends StatelessWidget {\n  const ScaffoldWithNavBar({\n    required this.navigationShell,\n    super.key,\n  });\n\n  final StatefulNavigationShell navigationShell;\n\n  void _goBranch(int index) {\n    navigationShell.goBranch(\n      index,\n      \u002F\u002F Support navigating to the initial location when tapping the active tab.\n      initialLocation: index == navigationShell.currentIndex,\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: navigationShell,\n      bottomNavigationBar: NavigationBar(\n        selectedIndex: navigationShell.currentIndex,\n        onDestinationSelected: _goBranch,\n        destinations: const [\n          NavigationDestination(icon: Icon(Icons.home), label: 'Home'),\n          NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),\n        ],\n      ),\n    );\n  }\n}\n",[2041],{"type":40,"tag":118,"props":2042,"children":2043},{"__ignoreMap":311},[2044,2052,2060,2068,2076,2084,2091,2099,2106,2114,2122,2130,2138,2146,2153,2160,2167,2174,2181,2189,2197,2205,2213,2221,2229,2237,2245,2253,2261,2268,2275],{"type":40,"tag":317,"props":2045,"children":2046},{"class":319,"line":320},[2047],{"type":40,"tag":317,"props":2048,"children":2049},{},[2050],{"type":46,"value":2051},"class ScaffoldWithNavBar extends StatelessWidget {\n",{"type":40,"tag":317,"props":2053,"children":2054},{"class":319,"line":357},[2055],{"type":40,"tag":317,"props":2056,"children":2057},{},[2058],{"type":46,"value":2059},"  const ScaffoldWithNavBar({\n",{"type":40,"tag":317,"props":2061,"children":2062},{"class":319,"line":383},[2063],{"type":40,"tag":317,"props":2064,"children":2065},{},[2066],{"type":46,"value":2067},"    required this.navigationShell,\n",{"type":40,"tag":317,"props":2069,"children":2070},{"class":319,"line":465},[2071],{"type":40,"tag":317,"props":2072,"children":2073},{},[2074],{"type":46,"value":2075},"    super.key,\n",{"type":40,"tag":317,"props":2077,"children":2078},{"class":319,"line":474},[2079],{"type":40,"tag":317,"props":2080,"children":2081},{},[2082],{"type":46,"value":2083},"  });\n",{"type":40,"tag":317,"props":2085,"children":2086},{"class":319,"line":483},[2087],{"type":40,"tag":317,"props":2088,"children":2089},{"emptyLinePlaceholder":231},[2090],{"type":46,"value":471},{"type":40,"tag":317,"props":2092,"children":2093},{"class":319,"line":492},[2094],{"type":40,"tag":317,"props":2095,"children":2096},{},[2097],{"type":46,"value":2098},"  final StatefulNavigationShell navigationShell;\n",{"type":40,"tag":317,"props":2100,"children":2101},{"class":319,"line":501},[2102],{"type":40,"tag":317,"props":2103,"children":2104},{"emptyLinePlaceholder":231},[2105],{"type":46,"value":471},{"type":40,"tag":317,"props":2107,"children":2108},{"class":319,"line":510},[2109],{"type":40,"tag":317,"props":2110,"children":2111},{},[2112],{"type":46,"value":2113},"  void _goBranch(int index) {\n",{"type":40,"tag":317,"props":2115,"children":2116},{"class":319,"line":519},[2117],{"type":40,"tag":317,"props":2118,"children":2119},{},[2120],{"type":46,"value":2121},"    navigationShell.goBranch(\n",{"type":40,"tag":317,"props":2123,"children":2124},{"class":319,"line":527},[2125],{"type":40,"tag":317,"props":2126,"children":2127},{},[2128],{"type":46,"value":2129},"      index,\n",{"type":40,"tag":317,"props":2131,"children":2132},{"class":319,"line":536},[2133],{"type":40,"tag":317,"props":2134,"children":2135},{},[2136],{"type":46,"value":2137},"      \u002F\u002F Support navigating to the initial location when tapping the active tab.\n",{"type":40,"tag":317,"props":2139,"children":2140},{"class":319,"line":545},[2141],{"type":40,"tag":317,"props":2142,"children":2143},{},[2144],{"type":46,"value":2145},"      initialLocation: index == navigationShell.currentIndex,\n",{"type":40,"tag":317,"props":2147,"children":2148},{"class":319,"line":554},[2149],{"type":40,"tag":317,"props":2150,"children":2151},{},[2152],{"type":46,"value":756},{"type":40,"tag":317,"props":2154,"children":2155},{"class":319,"line":563},[2156],{"type":40,"tag":317,"props":2157,"children":2158},{},[2159],{"type":46,"value":765},{"type":40,"tag":317,"props":2161,"children":2162},{"class":319,"line":572},[2163],{"type":40,"tag":317,"props":2164,"children":2165},{"emptyLinePlaceholder":231},[2166],{"type":46,"value":471},{"type":40,"tag":317,"props":2168,"children":2169},{"class":319,"line":581},[2170],{"type":40,"tag":317,"props":2171,"children":2172},{},[2173],{"type":46,"value":711},{"type":40,"tag":317,"props":2175,"children":2176},{"class":319,"line":590},[2177],{"type":40,"tag":317,"props":2178,"children":2179},{},[2180],{"type":46,"value":720},{"type":40,"tag":317,"props":2182,"children":2183},{"class":319,"line":599},[2184],{"type":40,"tag":317,"props":2185,"children":2186},{},[2187],{"type":46,"value":2188},"    return Scaffold(\n",{"type":40,"tag":317,"props":2190,"children":2191},{"class":319,"line":608},[2192],{"type":40,"tag":317,"props":2193,"children":2194},{},[2195],{"type":46,"value":2196},"      body: navigationShell,\n",{"type":40,"tag":317,"props":2198,"children":2199},{"class":319,"line":617},[2200],{"type":40,"tag":317,"props":2201,"children":2202},{},[2203],{"type":46,"value":2204},"      bottomNavigationBar: NavigationBar(\n",{"type":40,"tag":317,"props":2206,"children":2207},{"class":319,"line":626},[2208],{"type":40,"tag":317,"props":2209,"children":2210},{},[2211],{"type":46,"value":2212},"        selectedIndex: navigationShell.currentIndex,\n",{"type":40,"tag":317,"props":2214,"children":2215},{"class":319,"line":635},[2216],{"type":40,"tag":317,"props":2217,"children":2218},{},[2219],{"type":46,"value":2220},"        onDestinationSelected: _goBranch,\n",{"type":40,"tag":317,"props":2222,"children":2223},{"class":319,"line":644},[2224],{"type":40,"tag":317,"props":2225,"children":2226},{},[2227],{"type":46,"value":2228},"        destinations: const [\n",{"type":40,"tag":317,"props":2230,"children":2231},{"class":319,"line":653},[2232],{"type":40,"tag":317,"props":2233,"children":2234},{},[2235],{"type":46,"value":2236},"          NavigationDestination(icon: Icon(Icons.home), label: 'Home'),\n",{"type":40,"tag":317,"props":2238,"children":2239},{"class":319,"line":662},[2240],{"type":40,"tag":317,"props":2241,"children":2242},{},[2243],{"type":46,"value":2244},"          NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),\n",{"type":40,"tag":317,"props":2246,"children":2247},{"class":319,"line":671},[2248],{"type":40,"tag":317,"props":2249,"children":2250},{},[2251],{"type":46,"value":2252},"        ],\n",{"type":40,"tag":317,"props":2254,"children":2255},{"class":319,"line":679},[2256],{"type":40,"tag":317,"props":2257,"children":2258},{},[2259],{"type":46,"value":2260},"      ),\n",{"type":40,"tag":317,"props":2262,"children":2263},{"class":319,"line":688},[2264],{"type":40,"tag":317,"props":2265,"children":2266},{},[2267],{"type":46,"value":756},{"type":40,"tag":317,"props":2269,"children":2270},{"class":319,"line":697},[2271],{"type":40,"tag":317,"props":2272,"children":2273},{},[2274],{"type":46,"value":765},{"type":40,"tag":317,"props":2276,"children":2277},{"class":319,"line":705},[2278],{"type":40,"tag":317,"props":2279,"children":2280},{},[2281],{"type":46,"value":516},{"type":40,"tag":212,"props":2283,"children":2285},{"id":2284},"programmatic-navigation",[2286],{"type":46,"value":2287},"Programmatic Navigation",{"type":40,"tag":112,"props":2289,"children":2290},{},[2291,2292,2298,2300,2306,2308,2313],{"type":46,"value":116},{"type":40,"tag":118,"props":2293,"children":2295},{"className":2294},[],[2296],{"type":46,"value":2297},"context.go()",{"type":46,"value":2299}," and ",{"type":40,"tag":118,"props":2301,"children":2303},{"className":2302},[],[2304],{"type":46,"value":2305},"context.push()",{"type":46,"value":2307}," extension methods provided by ",{"type":40,"tag":118,"props":2309,"children":2311},{"className":2310},[],[2312],{"type":46,"value":123},{"type":46,"value":293},{"type":40,"tag":306,"props":2315,"children":2317},{"className":432,"code":2316,"language":434,"meta":311,"style":311},"\u002F\u002F Replaces the current route stack with the target route (Declarative)\ncontext.go('\u002Fdetails\u002F123');\n\n\u002F\u002F Pushes the target route onto the existing stack (Imperative)\ncontext.push('\u002Fdetails\u002F123');\n\n\u002F\u002F Navigates using a named route and path parameters\ncontext.goNamed('details', pathParameters: {'id': '123'});\n\n\u002F\u002F Pops the current route\ncontext.pop();\n",[2318],{"type":40,"tag":118,"props":2319,"children":2320},{"__ignoreMap":311},[2321,2329,2337,2344,2352,2360,2367,2375,2383,2390,2398],{"type":40,"tag":317,"props":2322,"children":2323},{"class":319,"line":320},[2324],{"type":40,"tag":317,"props":2325,"children":2326},{},[2327],{"type":46,"value":2328},"\u002F\u002F Replaces the current route stack with the target route (Declarative)\n",{"type":40,"tag":317,"props":2330,"children":2331},{"class":319,"line":357},[2332],{"type":40,"tag":317,"props":2333,"children":2334},{},[2335],{"type":46,"value":2336},"context.go('\u002Fdetails\u002F123');\n",{"type":40,"tag":317,"props":2338,"children":2339},{"class":319,"line":383},[2340],{"type":40,"tag":317,"props":2341,"children":2342},{"emptyLinePlaceholder":231},[2343],{"type":46,"value":471},{"type":40,"tag":317,"props":2345,"children":2346},{"class":319,"line":465},[2347],{"type":40,"tag":317,"props":2348,"children":2349},{},[2350],{"type":46,"value":2351},"\u002F\u002F Pushes the target route onto the existing stack (Imperative)\n",{"type":40,"tag":317,"props":2353,"children":2354},{"class":319,"line":474},[2355],{"type":40,"tag":317,"props":2356,"children":2357},{},[2358],{"type":46,"value":2359},"context.push('\u002Fdetails\u002F123');\n",{"type":40,"tag":317,"props":2361,"children":2362},{"class":319,"line":483},[2363],{"type":40,"tag":317,"props":2364,"children":2365},{"emptyLinePlaceholder":231},[2366],{"type":46,"value":471},{"type":40,"tag":317,"props":2368,"children":2369},{"class":319,"line":492},[2370],{"type":40,"tag":317,"props":2371,"children":2372},{},[2373],{"type":46,"value":2374},"\u002F\u002F Navigates using a named route and path parameters\n",{"type":40,"tag":317,"props":2376,"children":2377},{"class":319,"line":501},[2378],{"type":40,"tag":317,"props":2379,"children":2380},{},[2381],{"type":46,"value":2382},"context.goNamed('details', pathParameters: {'id': '123'});\n",{"type":40,"tag":317,"props":2384,"children":2385},{"class":319,"line":510},[2386],{"type":40,"tag":317,"props":2387,"children":2388},{"emptyLinePlaceholder":231},[2389],{"type":46,"value":471},{"type":40,"tag":317,"props":2391,"children":2392},{"class":319,"line":519},[2393],{"type":40,"tag":317,"props":2394,"children":2395},{},[2396],{"type":46,"value":2397},"\u002F\u002F Pops the current route\n",{"type":40,"tag":317,"props":2399,"children":2400},{"class":319,"line":527},[2401],{"type":40,"tag":317,"props":2402,"children":2403},{},[2404],{"type":46,"value":2405},"context.pop();\n",{"type":40,"tag":2407,"props":2408,"children":2409},"style",{},[2410],{"type":46,"value":2411},"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":2413,"total":671},[2414,2426,2437,2449,2460,2469,2481,2493,2505,2517,2531,2541],{"slug":2415,"name":2415,"fn":2416,"description":2417,"org":2418,"tags":2419,"stars":21,"repoUrl":22,"updatedAt":2425},"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},[2420,2422],{"name":2421,"slug":434,"type":14},"Dart",{"name":2423,"slug":2424,"type":14},"Testing","testing","2026-07-15T05:22:40.104823",{"slug":2427,"name":2427,"fn":2428,"description":2429,"org":2430,"tags":2431,"stars":21,"repoUrl":22,"updatedAt":2436},"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},[2432,2435],{"name":2433,"slug":2434,"type":14},"CLI","cli",{"name":2421,"slug":434,"type":14},"2026-07-15T05:22:18.863572",{"slug":2438,"name":2438,"fn":2439,"description":2440,"org":2441,"tags":2442,"stars":21,"repoUrl":22,"updatedAt":2448},"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},[2443,2444,2447],{"name":2421,"slug":434,"type":14},{"name":2445,"slug":2446,"type":14},"Reporting","reporting",{"name":2423,"slug":2424,"type":14},"2026-07-15T05:22:21.38636",{"slug":2450,"name":2450,"fn":2451,"description":2452,"org":2453,"tags":2454,"stars":21,"repoUrl":22,"updatedAt":2459},"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},[2455,2456],{"name":2421,"slug":434,"type":14},{"name":2457,"slug":2458,"type":14},"Debugging","debugging","2026-07-15T05:22:22.622501",{"slug":2461,"name":2461,"fn":2462,"description":2463,"org":2464,"tags":2465,"stars":21,"repoUrl":22,"updatedAt":2468},"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},[2466,2467],{"name":2421,"slug":434,"type":14},{"name":2423,"slug":2424,"type":14},"2026-07-15T05:22:42.607449",{"slug":2470,"name":2470,"fn":2471,"description":2472,"org":2473,"tags":2474,"stars":21,"repoUrl":22,"updatedAt":2480},"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},[2475,2476,2479],{"name":2421,"slug":434,"type":14},{"name":2477,"slug":2478,"type":14},"Migration","migration",{"name":2423,"slug":2424,"type":14},"2026-07-15T05:22:31.276564",{"slug":2482,"name":2482,"fn":2483,"description":2484,"org":2485,"tags":2486,"stars":21,"repoUrl":22,"updatedAt":2492},"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},[2487,2488,2489],{"name":2421,"slug":434,"type":14},{"name":2457,"slug":2458,"type":14},{"name":2490,"slug":2491,"type":14},"Engineering","engineering","2026-07-15T05:22:30.059335",{"slug":2494,"name":2494,"fn":2495,"description":2496,"org":2497,"tags":2498,"stars":21,"repoUrl":22,"updatedAt":2504},"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},[2499,2502,2503],{"name":2500,"slug":2501,"type":14},"Code Analysis","code-analysis",{"name":2421,"slug":434,"type":14},{"name":2457,"slug":2458,"type":14},"2026-07-15T05:22:23.861119",{"slug":2506,"name":2506,"fn":2507,"description":2508,"org":2509,"tags":2510,"stars":21,"repoUrl":22,"updatedAt":2516},"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},[2511,2512,2515],{"name":2421,"slug":434,"type":14},{"name":2513,"slug":2514,"type":14},"Deployment","deployment",{"name":2490,"slug":2491,"type":14},"2026-07-15T05:22:20.138636",{"slug":2518,"name":2518,"fn":2519,"description":2520,"org":2521,"tags":2522,"stars":21,"repoUrl":22,"updatedAt":2530},"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},[2523,2524,2527],{"name":2421,"slug":434,"type":14},{"name":2525,"slug":2526,"type":14},"Plugin Development","plugin-development",{"name":2528,"slug":2529,"type":14},"QA","qa","2026-07-15T05:22:47.488998",{"slug":2532,"name":2532,"fn":2533,"description":2534,"org":2535,"tags":2536,"stars":21,"repoUrl":22,"updatedAt":2540},"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},[2537,2538,2539],{"name":2421,"slug":434,"type":14},{"name":2525,"slug":2526,"type":14},{"name":2528,"slug":2529,"type":14},"2026-07-21T05:38:34.451024",{"slug":2542,"name":2542,"fn":2543,"description":2544,"org":2545,"tags":2546,"stars":21,"repoUrl":22,"updatedAt":2549},"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},[2547,2548],{"name":2421,"slug":434,"type":14},{"name":2490,"slug":2491,"type":14},"2026-07-15T05:22:17.592351",{"items":2551,"total":644},[2552,2557,2562,2568,2573,2578,2584],{"slug":2415,"name":2415,"fn":2416,"description":2417,"org":2553,"tags":2554,"stars":21,"repoUrl":22,"updatedAt":2425},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2555,2556],{"name":2421,"slug":434,"type":14},{"name":2423,"slug":2424,"type":14},{"slug":2427,"name":2427,"fn":2428,"description":2429,"org":2558,"tags":2559,"stars":21,"repoUrl":22,"updatedAt":2436},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2560,2561],{"name":2433,"slug":2434,"type":14},{"name":2421,"slug":434,"type":14},{"slug":2438,"name":2438,"fn":2439,"description":2440,"org":2563,"tags":2564,"stars":21,"repoUrl":22,"updatedAt":2448},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2565,2566,2567],{"name":2421,"slug":434,"type":14},{"name":2445,"slug":2446,"type":14},{"name":2423,"slug":2424,"type":14},{"slug":2450,"name":2450,"fn":2451,"description":2452,"org":2569,"tags":2570,"stars":21,"repoUrl":22,"updatedAt":2459},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2571,2572],{"name":2421,"slug":434,"type":14},{"name":2457,"slug":2458,"type":14},{"slug":2461,"name":2461,"fn":2462,"description":2463,"org":2574,"tags":2575,"stars":21,"repoUrl":22,"updatedAt":2468},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2576,2577],{"name":2421,"slug":434,"type":14},{"name":2423,"slug":2424,"type":14},{"slug":2470,"name":2470,"fn":2471,"description":2472,"org":2579,"tags":2580,"stars":21,"repoUrl":22,"updatedAt":2480},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2581,2582,2583],{"name":2421,"slug":434,"type":14},{"name":2477,"slug":2478,"type":14},{"name":2423,"slug":2424,"type":14},{"slug":2482,"name":2482,"fn":2483,"description":2484,"org":2585,"tags":2586,"stars":21,"repoUrl":22,"updatedAt":2492},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2587,2588,2589],{"name":2421,"slug":434,"type":14},{"name":2457,"slug":2458,"type":14},{"name":2490,"slug":2491,"type":14}]