[{"data":1,"prerenderedAt":1797},["ShallowReactive",2],{"page-\u002Fdart\u002F01-introduction-and-setup":3},{"id":4,"title":5,"body":6,"description":1790,"extension":1791,"meta":1792,"navigation":108,"path":1793,"seo":1794,"stem":1795,"__hash__":1796},"content\u002Fdart\u002F01-introduction-and-setup.md","Dart — Architecture, Compilation Pipeline & Toolchain",{"type":7,"value":8,"toc":1774},"minimark",[9,13,18,22,273,277,415,532,693,700,940,948,1012,1016,1121,1125,1135,1199,1206,1396,1400,1457,1461,1589,1593,1596,1647,1650,1770],[10,11,5],"h1",{"id":12},"dart-architecture-compilation-pipeline-toolchain",[14,15,17],"h2",{"id":16},"compilation-pipeline-internals","Compilation Pipeline Internals",[19,20,21],"p",{},"Dart has three execution modes. Understanding the boundary between them is critical for debugging performance and behavioral differences across platforms.",[23,24,26],"code-wrapper",{"language":25},"dart",[27,28,32],"pre",{"className":29,"code":30,"language":25,"meta":31,"style":31},"language-dart shiki shiki-themes github-light github-dark","\u002F\u002F ── kernel snapshot (AST serialized, no machine code) ──\n\u002F\u002F Used by VM JIT: fast startup, interpreted or JIT-compiled at runtime.\n\u002F\u002F Pipeline: source → dart:_kernel (front-end) → .dill file\n\u002F\u002F\n\u002F\u002F ── AOT snapshot (precompiled to machine code) ──\n\u002F\u002F Used by Flutter release: no compiler at runtime, fast startup.\n\u002F\u002F Pipeline: source → kernel → TFA (tree-shaking) → machine code snapshot\n\u002F\u002F\n\u002F\u002F ── JIT (development) ──\n\u002F\u002F Source changes hot-reloaded via incremental kernel compilation.\n\u002F\u002F The VM compiles hot functions with an optimizing compiler (OSR).\n\n\u002F\u002F This program behaves differently in JIT vs AOT:\nvoid main() {\n  \u002F\u002F assert() runs in JIT (debug), stripped in AOT (release).\n  \u002F\u002F In release, the entire assertion body is dead-code-eliminated.\n  assert(() {\n    print('This print vanishes in AOT — no side effect in release.');\n    return true;\n  }());\n\n  \u002F\u002F In JIT, `DateTime.now()` in const context is rejected at compile time.\n  \u002F\u002F In AOT, tree-shaking removes unused const symbols entirely.\n  print('Running in ${const String.fromEnvironment('dart.vm.product', defaultValue: false) ? 'AOT' : 'JIT'} mode.');\n}\n","",[33,34,35,44,50,56,62,68,74,80,85,91,97,103,110,116,131,137,143,152,168,181,187,192,198,204,267],"code",{"__ignoreMap":31},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sdCPZ","\u002F\u002F ── kernel snapshot (AST serialized, no machine code) ──\n",[36,45,47],{"class":38,"line":46},2,[36,48,49],{"class":42},"\u002F\u002F Used by VM JIT: fast startup, interpreted or JIT-compiled at runtime.\n",[36,51,53],{"class":38,"line":52},3,[36,54,55],{"class":42},"\u002F\u002F Pipeline: source → dart:_kernel (front-end) → .dill file\n",[36,57,59],{"class":38,"line":58},4,[36,60,61],{"class":42},"\u002F\u002F\n",[36,63,65],{"class":38,"line":64},5,[36,66,67],{"class":42},"\u002F\u002F ── AOT snapshot (precompiled to machine code) ──\n",[36,69,71],{"class":38,"line":70},6,[36,72,73],{"class":42},"\u002F\u002F Used by Flutter release: no compiler at runtime, fast startup.\n",[36,75,77],{"class":38,"line":76},7,[36,78,79],{"class":42},"\u002F\u002F Pipeline: source → kernel → TFA (tree-shaking) → machine code snapshot\n",[36,81,83],{"class":38,"line":82},8,[36,84,61],{"class":42},[36,86,88],{"class":38,"line":87},9,[36,89,90],{"class":42},"\u002F\u002F ── JIT (development) ──\n",[36,92,94],{"class":38,"line":93},10,[36,95,96],{"class":42},"\u002F\u002F Source changes hot-reloaded via incremental kernel compilation.\n",[36,98,100],{"class":38,"line":99},11,[36,101,102],{"class":42},"\u002F\u002F The VM compiles hot functions with an optimizing compiler (OSR).\n",[36,104,106],{"class":38,"line":105},12,[36,107,109],{"emptyLinePlaceholder":108},true,"\n",[36,111,113],{"class":38,"line":112},13,[36,114,115],{"class":42},"\u002F\u002F This program behaves differently in JIT vs AOT:\n",[36,117,119,123,127],{"class":38,"line":118},14,[36,120,122],{"class":121},"svdQ7","void",[36,124,126],{"class":125},"sIsaT"," main",[36,128,130],{"class":129},"ssxIu","() {\n",[36,132,134],{"class":38,"line":133},15,[36,135,136],{"class":42},"  \u002F\u002F assert() runs in JIT (debug), stripped in AOT (release).\n",[36,138,140],{"class":38,"line":139},16,[36,141,142],{"class":42},"  \u002F\u002F In release, the entire assertion body is dead-code-eliminated.\n",[36,144,146,149],{"class":38,"line":145},17,[36,147,148],{"class":121},"  assert",[36,150,151],{"class":129},"(() {\n",[36,153,155,158,161,165],{"class":38,"line":154},18,[36,156,157],{"class":125},"    print",[36,159,160],{"class":129},"(",[36,162,164],{"class":163},"sJ6F3","'This print vanishes in AOT — no side effect in release.'",[36,166,167],{"class":129},");\n",[36,169,171,174,178],{"class":38,"line":170},19,[36,172,173],{"class":121},"    return",[36,175,177],{"class":176},"snvgF"," true",[36,179,180],{"class":129},";\n",[36,182,184],{"class":38,"line":183},20,[36,185,186],{"class":129},"  }());\n",[36,188,190],{"class":38,"line":189},21,[36,191,109],{"emptyLinePlaceholder":108},[36,193,195],{"class":38,"line":194},22,[36,196,197],{"class":42},"  \u002F\u002F In JIT, `DateTime.now()` in const context is rejected at compile time.\n",[36,199,201],{"class":38,"line":200},23,[36,202,203],{"class":42},"  \u002F\u002F In AOT, tree-shaking removes unused const symbols entirely.\n",[36,205,207,210,212,215,218,221,224,227,230,232,235,238,241,244,247,250,253,256,259,262,265],{"class":38,"line":206},24,[36,208,209],{"class":125},"  print",[36,211,160],{"class":129},[36,213,214],{"class":163},"'Running in ",[36,216,217],{"class":163},"${",[36,219,220],{"class":176},"const",[36,222,223],{"class":176}," String",[36,225,226],{"class":163},".",[36,228,229],{"class":125},"fromEnvironment",[36,231,160],{"class":163},[36,233,234],{"class":163},"'dart.vm.product'",[36,236,237],{"class":163},", ",[36,239,240],{"class":176},"defaultValue",[36,242,243],{"class":163},": ",[36,245,246],{"class":176},"false",[36,248,249],{"class":163},") ? ",[36,251,252],{"class":163},"'AOT'",[36,254,255],{"class":163}," : ",[36,257,258],{"class":163},"'JIT'",[36,260,261],{"class":163},"}",[36,263,264],{"class":163}," mode.'",[36,266,167],{"class":129},[36,268,270],{"class":38,"line":269},25,[36,271,272],{"class":129},"}\n",[14,274,276],{"id":275},"sdk-layout-platform-conditionals","SDK Layout & Platform Conditionals",[23,278,279],{"language":25},[27,280,282],{"className":29,"code":281,"language":25,"meta":31,"style":31},"\u002F\u002F Platform detection at compile time (not runtime) — the compiler\n\u002F\u002F resolves these to `true`\u002F`false` and dead-code-eliminates the loser.\nconst bool isWeb = bool.fromEnvironment('dart.library.html');\nconst bool isIO = bool.fromEnvironment('dart.library.io');\nconst bool isVM = !isWeb; \u002F\u002F VM includes io\n\n\u002F\u002F Anti-pattern: runtime checks for platform in hot paths.\n\u002F\u002F ✓ Correct: compile-time conditional imports (zero runtime cost).\n\n\u002F\u002F platform.dart — public API\nexport 'platform_io.dart'   \u002F\u002F native: dart:io available\n    if (dart.library.html) 'platform_web.dart';  \u002F\u002F web: dart:html available\n",[33,283,284,289,294,320,344,364,368,373,378,382,387,398],{"__ignoreMap":31},[36,285,286],{"class":38,"line":39},[36,287,288],{"class":42},"\u002F\u002F Platform detection at compile time (not runtime) — the compiler\n",[36,290,291],{"class":38,"line":46},[36,292,293],{"class":42},"\u002F\u002F resolves these to `true`\u002F`false` and dead-code-eliminates the loser.\n",[36,295,296,298,301,304,307,309,311,313,315,318],{"class":38,"line":52},[36,297,220],{"class":121},[36,299,300],{"class":176}," bool",[36,302,303],{"class":129}," isWeb ",[36,305,306],{"class":121},"=",[36,308,300],{"class":176},[36,310,226],{"class":129},[36,312,229],{"class":125},[36,314,160],{"class":129},[36,316,317],{"class":163},"'dart.library.html'",[36,319,167],{"class":129},[36,321,322,324,326,329,331,333,335,337,339,342],{"class":38,"line":58},[36,323,220],{"class":121},[36,325,300],{"class":176},[36,327,328],{"class":129}," isIO ",[36,330,306],{"class":121},[36,332,300],{"class":176},[36,334,226],{"class":129},[36,336,229],{"class":125},[36,338,160],{"class":129},[36,340,341],{"class":163},"'dart.library.io'",[36,343,167],{"class":129},[36,345,346,348,350,353,355,358,361],{"class":38,"line":64},[36,347,220],{"class":121},[36,349,300],{"class":176},[36,351,352],{"class":129}," isVM ",[36,354,306],{"class":121},[36,356,357],{"class":121}," !",[36,359,360],{"class":129},"isWeb; ",[36,362,363],{"class":42},"\u002F\u002F VM includes io\n",[36,365,366],{"class":38,"line":70},[36,367,109],{"emptyLinePlaceholder":108},[36,369,370],{"class":38,"line":76},[36,371,372],{"class":42},"\u002F\u002F Anti-pattern: runtime checks for platform in hot paths.\n",[36,374,375],{"class":38,"line":82},[36,376,377],{"class":42},"\u002F\u002F ✓ Correct: compile-time conditional imports (zero runtime cost).\n",[36,379,380],{"class":38,"line":87},[36,381,109],{"emptyLinePlaceholder":108},[36,383,384],{"class":38,"line":93},[36,385,386],{"class":42},"\u002F\u002F platform.dart — public API\n",[36,388,389,392,395],{"class":38,"line":99},[36,390,391],{"class":121},"export",[36,393,394],{"class":163}," 'platform_io.dart'",[36,396,397],{"class":42},"   \u002F\u002F native: dart:io available\n",[36,399,400,403,406,409,412],{"class":38,"line":105},[36,401,402],{"class":121},"    if",[36,404,405],{"class":129}," (dart.library.html) ",[36,407,408],{"class":163},"'platform_web.dart'",[36,410,411],{"class":129},";  ",[36,413,414],{"class":42},"\u002F\u002F web: dart:html available\n",[23,416,417],{"language":25},[27,418,420],{"className":29,"code":419,"language":25,"meta":31,"style":31},"\u002F\u002F platform_io.dart — compiled only on native (VM\u002FAOT)\nimport 'dart:io';\n\nString get platformName => Platform.operatingSystem; \u002F\u002F 'macos', 'linux', etc.\nint get cpuCount => Platform.numberOfProcessors;\n\n\u002F\u002F File system access, Process.run, Platform.exit — all available.\nFuture\u003CList\u003Cint>> readBytesNative(String path) => File(path).readAsBytes();\n",[33,421,422,427,437,441,464,481,485,490],{"__ignoreMap":31},[36,423,424],{"class":38,"line":39},[36,425,426],{"class":42},"\u002F\u002F platform_io.dart — compiled only on native (VM\u002FAOT)\n",[36,428,429,432,435],{"class":38,"line":46},[36,430,431],{"class":121},"import",[36,433,434],{"class":163}," 'dart:io'",[36,436,180],{"class":129},[36,438,439],{"class":38,"line":52},[36,440,109],{"emptyLinePlaceholder":108},[36,442,443,446,449,452,455,458,461],{"class":38,"line":58},[36,444,445],{"class":176},"String",[36,447,448],{"class":121}," get",[36,450,451],{"class":129}," platformName ",[36,453,454],{"class":121},"=>",[36,456,457],{"class":176}," Platform",[36,459,460],{"class":129},".operatingSystem; ",[36,462,463],{"class":42},"\u002F\u002F 'macos', 'linux', etc.\n",[36,465,466,469,471,474,476,478],{"class":38,"line":64},[36,467,468],{"class":176},"int",[36,470,448],{"class":121},[36,472,473],{"class":129}," cpuCount ",[36,475,454],{"class":121},[36,477,457],{"class":176},[36,479,480],{"class":129},".numberOfProcessors;\n",[36,482,483],{"class":38,"line":70},[36,484,109],{"emptyLinePlaceholder":108},[36,486,487],{"class":38,"line":76},[36,488,489],{"class":42},"\u002F\u002F File system access, Process.run, Platform.exit — all available.\n",[36,491,492,495,498,501,503,505,508,511,513,515,518,520,523,526,529],{"class":38,"line":82},[36,493,494],{"class":176},"Future",[36,496,497],{"class":129},"\u003C",[36,499,500],{"class":176},"List",[36,502,497],{"class":129},[36,504,468],{"class":176},[36,506,507],{"class":129},">> ",[36,509,510],{"class":125},"readBytesNative",[36,512,160],{"class":129},[36,514,445],{"class":176},[36,516,517],{"class":129}," path) ",[36,519,454],{"class":121},[36,521,522],{"class":176}," File",[36,524,525],{"class":129},"(path).",[36,527,528],{"class":125},"readAsBytes",[36,530,531],{"class":129},"();\n",[23,533,534],{"language":25},[27,535,537],{"className":29,"code":536,"language":25,"meta":31,"style":31},"\u002F\u002F platform_web.dart — compiled only on web (dart2js \u002F DDC \u002F Wasm)\n\u002F\u002F No dart:io. Use dart:html or fetch API.\nimport 'dart:html';\n\nString get platformName => 'web';\nint get cpuCount => 1; \u002F\u002F web is single-threaded; use Web Workers for parallelism\n\n\u002F\u002F No File API — use HttpRequest \u002F fetch for remote resources.\nFuture\u003CList\u003Cint>> readBytesWeb(String url) async {\n  final response = await HttpRequest.request(url, responseType: 'arraybuffer');\n  return (response.response as ByteBuffer).asUint8List();\n}\n",[33,538,539,544,549,558,562,577,596,600,605,635,667,689],{"__ignoreMap":31},[36,540,541],{"class":38,"line":39},[36,542,543],{"class":42},"\u002F\u002F platform_web.dart — compiled only on web (dart2js \u002F DDC \u002F Wasm)\n",[36,545,546],{"class":38,"line":46},[36,547,548],{"class":42},"\u002F\u002F No dart:io. Use dart:html or fetch API.\n",[36,550,551,553,556],{"class":38,"line":52},[36,552,431],{"class":121},[36,554,555],{"class":163}," 'dart:html'",[36,557,180],{"class":129},[36,559,560],{"class":38,"line":58},[36,561,109],{"emptyLinePlaceholder":108},[36,563,564,566,568,570,572,575],{"class":38,"line":64},[36,565,445],{"class":176},[36,567,448],{"class":121},[36,569,451],{"class":129},[36,571,454],{"class":121},[36,573,574],{"class":163}," 'web'",[36,576,180],{"class":129},[36,578,579,581,583,585,587,590,593],{"class":38,"line":70},[36,580,468],{"class":176},[36,582,448],{"class":121},[36,584,473],{"class":129},[36,586,454],{"class":121},[36,588,589],{"class":176}," 1",[36,591,592],{"class":129},"; ",[36,594,595],{"class":42},"\u002F\u002F web is single-threaded; use Web Workers for parallelism\n",[36,597,598],{"class":38,"line":76},[36,599,109],{"emptyLinePlaceholder":108},[36,601,602],{"class":38,"line":82},[36,603,604],{"class":42},"\u002F\u002F No File API — use HttpRequest \u002F fetch for remote resources.\n",[36,606,607,609,611,613,615,617,619,622,624,626,629,632],{"class":38,"line":87},[36,608,494],{"class":176},[36,610,497],{"class":129},[36,612,500],{"class":176},[36,614,497],{"class":129},[36,616,468],{"class":176},[36,618,507],{"class":129},[36,620,621],{"class":125},"readBytesWeb",[36,623,160],{"class":129},[36,625,445],{"class":176},[36,627,628],{"class":129}," url) ",[36,630,631],{"class":121},"async",[36,633,634],{"class":129}," {\n",[36,636,637,640,643,645,648,651,653,656,659,662,665],{"class":38,"line":93},[36,638,639],{"class":121},"  final",[36,641,642],{"class":129}," response ",[36,644,306],{"class":121},[36,646,647],{"class":121}," await",[36,649,650],{"class":176}," HttpRequest",[36,652,226],{"class":129},[36,654,655],{"class":125},"request",[36,657,658],{"class":129},"(url, responseType",[36,660,661],{"class":121},":",[36,663,664],{"class":163}," 'arraybuffer'",[36,666,167],{"class":129},[36,668,669,672,675,678,681,684,687],{"class":38,"line":99},[36,670,671],{"class":121},"  return",[36,673,674],{"class":129}," (response.response ",[36,676,677],{"class":121},"as",[36,679,680],{"class":176}," ByteBuffer",[36,682,683],{"class":129},").",[36,685,686],{"class":125},"asUint8List",[36,688,531],{"class":129},[36,690,691],{"class":38,"line":105},[36,692,272],{"class":129},[14,694,696,699],{"id":695},"pubspecyaml-production-configuration",[33,697,698],{},"pubspec.yaml"," — Production Configuration",[23,701,703],{"language":702},"yaml",[27,704,707],{"className":705,"code":706,"language":702,"meta":31,"style":31},"language-yaml shiki shiki-themes github-light github-dark","# pubspec.yaml — the single source of truth for the package graph.\nname: my_service\ndescription: A production Dart microservice.\nversion: 1.2.0\npublish_to: none  # set to 'none' for private apps; omit to publish to pub.dev\n\nenvironment:\n  sdk: '>=3.4.0 \u003C4.0.0'  # SDK constraint — using Dart 3.4+ features requires this floor\n\ndependencies:\n  # ^x.y.z = >=x.y.z \u003C(x+1).0.0 — allows minor\u002Fpatch, blocks breaking major.\n  http: ^1.2.0\n  shelf: ^1.4.0\n  shelf_router: ^1.1.0\n\n  # Git dependency — for forks or unreleased versions.\n  # my_lib:\n  #   git:\n  #     url: https:\u002F\u002Fgithub.com\u002Forg\u002Fmy_lib.git\n  #     ref: dev-branch  # or a commit SHA or tag\n\n  # Path dependency — for monorepo local packages.\n  shared_models:\n    path: ..\u002Fshared_models\n\ndev_dependencies:\n  test: ^1.25.0\n  mocktail: ^1.0.0\n  lints: ^4.0.0\n  build_runner: ^2.4.0\n",[33,708,709,714,725,735,745,758,762,770,783,787,794,799,809,819,829,833,838,843,848,853,858,862,867,874,884,888,896,907,918,929],{"__ignoreMap":31},[36,710,711],{"class":38,"line":39},[36,712,713],{"class":42},"# pubspec.yaml — the single source of truth for the package graph.\n",[36,715,716,720,722],{"class":38,"line":46},[36,717,719],{"class":718},"sk71V","name",[36,721,243],{"class":129},[36,723,724],{"class":163},"my_service\n",[36,726,727,730,732],{"class":38,"line":52},[36,728,729],{"class":718},"description",[36,731,243],{"class":129},[36,733,734],{"class":163},"A production Dart microservice.\n",[36,736,737,740,742],{"class":38,"line":58},[36,738,739],{"class":718},"version",[36,741,243],{"class":129},[36,743,744],{"class":176},"1.2.0\n",[36,746,747,750,752,755],{"class":38,"line":64},[36,748,749],{"class":718},"publish_to",[36,751,243],{"class":129},[36,753,754],{"class":163},"none",[36,756,757],{"class":42},"  # set to 'none' for private apps; omit to publish to pub.dev\n",[36,759,760],{"class":38,"line":70},[36,761,109],{"emptyLinePlaceholder":108},[36,763,764,767],{"class":38,"line":76},[36,765,766],{"class":718},"environment",[36,768,769],{"class":129},":\n",[36,771,772,775,777,780],{"class":38,"line":82},[36,773,774],{"class":718},"  sdk",[36,776,243],{"class":129},[36,778,779],{"class":163},"'>=3.4.0 \u003C4.0.0'",[36,781,782],{"class":42},"  # SDK constraint — using Dart 3.4+ features requires this floor\n",[36,784,785],{"class":38,"line":87},[36,786,109],{"emptyLinePlaceholder":108},[36,788,789,792],{"class":38,"line":93},[36,790,791],{"class":718},"dependencies",[36,793,769],{"class":129},[36,795,796],{"class":38,"line":99},[36,797,798],{"class":42},"  # ^x.y.z = >=x.y.z \u003C(x+1).0.0 — allows minor\u002Fpatch, blocks breaking major.\n",[36,800,801,804,806],{"class":38,"line":105},[36,802,803],{"class":718},"  http",[36,805,243],{"class":129},[36,807,808],{"class":163},"^1.2.0\n",[36,810,811,814,816],{"class":38,"line":112},[36,812,813],{"class":718},"  shelf",[36,815,243],{"class":129},[36,817,818],{"class":163},"^1.4.0\n",[36,820,821,824,826],{"class":38,"line":118},[36,822,823],{"class":718},"  shelf_router",[36,825,243],{"class":129},[36,827,828],{"class":163},"^1.1.0\n",[36,830,831],{"class":38,"line":133},[36,832,109],{"emptyLinePlaceholder":108},[36,834,835],{"class":38,"line":139},[36,836,837],{"class":42},"  # Git dependency — for forks or unreleased versions.\n",[36,839,840],{"class":38,"line":145},[36,841,842],{"class":42},"  # my_lib:\n",[36,844,845],{"class":38,"line":154},[36,846,847],{"class":42},"  #   git:\n",[36,849,850],{"class":38,"line":170},[36,851,852],{"class":42},"  #     url: https:\u002F\u002Fgithub.com\u002Forg\u002Fmy_lib.git\n",[36,854,855],{"class":38,"line":183},[36,856,857],{"class":42},"  #     ref: dev-branch  # or a commit SHA or tag\n",[36,859,860],{"class":38,"line":189},[36,861,109],{"emptyLinePlaceholder":108},[36,863,864],{"class":38,"line":194},[36,865,866],{"class":42},"  # Path dependency — for monorepo local packages.\n",[36,868,869,872],{"class":38,"line":200},[36,870,871],{"class":718},"  shared_models",[36,873,769],{"class":129},[36,875,876,879,881],{"class":38,"line":206},[36,877,878],{"class":718},"    path",[36,880,243],{"class":129},[36,882,883],{"class":163},"..\u002Fshared_models\n",[36,885,886],{"class":38,"line":269},[36,887,109],{"emptyLinePlaceholder":108},[36,889,891,894],{"class":38,"line":890},26,[36,892,893],{"class":718},"dev_dependencies",[36,895,769],{"class":129},[36,897,899,902,904],{"class":38,"line":898},27,[36,900,901],{"class":718},"  test",[36,903,243],{"class":129},[36,905,906],{"class":163},"^1.25.0\n",[36,908,910,913,915],{"class":38,"line":909},28,[36,911,912],{"class":718},"  mocktail",[36,914,243],{"class":129},[36,916,917],{"class":163},"^1.0.0\n",[36,919,921,924,926],{"class":38,"line":920},29,[36,922,923],{"class":718},"  lints",[36,925,243],{"class":129},[36,927,928],{"class":163},"^4.0.0\n",[36,930,932,935,937],{"class":38,"line":931},30,[36,933,934],{"class":718},"  build_runner",[36,936,243],{"class":129},[36,938,939],{"class":163},"^2.4.0\n",[941,942,944,945],"h3",{"id":943},"version-resolution-pubspeclock","Version Resolution: ",[33,946,947],{},"pubspec.lock",[23,949,951],{"language":950},"bash",[27,952,955],{"className":953,"code":954,"language":950,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","# pubspec.yaml declares constraints; pubspec.lock pins exact versions.\n# Apps: commit pubspec.lock (reproducible builds).\n# Libraries: omit pubspec.lock (let the consumer resolve).\n\ndart pub get       # resolve + download → writes pubspec.lock\ndart pub upgrade   # re-resolve within constraints → updates lock\ndart pub outdated  # show which deps have newer versions available\n",[33,956,957,962,967,972,976,988,1000],{"__ignoreMap":31},[36,958,959],{"class":38,"line":39},[36,960,961],{"class":42},"# pubspec.yaml declares constraints; pubspec.lock pins exact versions.\n",[36,963,964],{"class":38,"line":46},[36,965,966],{"class":42},"# Apps: commit pubspec.lock (reproducible builds).\n",[36,968,969],{"class":38,"line":52},[36,970,971],{"class":42},"# Libraries: omit pubspec.lock (let the consumer resolve).\n",[36,973,974],{"class":38,"line":58},[36,975,109],{"emptyLinePlaceholder":108},[36,977,978,980,983,985],{"class":38,"line":64},[36,979,25],{"class":125},[36,981,982],{"class":163}," pub",[36,984,448],{"class":163},[36,986,987],{"class":42},"       # resolve + download → writes pubspec.lock\n",[36,989,990,992,994,997],{"class":38,"line":70},[36,991,25],{"class":125},[36,993,982],{"class":163},[36,995,996],{"class":163}," upgrade",[36,998,999],{"class":42},"   # re-resolve within constraints → updates lock\n",[36,1001,1002,1004,1006,1009],{"class":38,"line":76},[36,1003,25],{"class":125},[36,1005,982],{"class":163},[36,1007,1008],{"class":163}," outdated",[36,1010,1011],{"class":42},"  # show which deps have newer versions available\n",[14,1013,1015],{"id":1014},"native-executable-compilation-aot","Native Executable Compilation (AOT)",[23,1017,1018],{"language":950},[27,1019,1021],{"className":953,"code":1020,"language":950,"meta":31,"style":31},"# Compile to a standalone native binary — no Dart SDK needed at runtime.\n# Tree-shaken, AOT-compiled, fast cold start. Perfect for Docker \u002F CLI tools.\ndart compile exe bin\u002Fserver.dart -o bin\u002Fserver\n\n# The binary is platform-specific (macOS binary won't run on Linux).\n# Cross-compile via Docker:\n# docker run --rm -v \"$PWD\":\u002Fapp -w \u002Fapp dart:stable dart compile exe bin\u002Fserver.dart -o bin\u002Fserver\n\n# Kernel snapshot (not native — needs VM, but faster than source):\ndart compile kernel bin\u002Fserver.dart -o bin\u002Fserver.dill\n\n# JIT snapshot (precompiled classes, still needs VM):\ndart compile jit-snapshot bin\u002Fserver.dart -o bin\u002Fserver.jit\n",[33,1022,1023,1028,1033,1052,1056,1061,1066,1071,1075,1080,1096,1100,1105],{"__ignoreMap":31},[36,1024,1025],{"class":38,"line":39},[36,1026,1027],{"class":42},"# Compile to a standalone native binary — no Dart SDK needed at runtime.\n",[36,1029,1030],{"class":38,"line":46},[36,1031,1032],{"class":42},"# Tree-shaken, AOT-compiled, fast cold start. Perfect for Docker \u002F CLI tools.\n",[36,1034,1035,1037,1040,1043,1046,1049],{"class":38,"line":52},[36,1036,25],{"class":125},[36,1038,1039],{"class":163}," compile",[36,1041,1042],{"class":163}," exe",[36,1044,1045],{"class":163}," bin\u002Fserver.dart",[36,1047,1048],{"class":176}," -o",[36,1050,1051],{"class":163}," bin\u002Fserver\n",[36,1053,1054],{"class":38,"line":58},[36,1055,109],{"emptyLinePlaceholder":108},[36,1057,1058],{"class":38,"line":64},[36,1059,1060],{"class":42},"# The binary is platform-specific (macOS binary won't run on Linux).\n",[36,1062,1063],{"class":38,"line":70},[36,1064,1065],{"class":42},"# Cross-compile via Docker:\n",[36,1067,1068],{"class":38,"line":76},[36,1069,1070],{"class":42},"# docker run --rm -v \"$PWD\":\u002Fapp -w \u002Fapp dart:stable dart compile exe bin\u002Fserver.dart -o bin\u002Fserver\n",[36,1072,1073],{"class":38,"line":82},[36,1074,109],{"emptyLinePlaceholder":108},[36,1076,1077],{"class":38,"line":87},[36,1078,1079],{"class":42},"# Kernel snapshot (not native — needs VM, but faster than source):\n",[36,1081,1082,1084,1086,1089,1091,1093],{"class":38,"line":93},[36,1083,25],{"class":125},[36,1085,1039],{"class":163},[36,1087,1088],{"class":163}," kernel",[36,1090,1045],{"class":163},[36,1092,1048],{"class":176},[36,1094,1095],{"class":163}," bin\u002Fserver.dill\n",[36,1097,1098],{"class":38,"line":99},[36,1099,109],{"emptyLinePlaceholder":108},[36,1101,1102],{"class":38,"line":105},[36,1103,1104],{"class":42},"# JIT snapshot (precompiled classes, still needs VM):\n",[36,1106,1107,1109,1111,1114,1116,1118],{"class":38,"line":112},[36,1108,25],{"class":125},[36,1110,1039],{"class":163},[36,1112,1113],{"class":163}," jit-snapshot",[36,1115,1045],{"class":163},[36,1117,1048],{"class":176},[36,1119,1120],{"class":163}," bin\u002Fserver.jit\n",[14,1122,1124],{"id":1123},"project-structure-production-layout","Project Structure — Production Layout",[23,1126,1128],{"language":1127},"text",[27,1129,1133],{"className":1130,"code":1132,"language":1127,"meta":31},[1131],"language-text","my_service\u002F\n├── bin\u002F\n│   └── server.dart          # entry point — thin, delegates to lib\u002F\n├── lib\u002F\n│   ├── my_service.dart      # public API barrel (exports only public code)\n│   ├── src\u002F                 # convention-private — users should NOT import\n│   │   ├── server.dart      # server bootstrap\n│   │   ├── handlers.dart    # request handlers\n│   │   ├── middleware.dart   # auth, logging, CORS\n│   │   └── models.dart      # internal models\n│   └── my_service.dart      # re-exports public API\n├── test\u002F\n│   ├── unit\u002F\n│   │   └── handlers_test.dart\n│   └── integration\u002F\n│       └── server_test.dart\n├── analysis_options.yaml    # linter rules + analyzer config\n├── pubspec.yaml\n├── pubspec.lock             # commit for apps\n├── Dockerfile\n└── Makefile\n",[33,1134,1132],{"__ignoreMap":31},[23,1136,1137],{"language":25},[27,1138,1140],{"className":29,"code":1139,"language":25,"meta":31,"style":31},"\u002F\u002F bin\u002Fserver.dart — thin entry point, all logic in lib\u002F\nimport 'package:my_service\u002Fmy_service.dart';\n\nvoid main(List\u003CString> args) async {\n  await runServer(args);  \u002F\u002F delegate to lib\u002Fsrc\u002Fserver.dart\n}\n",[33,1141,1142,1147,1156,1160,1181,1195],{"__ignoreMap":31},[36,1143,1144],{"class":38,"line":39},[36,1145,1146],{"class":42},"\u002F\u002F bin\u002Fserver.dart — thin entry point, all logic in lib\u002F\n",[36,1148,1149,1151,1154],{"class":38,"line":46},[36,1150,431],{"class":121},[36,1152,1153],{"class":163}," 'package:my_service\u002Fmy_service.dart'",[36,1155,180],{"class":129},[36,1157,1158],{"class":38,"line":52},[36,1159,109],{"emptyLinePlaceholder":108},[36,1161,1162,1164,1166,1168,1170,1172,1174,1177,1179],{"class":38,"line":58},[36,1163,122],{"class":121},[36,1165,126],{"class":125},[36,1167,160],{"class":129},[36,1169,500],{"class":176},[36,1171,497],{"class":129},[36,1173,445],{"class":176},[36,1175,1176],{"class":129},"> args) ",[36,1178,631],{"class":121},[36,1180,634],{"class":129},[36,1182,1183,1186,1189,1192],{"class":38,"line":64},[36,1184,1185],{"class":121},"  await",[36,1187,1188],{"class":125}," runServer",[36,1190,1191],{"class":129},"(args);  ",[36,1193,1194],{"class":42},"\u002F\u002F delegate to lib\u002Fsrc\u002Fserver.dart\n",[36,1196,1197],{"class":38,"line":70},[36,1198,272],{"class":129},[14,1200,1202,1205],{"id":1201},"analysis_optionsyaml-enforcing-standards",[33,1203,1204],{},"analysis_options.yaml"," — Enforcing Standards",[23,1207,1208],{"language":702},[27,1209,1211],{"className":705,"code":1210,"language":702,"meta":31,"style":31},"include: package:lints\u002Fstrict.yaml  # strictest rule set\n\nanalyzer:\n  exclude:\n    - 'build\u002F**'\n    - '**\u002F*.g.dart'        # generated files\n    - '**\u002F*.freezed.dart'  # generated files\n  language:\n    strict-casts: true      # no implicit casts (num → int requires explicit `as`)\n    strict-inference: true  # flags `var x;` (no initializer, infers dynamic)\n    strict-raw-types: true  # flags `List` without type args\n\nlinter:\n  rules:\n    - avoid_print: false     # allow print in CLI tools\n    - prefer_const_constructors\n    - prefer_final_locals\n    - prefer_final_in_for_each\n    - require_trailing_commas\n    - unawaited_futures       # flags `future();` without await\u002Funawaited()\n    - cancel_subscriptions    # flags StreamSubscription not cancelled\n",[33,1212,1213,1226,1230,1237,1244,1252,1262,1272,1279,1292,1304,1316,1320,1327,1334,1348,1355,1362,1369,1376,1386],{"__ignoreMap":31},[36,1214,1215,1218,1220,1223],{"class":38,"line":39},[36,1216,1217],{"class":718},"include",[36,1219,243],{"class":129},[36,1221,1222],{"class":163},"package:lints\u002Fstrict.yaml",[36,1224,1225],{"class":42},"  # strictest rule set\n",[36,1227,1228],{"class":38,"line":46},[36,1229,109],{"emptyLinePlaceholder":108},[36,1231,1232,1235],{"class":38,"line":52},[36,1233,1234],{"class":718},"analyzer",[36,1236,769],{"class":129},[36,1238,1239,1242],{"class":38,"line":58},[36,1240,1241],{"class":718},"  exclude",[36,1243,769],{"class":129},[36,1245,1246,1249],{"class":38,"line":64},[36,1247,1248],{"class":129},"    - ",[36,1250,1251],{"class":163},"'build\u002F**'\n",[36,1253,1254,1256,1259],{"class":38,"line":70},[36,1255,1248],{"class":129},[36,1257,1258],{"class":163},"'**\u002F*.g.dart'",[36,1260,1261],{"class":42},"        # generated files\n",[36,1263,1264,1266,1269],{"class":38,"line":76},[36,1265,1248],{"class":129},[36,1267,1268],{"class":163},"'**\u002F*.freezed.dart'",[36,1270,1271],{"class":42},"  # generated files\n",[36,1273,1274,1277],{"class":38,"line":82},[36,1275,1276],{"class":718},"  language",[36,1278,769],{"class":129},[36,1280,1281,1284,1286,1289],{"class":38,"line":87},[36,1282,1283],{"class":718},"    strict-casts",[36,1285,243],{"class":129},[36,1287,1288],{"class":176},"true",[36,1290,1291],{"class":42},"      # no implicit casts (num → int requires explicit `as`)\n",[36,1293,1294,1297,1299,1301],{"class":38,"line":93},[36,1295,1296],{"class":718},"    strict-inference",[36,1298,243],{"class":129},[36,1300,1288],{"class":176},[36,1302,1303],{"class":42},"  # flags `var x;` (no initializer, infers dynamic)\n",[36,1305,1306,1309,1311,1313],{"class":38,"line":99},[36,1307,1308],{"class":718},"    strict-raw-types",[36,1310,243],{"class":129},[36,1312,1288],{"class":176},[36,1314,1315],{"class":42},"  # flags `List` without type args\n",[36,1317,1318],{"class":38,"line":105},[36,1319,109],{"emptyLinePlaceholder":108},[36,1321,1322,1325],{"class":38,"line":112},[36,1323,1324],{"class":718},"linter",[36,1326,769],{"class":129},[36,1328,1329,1332],{"class":38,"line":118},[36,1330,1331],{"class":718},"  rules",[36,1333,769],{"class":129},[36,1335,1336,1338,1341,1343,1345],{"class":38,"line":133},[36,1337,1248],{"class":129},[36,1339,1340],{"class":718},"avoid_print",[36,1342,243],{"class":129},[36,1344,246],{"class":176},[36,1346,1347],{"class":42},"     # allow print in CLI tools\n",[36,1349,1350,1352],{"class":38,"line":139},[36,1351,1248],{"class":129},[36,1353,1354],{"class":163},"prefer_const_constructors\n",[36,1356,1357,1359],{"class":38,"line":145},[36,1358,1248],{"class":129},[36,1360,1361],{"class":163},"prefer_final_locals\n",[36,1363,1364,1366],{"class":38,"line":154},[36,1365,1248],{"class":129},[36,1367,1368],{"class":163},"prefer_final_in_for_each\n",[36,1370,1371,1373],{"class":38,"line":170},[36,1372,1248],{"class":129},[36,1374,1375],{"class":163},"require_trailing_commas\n",[36,1377,1378,1380,1383],{"class":38,"line":183},[36,1379,1248],{"class":129},[36,1381,1382],{"class":163},"unawaited_futures",[36,1384,1385],{"class":42},"       # flags `future();` without await\u002Funawaited()\n",[36,1387,1388,1390,1393],{"class":38,"line":189},[36,1389,1248],{"class":129},[36,1391,1392],{"class":163},"cancel_subscriptions",[36,1394,1395],{"class":42},"    # flags StreamSubscription not cancelled\n",[14,1397,1399],{"id":1398},"tips-tricks","💡 Tips & Tricks",[1401,1402,1403,1414,1427,1436,1448],"ul",{},[1404,1405,1406,243,1410,1413],"li",{},[1407,1408,1409],"strong",{},"Performance",[33,1411,1412],{},"dart compile exe"," produces a tree-shaken AOT binary — no compiler at runtime, ~50ms cold start. Use for Docker, CLI tools, and serverless. The binary includes the Dart runtime but not the compiler.",[1404,1415,1416,243,1419,1422,1423,1426],{},[1407,1417,1418],{},"Debug",[33,1420,1421],{},"dart run --observe bin\u002Fserver.dart"," starts the VM service (debugger protocol, CPU profiling). Connect VS Code or DevTools. ",[33,1424,1425],{},"--observe=8181"," pins the port.",[1404,1428,1429,243,1432,1435],{},[1407,1430,1431],{},"Idiom",[33,1433,1434],{},"const String.fromEnvironment('dart.vm.product')"," is a compile-time constant — the compiler resolves it and dead-code-eliminates the unused branch. Use it (not runtime checks) for platform\u002Fmode conditionals.",[1404,1437,1438,243,1440,1443,1444,1447],{},[1407,1439,1431],{},[33,1441,1442],{},"publish_to: none"," in pubspec.yaml for private apps — prevents accidental ",[33,1445,1446],{},"dart pub publish"," to pub.dev. Remove only when publishing a library.",[1404,1449,1450,243,1453,1456],{},[1407,1451,1452],{},"Tooling",[33,1454,1455],{},"dart pub deps --style=compact"," shows the dependency tree without long paths. Useful for auditing transitive dependencies.",[14,1458,1460],{"id":1459},"️-edge-cases-gotchas","⚠️ Edge Cases & Gotchas",[1401,1462,1463,1475,1493,1508,1525,1546,1557,1576],{},[1404,1464,1465,1471,1472,226],{},[1407,1466,1467,1470],{},[33,1468,1469],{},"assert"," is stripped in AOT",": the entire assertion expression (including side effects) vanishes in release builds. Never put business logic or side effects inside ",[33,1473,1474],{},"assert(() { ... }())",[1404,1476,1477,1482,1483,1485,1486,1488,1489,1492],{},[1407,1478,1479,1481],{},[33,1480,468],{}," on web is a JS double",": on native, ",[33,1484,468],{}," is 64-bit. On web (dart2js\u002FDDC), ",[33,1487,468],{}," is a JS number (IEEE 754 double) — values above 2^53 lose precision. Use ",[33,1490,1491],{},"BigInt"," for arbitrary-precision integers on web.",[1404,1494,1495,1501,1502,1504,1505,683],{},[1407,1496,1497,1500],{},[33,1498,1499],{},"dart:io"," is native-only",": importing ",[33,1503,1499],{}," in a web project fails at compile time. Use conditional imports (",[33,1506,1507],{},"if (dart.library.html)",[1404,1509,1510,1517,1518,237,1521,1524],{},[1407,1511,1512,1513,1516],{},"No ",[33,1514,1515],{},"dart:mirrors"," on web \u002F AOT",": runtime reflection is unsupported in dart2js and AOT. Use code generation (",[33,1519,1520],{},"json_serializable",[33,1522,1523],{},"freezed",") instead.",[1404,1526,1527,243,1536,1538,1539,1542,1543,1545],{},[1407,1528,1529,1532,1533],{},[33,1530,1531],{},"dart run"," vs ",[33,1534,1535],{},"dart file.dart",[33,1537,1531],{}," resolves the package and runs ",[33,1540,1541],{},"bin\u002F\u003Cpackage_name>.dart",". ",[33,1544,1535],{}," compiles the file standalone (no package resolution for relative imports).",[1404,1547,1548,1553,1554,1556],{},[1407,1549,1550,1552],{},[33,1551,947],{}," for libraries",": if you commit ",[33,1555,947],{}," for a library, it can conflict with the consumer's resolution. Omit it for published libraries; commit it for apps.",[1404,1558,1559,1565,1566,1569,1570,1572,1573,683],{},[1407,1560,1561,1562],{},"Hot reload doesn't re-run ",[33,1563,1564],{},"initState",": in Flutter, hot reload preserves state (including ",[33,1567,1568],{},"State"," objects). Changes to ",[33,1571,1564],{}," logic require a hot restart (",[33,1574,1575],{},"R",[1404,1577,1578,243,1581,1584,1585,1588],{},[1407,1579,1580],{},"SDK constraint floor",[33,1582,1583],{},"sdk: '>=3.4.0 \u003C4.0.0'"," — using a Dart 3.4 feature (e.g., pattern guards) in a project with ",[33,1586,1587],{},"sdk: '>=3.0.0'"," fails at analysis. Bump the floor to match feature usage.",[14,1590,1592],{"id":1591},"spot-the-bug","🧠 Spot the Bug",[19,1594,1595],{},"A developer ships a server with an assert guarding a critical side effect. In production, the side effect never runs:",[23,1597,1598],{"language":25},[27,1599,1601],{"className":29,"code":1600,"language":25,"meta":31,"style":31},"void processOrder(Order order) {\n  assert(_sendNotification(order), 'Notification failed');\n  _commitOrder(order);\n}\n",[33,1602,1603,1618,1635,1643],{"__ignoreMap":31},[36,1604,1605,1607,1610,1612,1615],{"class":38,"line":39},[36,1606,122],{"class":121},[36,1608,1609],{"class":125}," processOrder",[36,1611,160],{"class":129},[36,1613,1614],{"class":176},"Order",[36,1616,1617],{"class":129}," order) {\n",[36,1619,1620,1622,1624,1627,1630,1633],{"class":38,"line":46},[36,1621,148],{"class":121},[36,1623,160],{"class":129},[36,1625,1626],{"class":125},"_sendNotification",[36,1628,1629],{"class":129},"(order), ",[36,1631,1632],{"class":163},"'Notification failed'",[36,1634,167],{"class":129},[36,1636,1637,1640],{"class":38,"line":52},[36,1638,1639],{"class":125},"  _commitOrder",[36,1641,1642],{"class":129},"(order);\n",[36,1644,1645],{"class":38,"line":58},[36,1646,272],{"class":129},[19,1648,1649],{},"What happens in the AOT release build?",[1651,1652,1653,1657,1671,1676,1754],"details",{},[1654,1655,1656],"summary",{},"Answer",[19,1658,1659,1660,1662,1663,1666,1667,1670],{},"In AOT (release), ",[33,1661,1469],{}," is completely stripped — the expression ",[33,1664,1665],{},"_sendNotification(order)"," is never evaluated. The notification is silently skipped. Only ",[33,1668,1669],{},"_commitOrder"," runs.",[19,1672,1673,1674,661],{},"The fix — use an explicit check, not ",[33,1675,1469],{},[27,1677,1679],{"className":29,"code":1678,"language":25,"meta":31,"style":31},"void processOrder(Order order) {\n  if (!_sendNotification(order)) {\n    throw StateError('Notification failed for order ${order.id}');\n  }\n  _commitOrder(order);\n}\n",[33,1680,1681,1693,1709,1739,1744,1750],{"__ignoreMap":31},[36,1682,1683,1685,1687,1689,1691],{"class":38,"line":39},[36,1684,122],{"class":121},[36,1686,1609],{"class":125},[36,1688,160],{"class":129},[36,1690,1614],{"class":176},[36,1692,1617],{"class":129},[36,1694,1695,1698,1701,1704,1706],{"class":38,"line":46},[36,1696,1697],{"class":121},"  if",[36,1699,1700],{"class":129}," (",[36,1702,1703],{"class":121},"!",[36,1705,1626],{"class":125},[36,1707,1708],{"class":129},"(order)) {\n",[36,1710,1711,1714,1717,1719,1722,1724,1727,1729,1732,1734,1737],{"class":38,"line":52},[36,1712,1713],{"class":121},"    throw",[36,1715,1716],{"class":176}," StateError",[36,1718,160],{"class":129},[36,1720,1721],{"class":163},"'Notification failed for order ",[36,1723,217],{"class":163},[36,1725,1726],{"class":176},"order",[36,1728,226],{"class":163},[36,1730,1731],{"class":176},"id",[36,1733,261],{"class":163},[36,1735,1736],{"class":163},"'",[36,1738,167],{"class":129},[36,1740,1741],{"class":38,"line":58},[36,1742,1743],{"class":129},"  }\n",[36,1745,1746,1748],{"class":38,"line":64},[36,1747,1639],{"class":125},[36,1749,1642],{"class":129},[36,1751,1752],{"class":38,"line":70},[36,1753,272],{"class":129},[19,1755,1756,1758,1759,1762,1763,1766,1767,1769],{},[33,1757,1469],{}," is for development-time invariants (conditions that should never fail if the code is correct). Runtime validation (especially side effects) must use ",[33,1760,1761],{},"if","\u002F",[33,1764,1765],{},"throw",". The ",[33,1768,1469],{}," body is dead code in release.",[1771,1772,1773],"style",{},"html pre.shiki code .sdCPZ, html code.shiki .sdCPZ{--shiki-default:#6A737D;--shiki-github-dark:#6A737D}html pre.shiki code .svdQ7, html code.shiki .svdQ7{--shiki-default:#D73A49;--shiki-github-dark:#F97583}html pre.shiki code .sIsaT, html code.shiki .sIsaT{--shiki-default:#6F42C1;--shiki-github-dark:#B392F0}html pre.shiki code .ssxIu, html code.shiki .ssxIu{--shiki-default:#24292E;--shiki-github-dark:#E1E4E8}html pre.shiki code .sJ6F3, html code.shiki .sJ6F3{--shiki-default:#032F62;--shiki-github-dark:#9ECBFF}html pre.shiki code .snvgF, html code.shiki .snvgF{--shiki-default:#005CC5;--shiki-github-dark:#79B8FF}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 .github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html.github-dark .shiki span {color: var(--shiki-github-dark);background: var(--shiki-github-dark-bg);font-style: var(--shiki-github-dark-font-style);font-weight: var(--shiki-github-dark-font-weight);text-decoration: var(--shiki-github-dark-text-decoration);}html pre.shiki code .sk71V, html code.shiki .sk71V{--shiki-default:#22863A;--shiki-github-dark:#85E89D}",{"title":31,"searchDepth":46,"depth":46,"links":1775},[1776,1777,1778,1783,1784,1785,1787,1788,1789],{"id":16,"depth":46,"text":17},{"id":275,"depth":46,"text":276},{"id":695,"depth":46,"text":1779,"children":1780},"pubspec.yaml — Production Configuration",[1781],{"id":943,"depth":52,"text":1782},"Version Resolution: pubspec.lock",{"id":1014,"depth":46,"text":1015},{"id":1123,"depth":46,"text":1124},{"id":1201,"depth":46,"text":1786},"analysis_options.yaml — Enforcing Standards",{"id":1398,"depth":46,"text":1399},{"id":1459,"depth":46,"text":1460},{"id":1591,"depth":46,"text":1592},"Deep-dive into Dart's compilation strategies (AOT\u002FJIT\u002Fkernel), VM internals, pub workspace configuration, and production toolchain setup. Code-first engineering reference.","md",{},"\u002Fdart\u002F01-introduction-and-setup",{"title":5,"description":1790},"dart\u002F01-introduction-and-setup","TCSkpDso9Y05S7WsfHZGdK62wnUtIcag5I_e-NB4LtM",1789924647634]