<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8"/>
    <title>Glossary</title>
    <meta property="og:title" content="Glossary"/>
    <meta name="description" content="A glossary reference for terminology used across dart.dev."/>
    <meta property="og:description" content="A glossary reference for terminology used across dart.dev."/>
    <link sizes="64x64" href="/assets/img/logo/dart-64.png" rel="icon"/>
    <link href="/assets/img/touch-icon-iphone.png" rel="apple-touch-icon"/>
    <link sizes="152x152" href="/assets/img/touch-icon-ipad.png" rel="apple-touch-icon"/>
    <link sizes="180x180" href="/assets/img/touch-icon-iphone-retina.png" rel="apple-touch-icon"/>
    <link sizes="167x167" href="/assets/img/touch-icon-ipad-retina.png" rel="apple-touch-icon"/>
    <meta name="twitter:card" content="summary"/>
    <meta name="twitter:site" content="@dart_lang"/>
    <meta name="twitter:title" content="Glossary"/>
    <meta name="twitter:description" content="A glossary reference for terminology used across dart.dev."/>
    <meta property="og:title" content="Glossary"/>
    <meta property="og:description" content="A glossary reference for terminology used across dart.dev."/>
    <meta property="og:url" content="resources/glossary.md"/>
    <meta property="og:image" content="/assets/img/logo/dart-logo-for-shares.png"/>
    <link href="https://fonts.googleapis.com" rel="preconnect"/>
    <link crossorigin href="https://fonts.gstatic.com" rel="preconnect"/>
    <link href="https://fonts.googleapis.com/css2?family=Google+Sans:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
    <link href="https://fonts.googleapis.com/css2?family=Google+Sans+Mono:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
    <link href="https://fonts.googleapis.com/css2?family=Google+Sans+Text:wght@400;500;700&amp;display=swap" rel="stylesheet"/>
    <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0..1,0" rel="stylesheet"/>
    <link href="/assets/css/main.css?hash=3sprM3q7d6B+" rel="stylesheet"/>
    <script type="module" integrity="sha256-Jy0j0fUMJ2T3WxSEs2WjHLrS+3DlO7S9DItQtP55FII=" crossorigin="anonymous" referrerpolicy="no-referrer" src="https://cdn.jsdelivr.net/npm/@justinribeiro/lite-youtube@1.8.2/lite-youtube.js"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
    </script>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-5VSZM5J');</script>
    
    <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
    
    ga('create', 'UA-26406144-4', 'auto');
    ga('send', 'pageview');
    </script>
    
    <!--$-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <!--/-->
    <script src="/main.clients.dart.js" defer></script>
  </head>
  <body class="glossary-page" data-toc="false">
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5VSZM5J" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    
    <a id="skip-to-main" class="filled-button" tabindex="1" href="#site-content-title">Skip to main content</a>
    <!--@src/components/common/client/cookie_notice-->
    <section id="cookie-notice" data-nosnippet="true">
      <div class="container">
        <p>
          dart.dev uses cookies from Google to deliver and enhance the quality of its services and to analyze traffic.
        </p>
        <div class="button-group">
          <a class="text-button" target="_blank" rel="noopener" href="https://policies.google.com/technologies/cookies">Learn more</a>
          <button class="filled-button">OK, got it</button>
        </div>
      </div>
    </section>
    <!--/@src/components/common/client/cookie_notice-->
    <header id="site-header" class="always-dark-mode">
      <nav class="navbar">
        <a id="site-primary-logo" class="site-wordmark" aria-label="Go to the Dart homepage" title="Go to the Dart homepage" href="/">
          <img width="192" alt="Dart logo" src="/assets/img/logo/dart-192.svg"/>
          <span class="name" translate="no">Dart</span>
        </a>
        <ul class="nav-items">
          <li><a class="nav-link" href="/overview">Overview</a></li>
          <li><a class="nav-link active" href="/docs"><span>Docs</span></a></li>
          <li><a class="nav-link" href="https://blog.dart.dev">Blog</a></li>
          <li><a class="nav-link" href="/community">Community</a></li>
          <li><a class="nav-link" href="/#try-dart">Try Dart</a></li>
          <li><a class="nav-link" href="/get-dart">Get Dart</a></li>
        </ul>
        <div class="navbar-contents">
          <form id="header-search" action="/search/">
            <input id="q" class="search-field" autocomplete="off" placeholder="Search" aria-label="Search" type="search" name="q"/>
          </form>
          <a id="fallback-search-button" class="icon-button" aria-label="Navigate to the dart.dev search page." title="Navigate to the dart.dev search page." href="/search"><span class="material-symbols" aria-hidden="true" translate="no">search</span></a>
          <!--@src/components/layout/theme_switcher-->
          <div id="theme-switcher" class="dropdown" data-expanded="false">
            <button class="dropdown-button text-button icon-button" aria-controls="theme-switcher-content" aria-expanded="false" title="Select a theme."><span class="material-symbols" aria-hidden="true" translate="no">routine</span></button>
            <div id="theme-switcher-content" class="dropdown-content">
              <div class="dropdown-menu">
                <ul role="listbox">
                  <li>
                    <button title="Switch to the light theme." aria-label="Switch to the light theme." aria-selected="true"><span class="material-symbols" aria-hidden="true" translate="no">light_mode</span><span>Light</span></button>
                  </li>
                  <li>
                    <button title="Switch to the dark theme." aria-label="Switch to the dark theme." aria-selected="false"><span class="material-symbols" aria-hidden="true" translate="no">dark_mode</span><span>Dark</span></button>
                  </li>
                  <li>
                    <button title="Match theme to device theme." aria-label="Match theme to device theme." aria-selected="false"><span class="material-symbols" aria-hidden="true" translate="no">night_sight_auto</span><span>Automatic</span></button>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <!--/@src/components/layout/theme_switcher-->
          <!--@src/components/layout/site_switcher-->
          <div id="site-switcher" class="dropdown" data-expanded="false">
            <button class="dropdown-button text-button icon-button" aria-controls="site-switcher-content" aria-expanded="false" title="Visit related sites."><span class="material-symbols" aria-hidden="true" translate="no">apps</span></button>
            <div id="site-switcher-content" class="dropdown-content">
              <nav class="dropdown-menu" role="menu">
                <ul>
                  <li role="presentation">
                    <a class="site-wordmark current-site" role="menuitem" title="Navigate to the Dart website." aria-label="Navigate to the Dart website." href="/"><img alt="Dart logo" width="28" height="28" src="/assets/img/logo/dart-192.svg"/><span class="name" translate="no">Dart</span></a>
                  </li>
                  <li role="presentation">
                    <a class="site-wordmark" role="menuitem" title="Navigate to the Dart API website." aria-label="Navigate to the Dart API website." href="https://api.dart.dev"><img alt="Dart logo" width="28" height="28" src="/assets/img/logo/dart-192.svg"/><span class="name" translate="no">Dart</span><span class="subtype">API</span></a>
                  </li>
                  <li role="presentation">
                    <a class="site-wordmark" role="menuitem" title="Navigate to the Dart Blog website." aria-label="Navigate to the Dart Blog website." href="https://blog.dart.dev"><img alt="Dart logo" width="28" height="28" src="/assets/img/logo/dart-192.svg"/><span class="name" translate="no">Dart</span><span class="subtype">Blog</span></a>
                  </li>
                  <li class="dropdown-divider" aria-hidden="true" role="separator"></li>
                  <li role="presentation">
                    <a class="site-wordmark" role="menuitem" title="Navigate to the DartPad website." aria-label="Navigate to the DartPad website." href="https://dartpad.dev"><img alt="Dart logo" width="28" height="28" src="/assets/img/logo/dart-192.svg"/><span class="name" translate="no">DartPad</span></a>
                  </li>
                  <li role="presentation">
                    <a class="site-wordmark" role="menuitem" title="Navigate to the pub.dev website." aria-label="Navigate to the pub.dev website." href="https://pub.dev"><img alt="Dart logo" width="28" height="28" src="/assets/img/logo/dart-192.svg"/><span class="name" translate="no">pub.dev</span></a>
                  </li>
                </ul>
              </nav>
            </div>
          </div>
          <!--/@src/components/layout/site_switcher-->
          <!--@src/components/layout/menu_toggle-->
          <button id="menu-toggle" class="icon-button" aria-controls="sidenav" aria-label="Toggle navigation menu." title="Toggle navigation menu." type="button">
            <span class="material-symbols" aria-hidden="true" translate="no">menu</span>
            <span class="material-symbols" aria-hidden="true" translate="no">close</span>
          </button>
          <!--/@src/components/layout/menu_toggle-->
        </div>
      </nav>
    </header>
    <div id="site-below-header">
      <div id="site-main-row">
        <div id="sidenav">
          <form class="site-header-search form-inline" action="/search/">
            <input id="search-side" class="site-header-searchfield search-field" autocomplete="off" placeholder="Search" aria-label="Search" type="search" name="q"/>
          </form>
          <ul class="navbar-nav">
            <li aria-hidden="true"><div class="sidenav-divider"></div></li>
            <li class="nav-item">
              <a class="nav-button" href="/overview"><span class="material-symbols" aria-hidden="true" translate="no">asterisk</span>Overview</a>
            </li>
            <li class="nav-item">
              <a class="nav-button active" href="/docs"><span class="material-symbols" aria-hidden="true" translate="no">docs</span>Docs</a>
            </li>
            <li class="nav-item">
              <a class="nav-button" href="https://blog.dart.dev"><span class="material-symbols" aria-hidden="true" translate="no">newsmode</span>Blog</a>
            </li>
            <li class="nav-item">
              <a class="nav-button" href="/community"><span class="material-symbols" aria-hidden="true" translate="no">public</span>Community</a>
            </li>
            <li class="nav-item">
              <a class="nav-button" href="https://dart.dev"><span class="material-symbols" aria-hidden="true" translate="no">code_blocks</span>Try Dart</a>
            </li>
            <li class="nav-item">
              <a class="nav-button" href="/get-dart"><span class="material-symbols" aria-hidden="true" translate="no">download</span>Get Dart</a>
            </li>
            <li aria-hidden="true"><div class="sidenav-divider"></div></li>
          </ul>
          <ul class="nav">
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1" role="button" aria-expanded="false" aria-controls="docs-1"><span>Language</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language"><div><span>Introduction</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/variables"><div><span>Variables</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/operators"><div><span>Operators</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/comments"><div><span>Comments</span></div></a></li><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-6" role="button" aria-expanded="false" aria-controls="docs-1-6"><span>Types</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-6" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language/built-in-types"><div><span>Built-in types</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/records"><div><span>Records</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/collections"><div><span>Collections</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/generics"><div><span>Generics</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/typedefs"><div><span>Typedefs</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/type-system"><div><span>Type system</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-7" role="button" aria-expanded="false" aria-controls="docs-1-7"><span>Patterns</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-7" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language/patterns"><div><span>Overview &amp; usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/pattern-types"><div><span>Pattern types</span></div></a></li><li class="nav-item"><a class="nav-link" rel="noopener" href="https://codelabs.developers.google.com/codelabs/dart-patterns-records" target="_blank"><div><span>Applied tutorial</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-8" role="button" aria-expanded="false" aria-controls="docs-1-8"><span>Control flow</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-8" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language/loops"><div><span>Loops</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/branches"><div><span>Branches</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/error-handling"><div><span>Error handling</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/language/functions"><div><span>Functions</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/metadata"><div><span>Metadata</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/libraries"><div><span>Libraries &amp; imports</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-12" role="button" aria-expanded="false" aria-controls="docs-1-12"><span>Classes &amp; objects</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-12" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language/classes"><div><span>Classes</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/constructors"><div><span>Constructors</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/methods"><div><span>Methods</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/extend"><div><span>Extend a class</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/mixins"><div><span>Mixins</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/enums"><div><span>Enums</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/dot-shorthands"><div><span>Dot shorthands</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/extension-methods"><div><span>Extension methods</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/extension-types"><div><span>Extension types</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/callable-objects"><div><span>Callable objects</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-13" role="button" aria-expanded="false" aria-controls="docs-1-13"><span>Class modifiers</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-13" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language/class-modifiers"><div><span>Overview &amp; usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/class-modifiers-for-apis"><div><span>Class modifiers for API maintainers</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/modifier-reference"><div><span>Reference</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-14" role="button" aria-expanded="false" aria-controls="docs-1-14"><span>Concurrency</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-14" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/language/concurrency"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/async"><div><span>Asynchronous programming</span></div></a></li><li class="nav-item"><a class="nav-link" href="/language/isolates"><div><span>Isolates</span></div></a></li></ul></li><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-1-16" role="button" aria-expanded="false" aria-controls="docs-1-16"><span>Null safety</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-1-16" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/null-safety"><div><span>Sound null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/migration-guide"><div><span>Migrating to null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/understanding-null-safety"><div><span>Understanding null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/unsound-null-safety"><div><span>Unsound null safety</span></div></a></li><li class="nav-item"><a class="nav-link" href="/null-safety/faq"><div><span>FAQ</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/language/keywords"><div><span>Keywords</span></div></a></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-2" role="button" aria-expanded="false" aria-controls="docs-2"><span>Core libraries</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-2" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/libraries"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-core"><div><span>dart:core</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-async"><div><span>dart:async</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-math"><div><span>dart:math</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-convert"><div><span>dart:convert</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/dart-io"><div><span>dart:io</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop"><div><span>dart:js_interop</span></div></a></li><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><a class="nav-link" href="/libraries/collections/iterables"><div><span>Iterable collections</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-2-10" role="button" aria-expanded="false" aria-controls="docs-2-10"><span>Asynchronous programming</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-2-10" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/libraries/async/async-await"><div><span>Tutorial</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/async/futures-error-handling"><div><span>Futures and error handling</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/async/using-streams"><div><span>Using streams</span></div></a></li><li class="nav-item"><a class="nav-link" href="/libraries/async/creating-streams"><div><span>Creating streams</span></div></a></li></ul></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-3" role="button" aria-expanded="false" aria-controls="docs-3"><span>Effective Dart</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-3" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/effective-dart"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/style"><div><span>Style</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/documentation"><div><span>Documentation</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/usage"><div><span>Usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/effective-dart/design"><div><span>Design</span></div></a></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-4" role="button" aria-expanded="false" aria-controls="docs-4"><span>Packages</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-4" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools/pub/packages"><div><span>How to use packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/useful-packages"><div><span>Commonly used packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/create-packages"><div><span>Creating packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/publishing"><div><span>Publishing packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/writing-package-pages"><div><span>Writing package pages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/workspaces"><div><span>Workspaces (monorepo support)</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/hooks"><div><span>Hooks</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-4-8" role="button" aria-expanded="false" aria-controls="docs-4-8"><span>Package reference</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-4-8" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools/pub/dependencies"><div><span>Dependencies</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/package-layout"><div><span>Package layout conventions</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/environment-variables"><div><span>Pub environment variables</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/pubspec"><div><span>Pubspec file</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/troubleshoot"><div><span>Troubleshooting pub</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/verified-publishers"><div><span>Verified publishers</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/security-advisories"><div><span>Security advisories</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/versioning"><div><span>Versioning</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/custom-package-repositories"><div><span>Custom package repositories</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/tools/pub/private-files"><div><span>What not to commit</span></div></a></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-5" role="button" aria-expanded="false" aria-controls="docs-5"><span>Development</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-5" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/libraries/serialization/json"><div><span>JSON serialization</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/language/number-representation"><div><span>Number representation</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/google-apis"><div><span>Google APIs</span></div></a></li><li class="nav-item"><a class="nav-link" href="/multiplatform-apps"><div><span>Multi-platform apps</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-5-5" role="button" aria-expanded="false" aria-controls="docs-5-5"><span>Command-line &amp; server apps</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-5-5" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/server"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/get-started"><div><span>Get started</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/cmdline"><div><span>Write command-line apps</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/fetch-data"><div><span>Fetch data from the internet</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials/server/httpserver"><div><span>Write HTTP servers</span></div></a></li><li class="nav-item"><a class="nav-link" href="/server/libraries"><div><span>Libraries &amp; packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/server/google-cloud"><div><span>Google Cloud</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-5-6" role="button" aria-expanded="false" aria-controls="docs-5-6"><span>Web apps</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-5-6" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/web"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/get-started"><div><span>Get started</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/deployment"><div><span>Deployment</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/libraries"><div><span>Libraries &amp; packages</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/wasm"><div><span>Wasm compilation</span></div></a></li></ul></li><li class="nav-item"><a class="nav-link" href="/libraries/core/environment-declarations"><div><span>Environment declarations</span></div></a></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-6" role="button" aria-expanded="false" aria-controls="docs-6"><span>Interoperability</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-6" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/interop/c-interop"><div><span>C interop</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/objective-c-interop"><div><span>Objective-C &amp; Swift interop</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/java-interop"><div><span>Java &amp; Kotlin interop</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-6-4" role="button" aria-expanded="false" aria-controls="docs-6-4"><span>JavaScript interop</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-6-4" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/interop/js-interop"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/usage"><div><span>Usage</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/js-types"><div><span>JS types</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/tutorials"><div><span>Tutorials</span></div></a></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/past-js-interop"><div><span>Past JS interop</span></div></a></li><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><a class="nav-link" href="/interop/js-interop/package-web"><div><span>Web interop</span></div></a></li></ul></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7" role="button" aria-expanded="false" aria-controls="docs-7"><span>Tools &amp; techniques</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools"><div><span>Overview</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7-2" role="button" aria-expanded="false" aria-controls="docs-7-2"><span>AI</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-2" class="nav collapse"><li class="nav-item"><a class="nav-link" rel="noopener" href="https://docs.flutter.dev/ai/mcp-server" target="_blank"><div><span>Dart and Flutter MCP Server</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7-3" role="button" aria-expanded="false" aria-controls="docs-7-3"><span>Editors &amp; debuggers</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-3" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools/jetbrains-plugin"><div><span>IntelliJ &amp; Android Studio</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/vs-code"><div><span>VS Code</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-devtools"><div><span>Dart DevTools</span></div></a></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7-3-4" role="button" aria-expanded="false" aria-controls="docs-7-3-4"><span>DartPad</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-3-4" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools/dartpad"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dartpad/troubleshoot"><div><span>Troubleshooting DartPad</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7-4" role="button" aria-expanded="false" aria-controls="docs-7-4"><span>Command-line tools</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-4" class="nav collapse"><li class="nav-item"><button class="nav-link collapsible" data-toggle="collapse" data-target="#docs-7-4-1" role="button" aria-expanded="true" aria-controls="docs-7-4-1"><span>Dart SDK</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-4-1" class="nav collapse show"><li class="nav-item"><a class="nav-link" href="/tools/sdk"><div><span>Overview</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-tool"><div><span>dart</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-analyze"><div><span>dart analyze</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-build"><div><span>dart build</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-compile"><div><span>dart compile</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-create"><div><span>dart create</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-doc"><div><span>dart doc</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-fix"><div><span>dart fix</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-format"><div><span>dart format</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-info"><div><span>dart info</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-install"><div><span>dart install</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/pub/cmd"><div><span>dart pub</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-run"><div><span>dart run</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dart-test"><div><span>dart test</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/dartaotruntime"><div><span>dartaotruntime</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/experiment-flags"><div><span>Experiment flags</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible" data-toggle="collapse" data-target="#docs-7-4-2" role="button" aria-expanded="true" aria-controls="docs-7-4-2"><span>Other command-line tools</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-4-2" class="nav collapse show"><li class="nav-item"><a class="nav-link" href="/tools/build_runner"><div><span>build_runner</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/webdev"><div><span>webdev</span></div></a></li></ul></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7-5" role="button" aria-expanded="false" aria-controls="docs-7-5"><span>Static analysis</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-5" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools/analysis"><div><span>Customizing static analysis</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/non-promotion-reasons"><div><span>Fixing type promotion failures</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/linter-rules"><div><span>Linter rules</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tools/diagnostics"><div><span>Diagnostic messages</span></div></a></li></ul></li><li class="nav-item"><button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-7-6" role="button" aria-expanded="false" aria-controls="docs-7-6"><span>Testing &amp; optimization</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-7-6" class="nav collapse"><li class="nav-item"><a class="nav-link" href="/tools/testing"><div><span>Testing</span></div></a></li><li class="nav-item"><a class="nav-link" href="/web/debugging"><div><span>Debugging web apps</span></div></a></li></ul></li></ul>
            </li>
            <li aria-hidden="true"><div class="sidenav-divider"></div></li>
            <li class="nav-item">
              <button class="nav-link collapsible collapsed" data-toggle="collapse" data-target="#docs-9" role="button" aria-expanded="false" aria-controls="docs-9"><span>Stay up to date</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-9" class="nav collapse"><li class="nav-item"><a class="nav-link" rel="noopener" href="https://blog.dart.dev" target="_blank"><div><span>Dart Blog</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" rel="noopener" href="https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md" target="_blank"><div><span>Dart SDK Changelog</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/breaking-changes"><div><span>Breaking changes</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/language/evolution"><div><span>Language evolution</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/whats-new"><div><span>What's new in the docs</span></div></a></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link active collapsible" data-toggle="collapse" data-target="#docs-10" role="button" aria-expanded="true" aria-controls="docs-10"><span>Resources</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-10" class="nav collapse show"><li class="nav-item"><a class="nav-link" href="/resources/dart-cheatsheet"><div><span>Language cheatsheet</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/language/spec"><div><span>Language specification</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/dart-3-migration"><div><span>Dart 3 migration guide</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/coming-from/js-to-dart"><div><span>From JavaScript to Dart</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/coming-from/swift-to-dart"><div><span>From Swift to Dart</span></div></a></li><li aria-hidden="true"><div class="sidenav-divider"></div></li><li class="nav-item"><a class="nav-link" href="/resources/faq"><div><span>FAQ</span></div></a></li><li class="nav-item"><a class="nav-link active" href="/resources/glossary"><div><span>Glossary</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/books"><div><span>Books</span></div></a></li><li class="nav-item"><a class="nav-link" href="/resources/videos"><div><span>Videos</span></div></a></li><li class="nav-item"><a class="nav-link" href="/tutorials"><div><span>Tutorials</span></div></a></li></ul>
            </li>
            <li class="nav-item">
              <button class="nav-link collapsible" data-toggle="collapse" data-target="#docs-11" role="button" aria-expanded="true" aria-controls="docs-11"><span>Related sites</span><span class="material-symbols expander" aria-hidden="true" translate="no">expand_more</span></button><ul id="docs-11" class="nav collapse show"><li class="nav-item"><a class="nav-link" rel="noopener" href="https://api.dart.dev" target="_blank"><div><span>API reference</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" rel="noopener" href="https://dartpad.dev" target="_blank"><div><span>DartPad (online editor)</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" rel="noopener" href="https://flutter.dev" target="_blank"><div><span>Flutter</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li><li class="nav-item"><a class="nav-link" rel="noopener" href="https://pub.dev" target="_blank"><div><span>Package site</span><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span></div></a></li></ul>
            </li>
          </ul>
        </div>
        <main id="page-content">
          <div class="after-leading-content">
            <article>
              <div class="content">
                <div id="site-content-title"><h1 id="document-title">Glossary</h1></div>
                <p>The following are definitions of terms used across the Dart documentation.</p>
                <!--@src/components/pages/glossary_search_section-->
                <section id="filter-and-search">
                  <div class="search-row">
                    <div class="search-wrapper">
                      <span class="material-symbols leading-icon" aria-hidden="true" translate="no">search</span>
                      <input placeholder="Search terms..." aria-label="Search terms by name..." type="search" value/>
                    </div>
                  </div>
                </section>
                <!--/@src/components/pages/glossary_search_section-->
                <section id="content-search-results">
                  <div class="card-list">
                    <div id="application-package" class="card outlined-card expandable-card glossary-card" data-partial-matches="application package pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Application package</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Application package card" title="Link to card" href="#application-package"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="application-package-content" aria-label="Expand or collapse Application package card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A Dart package that contains a runnable application.</p></div>
                      <div id="application-package-content" class="card-content expandable-content">
                        <p>
                          An <em>application package</em> is a Dart package that
                          contains a program or app with a <a href="#entrypoint">main entrypoint</a>.
                          Meant to be run directly, either on the command line, in a browser,
                          or by another embedder, such as provided by Flutter.
                        </p>
                        <p>
                          Application packages can have <a href="#dependency">dependencies</a> on other <a href="#package">packages</a>,
                          but are never depended on themselves.
                          Unlike regular packages, they are not intended to be shared.
                        </p>
                        <p>
                          Application packages should check their <a href="#lockfile">lockfiles</a> into source control,
                          so that everyone working on the application and every location the
                          application is deployed has a consistent set of dependencies.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/package-layout"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Package layout</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/versioning"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Pub versioning philosophy</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="assist" class="card outlined-card expandable-card glossary-card" data-partial-matches="assist tools analyzer" data-full-matches="quick assist">
                      <div class="card-header">
                        <h2 class="card-title">Assist</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Assist card" title="Link to card" href="#assist"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="assist-content" aria-label="Expand or collapse Assist card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>An automated, local code edit targeted at making common improvements to code.</p></div>
                      <div id="assist-content" class="card-content expandable-content">
                        <p>
                          An assist is an automated, local code edit targeted at making common
                          improvements to code.
                          Examples of assists include converting <code>switch</code> statements to <code>switch</code>
                          
                          expressions, reversing the <code>then</code> and <code>else</code> blocks in an 
                          <code>if</code> statement,
                          and inserting widgets into a widget structure.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#refactor"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Refactor</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="bottom-type" class="card outlined-card expandable-card glossary-card" data-partial-matches="bottom type type system language" data-full-matches="never">
                      <div class="card-header">
                        <h2 class="card-title">Bottom type</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Bottom type card" title="Link to card" href="#bottom-type"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="bottom-type-content" aria-label="Expand or collapse Bottom type card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A type that has no values and is a subtype of all other types.</p></div>
                      <div id="bottom-type-content" class="card-content expandable-content">
                        <p>
                          The <strong>bottom type</strong> in Dart is the type that has <strong>no values</strong> and is
                          considered a <span class="tooltip-wrapper"><a href="/resources/glossary#subtype" class="tooltip-target"><strong>subtype</strong></a><span class="tooltip"><span class="tooltip-header">Subtype</span><span class="tooltip-content">A type that can be used wherever a value of its supertype is expected. <a title="Learn more about 'Subtype' and find related resources." href="/resources/glossary#subtype">Learn more</a></span></span></span>
                           of every other type.
                        </p>
                        <p>In Dart, the bottom type is represented by the <code>Never</code> type.</p>
                        <p>
                          This means a value of type <code>Never</code> can be used anywhere,
                          because such a value can never actually exist.
                          It's most often used as the <strong>return type</strong> of functions to
                          indicate they <strong>never return</strong>, such as for those that
                          throw exceptions or loop forever.
                        </p>
                        <p>
                          For example, the following <code>fail</code> function always throws an exception,
                          so it's declared with a return type of <code>Never</code> to
                          indicate that it never returns:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Never</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">fail</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>message</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">throw</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Exception</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>message</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>result</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">fail</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Oops</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// OK: Never is a subtype of String.</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"Never fail(String message) {\n  throw Exception(message);\n}\n\nvoid main() {\n  String result = fail('Oops'); // OK: Never is a subtype of String.\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>Since <code>fail</code> never returns, assigning it to a <code>String</code> is allowed.</p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/built-in-types"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Built-in types</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/null-safety/understanding-null-safety#never-for-unreachable-code"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Never for unreachable code</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://en.wikipedia.org/wiki/Bottom_type"><span class="material-symbols" aria-hidden="true" translate="no">open_in_new</span>Bottom types in type theory</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="callback" class="card outlined-card expandable-card glossary-card" data-partial-matches="callback language asynchronous" data-full-matches="function callback,callback function">
                      <div class="card-header">
                        <h2 class="card-title">Callback</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Callback card" title="Link to card" href="#callback"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="callback-content" aria-label="Expand or collapse Callback card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A function passed as an argument to another function to be called later.</p></div>
                      <div id="callback-content" class="card-content expandable-content">
                        <p>
                          A <strong>callback</strong> is a function that you pass as an argument to another
                          function so that it can be invoked (or "called back") at a later time.
                        </p>
                        <p>Callbacks are often used for:</p>
                        <ul>
                          <li>Event handling.</li>
                          <li>Customizing the behavior of APIs.</li>
                          <li>Asynchronous operations, such as responding to the result of a future.</li>
                        </ul>
                        <p>
                          For example, in the following snippet, the <code>printResult</code> function is passed
                          as a callback to <code>doOperation</code>, and is called after the operation finishes:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">doOperation</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>a</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>b</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Function</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span>callback</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>result</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span>a</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">+</span><span> </span><span>b</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">callback</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>result</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">printResult</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>value</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">The result is </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$value</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">.</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">doOperation</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">3</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">4</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span>printResult</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Prints: The result is 7.</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"void doOperation(int a, int b, void Function(int) callback) {\n  final result = a + b;\n  callback(result);\n}\n\nvoid printResult(int value) {\n  print('The result is $value.');\n}\n\nvoid main() {\n  doOperation(3, 4, printResult); // Prints: The result is 7.\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/functions#function-types"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Function types</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/libraries/dart-async#future"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Futures</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="closurization" class="card outlined-card expandable-card glossary-card" data-partial-matches="closurization language functions" data-full-matches="tear-offs">
                      <div class="card-header">
                        <h2 class="card-title">Closurization</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Closurization card" title="Link to card" href="#closurization"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="closurization-content" aria-label="Expand or collapse Closurization card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>The process of turning a method or function into a closure.</p></div>
                      <div id="closurization-content" class="card-content expandable-content">
                        <p>
                          <strong>Closurization</strong> is the process where Dart turns a
                          method or function into a function object (or <em>tear-off</em>) that
                          can be stored, passed, or invoked later.
                        </p>
                        <p>
                          A tear-off is a reference to an existing function or method that evaluates
                          to a function object for that entity, but does not call it.
                          When you tear off a function, the runtime (or compiler) wraps it
                          into a closure so that it behaves like any other function object in Dart.
                        </p>
                        <p>Example:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Greeter</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">greet</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>name</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Hello, </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$name</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>greeter</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Greeter</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span>  </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Tear-off of the instance method `greet`.</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>sayHello</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span>greeter</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span>greet</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">sayHello</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Dart</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Prints: Hello, Dart!</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class Greeter {\n  void greet(String name) {\n    print('Hello, $name!');\n  }\n}\n\nvoid main() {\n  final greeter = Greeter();\n\n  // Tear-off of the instance method `greet`.\n  final sayHello = greeter.greet;\n\n  sayHello('Dart'); // Prints: Hello, Dart!\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          In this example, <code>greeter.greet</code> is closurized into
                          a function object that captures the instance <code>greeter</code>.
                          When you call <code>sayHello</code>, it executes as if
                          you had called <code>greeter.greet(...)</code> directly.
                        </p>
                        <p>
                          Closurization ensures that tear-offs can be
                          used wherever a function is expected.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/functions"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Functions in Dart</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/functions#tear-offs"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Tear-offs</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="code-asset" class="card outlined-card expandable-card glossary-card" data-partial-matches="code asset interop libraries packages" data-full-matches="native asset,native code asset">
                      <div class="card-header">
                        <h2 class="card-title">Code asset</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Code asset card" title="Link to card" href="#code-asset"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="code-asset-content" aria-label="Expand or collapse Code asset card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          Compiled native code that is bundled with a Dart app using a build hook
                          and can be used through <code>dart:ffi</code>.
                        </p>
                      </div>
                      <div id="code-asset-content" class="card-content expandable-content">
                        <p>
                          A <strong>code asset</strong> is compiled code that isn't written in Dart but
                          can be packaged and used by a Dart application.
                          Examples include shared libraries (<code>.so</code>, <code>.dll</code>, <code>.dylib</code>) built
                          in languages like C, C++, or Rust.
                        </p>
                        <p>
                          Code assets can be bundled with a Dart package using a <a href="/tools/hooks">build hook</a>.
                          Dart code can call into these assets using <a href="/interop/c-interop">FFI</a>.
                        </p>
                        <blockquote>
                          <p>
                            Historically, code assets were also referred to
                            as <strong>native assets</strong> or <strong>native code assets</strong>.
                          </p>
                        </blockquote>
                        <p>Code assets are useful for:</p>
                        <ul>
                          <li>Integrating with existing native libraries.</li>
                          <li>Accessing system capabilities not directly exposed in Dart.</li>
                          <li>Sharing performance-critical functionality across platforms.</li>
                        </ul>
                        <p>
                          For example, a Dart application could include a native <code>.so</code> library
                          that exposes specific functions, and call those functions from Dart.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/interop/c-interop/"><span class="material-symbols" aria-hidden="true" translate="no">article</span>C interop using dart:ffi</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/hooks"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Hooks</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="combinator" class="card outlined-card expandable-card glossary-card" data-partial-matches="combinator language import/export" data-full-matches="import combinator,show/hide combinator">
                      <div class="card-header">
                        <h2 class="card-title">Combinator</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Combinator card" title="Link to card" href="#combinator"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="combinator-content" aria-label="Expand or collapse Combinator card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A keyword clause that limits or modifies what's imported or exported.</p></div>
                      <div id="combinator-content" class="card-content expandable-content">
                        <p>
                          In Dart, a <strong>combinator</strong> is a clause that
                          follows an <code>import</code> or <code>export</code> directive to limit or modify
                          the set of names brought into scope.
                        </p>
                        <p>Dart supports two types of combinators:</p>
                        <ul>
                          <li><code>show</code> — explicitly includes specific names.</li>
                          <li><code>hide</code> — excludes specific names.</li>
                        </ul>
                        <p>
                          Combinators help control namespace pollution and
                          avoid conflicts when multiple libraries define symbols with the same name.
                        </p>
                        <p>Example using <code>show</code>:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">import</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">dart:math</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">show</span><span> </span><span>pi</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span>sqrt</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>pi</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span>      </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Accessible</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">sqrt</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">9</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Accessible</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// print(Random()); // Error: Random is not imported.</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"import 'dart:math' show pi, sqrt;\n\nvoid main() {\n  print(pi);      // Accessible\n  print(sqrt(9)); // Accessible\n  // print(Random()); // Error: Random is not imported.\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>Example using <code>hide</code>:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">import</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">dart:math</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">hide</span><span> </span><span>pi</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// print(pi); // Error: pi is hidden.</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Random</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Accessible</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"import 'dart:math' hide pi;\n\nvoid main() {\n  // print(pi); // Error: pi is hidden.\n  print(Random()); // Accessible\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/libraries"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Libraries and imports</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/create-packages#organizing-a-package"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Organizing a package</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="constant-context" class="card outlined-card expandable-card glossary-card" data-partial-matches="constant context language const understanding diagnostics" data-full-matches="implicit const">
                      <div class="card-header">
                        <h2 class="card-title">Constant context</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Constant context card" title="Link to card" href="#constant-context"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="constant-context-content" aria-label="Expand or collapse Constant context card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A region of code where the const keyword is implied and
                          everything within that region must be a constant.
                        </p>
                      </div>
                      <div id="constant-context-content" class="card-content expandable-content">
                        <p>
                          A <em>constant context</em> is a region of code in which it
                          isn't necessary to include the <code>const</code> keyword because it's implied by
                          the fact that everything in that region is required to be a constant.
                          The following locations are constant contexts:
                        </p>
                        <ul>
                          <li>
                            <p>Everything inside a list, map or set literal that's prefixed by
                              the <code>const</code> keyword. For example:</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">var</span><span> </span><span>l</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">const</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">[</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">/*</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">constant context</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">*/</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">]</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"var l = const [/*constant context*/];","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div>
                          </li>
                          <li>
                            <p>The arguments inside an invocation of a constant constructor.
                              For example:</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">var</span><span> </span><span>p</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">const</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Point</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">/*</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">constant context</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">*/</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"var p = const Point(/*constant context*/);","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div>
                          </li>
                          <li>
                            <p>The initializer for a variable that's prefixed by the <code>const</code> keyword.
                              For example:</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">const</span><span> </span><span>v</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">/*</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">constant context</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">*/</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"const v = /*constant context*/;","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div>
                          </li>
                          <li><p>Annotations.</p></li>
                          <li>
                            <p>The expression in a <code>case</code> clause. For example:</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">f</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>e</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">switch</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>e</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">case</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">/*</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">constant context</span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">*/</span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">:</span></span>
</span><span class="line"><span><span>      </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">break</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"void f(int e) {\n  switch (e) {\n    case /*constant context*/:\n      break;\n  }\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div>
                          </li>
                        </ul>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/variables#final-and-const"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Final and const variables</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/effective-dart/usage#dont-use-const-redundantly"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Don't use const redundantly</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="context-type" class="card outlined-card expandable-card glossary-card" data-partial-matches="context type language type system" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Context type</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Context type card" title="Link to card" href="#context-type"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="context-type-content" aria-label="Expand or collapse Context type card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>The type that the surrounding code expects from an expression.</p></div>
                      <div id="context-type-content" class="card-content expandable-content">
                        <p>
                          The <strong>context type</strong> is the type that the surrounding code expects
                          from an expression, such as a variable type, a parameter type, or a
                          return type.
                        </p>
                        <p>
                          Dart uses the context type to interpret and infer meaning
                          from expressions, including:
                        </p>
                        <ul>
                          <li>
                            <p><strong>Type inference</strong> ("downwards inference"):</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">List</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&lt;</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&gt;</span><span> </span><span>list</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">[</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">]</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"List&lt;int&gt; list = [];","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div><p>The context type <code>List&lt;int&gt;</code> lets the compiler infer the list type as <code>&lt;int&gt;[]</code>.</p>
                          </li>
                          <li>
                            <p><strong>Implicit downcast</strong>:</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">asString</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">dynamic</span><span> </span><span>value</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span>value</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"String asString(dynamic value) =&gt; value;","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div><p>The return context is <code>String</code>, so Dart inserts an implicit downcast.</p>
                          </li>
                          <li>
                            <p><strong>Literal interpretation</strong>:</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">double</span><span> </span><span>d</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">0</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"double d = 0;","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div><p>The context type <code>double</code> makes <code>0</code> behave like <code>0.0</code>.</p>
                          </li>
                          <li>
                            <p><strong>Static access shorthand</strong> (dot shorthand):</p><div class="code-block-wrapper language-dart"><div class="code-block-body"><span class="code-block-language" title="Language dart">dart</span><pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>x</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">parse</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>input</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre><!--@src/components/common/client/copy_button data={"toCopy":"int x = .parse(input);","buttonText":null,"classes":[],"title":"Copy code to clipboard"}--><button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button><!--/@src/components/common/client/copy_button--></div></div><p>The context type is <code>int</code>, so <code>.parse</code> resolves to <code>int.parse(input)</code>.</p>
                          </li>
                        </ul>
                        <p>Some expressions have no context type, including:</p>
                        <ul>
                          <li>
                            <p><strong>When used as statements</strong>:<br/>Expressions like <code>set.remove(value);</code> are used only for their
                              effect, not their value, so no type is expected.</p>
                          </li>
                          <li>
                            <p><strong>When the context type is inferred from the expression</strong>:<br/>For example, in <code>var list = [1];</code>, the list literal has no context type.
                              Dart infers <code>List&lt;int&gt;</code> from the contents and assigns that type to the variable.</p>
                          </li>
                        </ul>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/type-system#type-inference"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Type inference</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/type-system#implicit-downcasts-from-dynamic"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Implicit downcast from dynamic</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="dart-sdk-constraint" class="card outlined-card expandable-card glossary-card" data-partial-matches="dart sdk constraint pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Dart SDK constraint</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Dart SDK constraint card" title="Link to card" href="#dart-sdk-constraint"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="dart-sdk-constraint-content" aria-label="Expand or collapse Dart SDK constraint card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>The versions of Dart that a package supports.</p></div>
                      <div id="dart-sdk-constraint-content" class="card-content expandable-content">
                        <p>
                          The range of Dart SDK versions that a package itself declares it supports.
                          An SDK constraint is specified using normal <a href="#version-constraint">version constraint</a>
                           syntax,
                          but in a special <code>environment</code> section <a href="/tools/pub/pubspec#sdk-constraints">in the pubspec</a>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/pubspec#sdk-constraints"><span class="material-symbols" aria-hidden="true" translate="no">article</span>SDK constraints in the pubspec</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/resources/language/evolution#language-versioning"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Language versions</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="definite-assignment" class="card outlined-card expandable-card glossary-card" data-partial-matches="definite assignment language flow analysis understanding diagnostics" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Definite assignment</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Definite assignment card" title="Link to card" href="#definite-assignment"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="definite-assignment-content" aria-label="Expand or collapse Definite assignment card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          The determination of whether a variable has definitely been
                          assigned a value before it's used.
                        </p>
                      </div>
                      <div id="definite-assignment-content" class="card-content expandable-content">
                        <p>
                          Definite assignment analysis is the process of determining, for each
                          local variable at each point in the code, which of the following is true:
                        </p>
                        <ul>
                          <li>
                            The variable has definitely been assigned a value
                            (<em>definitely assigned</em>).
                          </li>
                          <li>
                            The variable has definitely not been assigned a value
                            (<em>definitely unassigned</em>).
                          </li>
                          <li>
                            The variable might or might not have been assigned a value,
                            depending on the execution path taken to arrive at that point.
                          </li>
                        </ul>
                        <p>
                          Definite assignment analysis helps find problems in code,
                          such as places where a variable that might not have been
                          assigned a value is being referenced, or
                          places where a variable that can only be assigned a value one time is
                          being assigned after it might already have been assigned a value.
                        </p>
                        <p>
                          For example, in the following code the variable <code>s</code> is
                          definitely unassigned when it's passed as an argument to <code>print</code>:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">f</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"void f() {\n  String s;\n  print(s);\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>But in the following code, the variable <code>s</code> is definitely assigned:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">f</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>name</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>s</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Hello </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$name</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"void f(String name) {\n  String s = 'Hello $name!';\n  print(s);\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          Definite assignment analysis can even tell whether
                          a variable is definitely assigned (or unassigned) when
                          there are multiple possible execution paths.
                          In the following code the <code>print</code> function is called if
                          execution goes through either the true or the false branch of the
                          <code>if</code> statement, but because <code>s</code> is assigned no matter which branch is taken,
                          it's definitely assigned before it's passed to <code>print</code>:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">f</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>name</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">bool</span><span> </span><span>casual</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">if</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>casual</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span>s</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Hi </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$name</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">else</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span>s</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Hello </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$name</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"void f(String name, bool casual) {\n  String s;\n  if (casual) {\n    s = 'Hi $name!';\n  } else {\n    s = 'Hello $name!';\n  }\n  print(s);\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          In flow analysis, the end of the <code>if</code> statement is referred to
                          as a <em>join</em>—a place where two or more execution paths merge back together.
                          Where there's a join, the analysis says that
                          a variable is definitely assigned if it's definitely assigned along
                          all of the paths that are merging, and definitely unassigned if
                          it's definitely unassigned along all of the paths.
                        </p>
                        <p>
                          Sometimes a variable is assigned a value on one path but not on another,
                          in which case the variable might or might not have been assigned a value.
                          In the following example, the true branch of the <code>if</code> statement might or
                          might not be executed, so the variable might or might be assigned a value:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">f</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>name</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">bool</span><span> </span><span>casual</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">if</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>casual</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span>s</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Hi </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$name</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"void f(String name, bool casual) {\n  String s;\n  if (casual) {\n    s = 'Hi $name!';\n  }\n  print(s);\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          The same is true if there is a false branch that
                          doesn't assign a value to <code>s</code>.
                        </p>
                        <p>
                          The analysis of loops is a little more complicated,
                          but it follows the same basic reasoning.
                          For example, the condition in a <code>while</code> loop is always executed,
                          but the body might or might not be. So just like an <code>if</code> statement,
                          there's a join at the end of the <code>while</code> statement between
                          the path in which the condition is <code>true</code> and
                          the path in which the condition is <code>false</code>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="https://github.com/dart-lang/language/blob/main/resources/type-system/flow-analysis.md"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Definite assignment specification</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/null-safety/understanding-null-safety#definite-assignment-analysis"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Understanding definite assignment analysis</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="dependency" class="card outlined-card expandable-card glossary-card" data-partial-matches="dependency pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Dependency</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Dependency card" title="Link to card" href="#dependency"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="dependency-content" aria-label="Expand or collapse Dependency card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A Dart package that a package relies on.</p></div>
                      <div id="dependency-content" class="card-content expandable-content">
                        <p>
                          A dependency is any other Dart <a href="#package">package</a> that a package relies on.
                          If your package wants to import code from some other package,
                          that package must be a dependency of yours first.
                          Dependencies are specified in your package's <a href="/tools/pub/pubspec">pubspec</a>
                           file
                          with the syntax described in <a href="/tools/pub/dependencies">Package dependencies</a>.
                        </p>
                        <p>
                          To view the dependencies used by a package, use <a href="/tools/pub/cmd/pub-deps"><code>pub deps</code></a>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/dependencies"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Package dependencies</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/cmd/pub-deps"><span class="material-symbols" aria-hidden="true" translate="no">article</span>pub deps</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="dependency-source" class="card outlined-card expandable-card glossary-card" data-partial-matches="dependency source pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Dependency source</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Dependency source card" title="Link to card" href="#dependency-source"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="dependency-source-content" aria-label="Expand or collapse Dependency source card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A kind of place that pub can get packages from.</p></div>
                      <div id="dependency-source-content" class="card-content expandable-content">
                        <p>
                          A type of repository or location that pub can retrieve packages from.
                          A source isn't a specific place like the pub.dev site or a specific git URL.
                          Each source describes a general procedure for accessing a package.
                        </p>
                        <p>
                          As an example, <em>git</em> is one of the supported dependency source.
                          The git source knows how to download packages given a git URL.
                          Several different <a href="/tools/pub/dependencies#dependency-sources">supported sources</a>
                           are available.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/dependencies#dependency-sources"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Dependency sources</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="entrypoint" class="card outlined-card expandable-card glossary-card" data-partial-matches="entrypoint pub packages language" data-full-matches="entry point,main function">
                      <div class="card-header">
                        <h2 class="card-title">Entrypoint</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Entrypoint card" title="Link to card" href="#entrypoint"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="entrypoint-content" aria-label="Expand or collapse Entrypoint card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A Dart library that is directly invoked by a Dart implementation.</p></div>
                      <div id="entrypoint-content" class="card-content expandable-content">
                        <p>
                          In the general context of Dart, an <em>entrypoint</em> is
                          a Dart library that is directly invoked by a Dart implementation.
                          For example, when you pass a Dart library as a command-line argument to
                          the standalone Dart VM, that library is the entrypoint.
                          In other words, it's usually the <code>.dart</code> file that contains <code>main()</code>.
                        </p>
                        <p>
                          In the context of pub, an <em>entrypoint package</em> or <em>root package</em> is
                          the root of a dependency graph.
                          It will usually be an application.
                          When you run your app, it's the entrypoint package.
                          Every other package it depends on will not be an entrypoint in that context.
                        </p>
                        <p>
                          A package can be an entrypoint in some contexts and not in others.
                          Say your app uses a package <code>A</code>.
                          When you run your app, <code>A</code> is not the entrypoint package.
                          However, if you go over to <code>A</code> and execute its tests, in that context,
                          it <em>is</em> the entrypoint since your app isn't involved.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#entrypoint-directory"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Entrypoint directory</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="entrypoint-directory" class="card outlined-card expandable-card glossary-card" data-partial-matches="entrypoint directory pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Entrypoint directory</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Entrypoint directory card" title="Link to card" href="#entrypoint-directory"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="entrypoint-directory-content" aria-label="Expand or collapse Entrypoint directory card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A directory that contains Dart entrypoints.</p></div>
                      <div id="entrypoint-directory-content" class="card-content expandable-content">
                        <p>
                          An <em>entrypoint directory</em> is a directory inside your Dart <a href="#package">package</a> that
                          is allowed to contain <a href="#entrypoint">Dart entrypoints</a>.
                        </p>
                        <p>
                          Pub has a list of these directories: <code>benchmark</code>, <code>bin</code>, <code>example</code>,
                          <code>test</code>, <code>tool</code>, and <code>web</code> (and <code>lib</code>, for 
                          <a href="https://docs.flutter.dev/packages-and-plugins/developing-packages">Flutter apps</a>).
                          Any subdirectories of those (except <code>bin</code>) can also contain entrypoints.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#entrypoint"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Entrypoint</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://docs.flutter.dev/packages-and-plugins/developing-packages"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Flutter packages and plugins</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="function" class="card outlined-card expandable-card glossary-card" data-partial-matches="function language umbrella term" data-full-matches="procedure">
                      <div class="card-header">
                        <h2 class="card-title">Function</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Function card" title="Link to card" href="#function"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="function-content" aria-label="Expand or collapse Function card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          An umbrella term to refer to top-level functions, local functions,
                          static methods, and instance methods.
                        </p>
                      </div>
                      <div id="function-content" class="card-content expandable-content">
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/functions"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Functions overview</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/methods"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Instance methods</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="immediate-dependency" class="card outlined-card expandable-card glossary-card" data-partial-matches="immediate dependency pub packages" data-full-matches="direct dependency">
                      <div class="card-header">
                        <h2 class="card-title">Immediate dependency</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Immediate dependency card" title="Link to card" href="#immediate-dependency"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="immediate-dependency-content" aria-label="Expand or collapse Immediate dependency card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A dependency that a Dart package directly uses.</p></div>
                      <div id="immediate-dependency-content" class="card-content expandable-content">
                        <p>
                          An immediate dependency is a <a href="#dependency">dependency</a> that a
                          package directly uses and declares itself.
                          The dependencies you list in your <a href="/tools/pub/pubspec"><code>pubspec.yaml</code></a>
                           file are
                          your package's immediate dependencies.
                          All other dependencies are <a href="#transitive-dependency">transitive dependencies</a>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/dependencies"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Package dependencies</a>
                            </li>
                            <li>
                              <a class="filled-button" href="#transitive-dependency"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Transitive dependency</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="immutable" class="card outlined-card expandable-card glossary-card" data-partial-matches="immutable language" data-full-matches="read-only,unchangeable">
                      <div class="card-header">
                        <h2 class="card-title">Immutable</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Immutable card" title="Link to card" href="#immutable"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="immutable-content" aria-label="Expand or collapse Immutable card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>An object whose state, including all nested values, can't be changed after it is created.</p></div>
                      <div id="immutable-content" class="card-content expandable-content">
                        <p>
                          An immutable object is one whose state can't be modified after it is created.
                          When an object is immutable, all of its fields must be <code>final</code> (can't be reassigned), and
                          the values of those fields must themselves be immutable (can't be mutated).
                          This helps ensure consistency and enables safer use in concurrent or reactive code.
                        </p>
                        <p>In Dart, a class is immutable if you:</p>
                        <ul>
                          <li>Declare all fields as final, so they can't be reassigned.</li>
                          <li>Ensure the field values themselves are immutable.</li>
                          <li>
                            Optionally, use the <code>@immutable</code> annotation from the meta package.
                            This lets the analyzer warn you if any field is not final or refers to a mutable type.
                          </li>
                        </ul>
                        <p>
                          Additionally, all Dart const values are immutable. For example, <code>const [1, 2, 3]</code>
                          creates an immutable list. If a class has a <code>const</code> (non-factory) constructor, then
                          all of its fields must be final.
                        </p>
                        <p>Example:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">import</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">package:meta/meta.dart</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">@immutable</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">User</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>name</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>age</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">const</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">User</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">this</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span>name</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">this</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span>age</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"import 'package:meta/meta.dart';\n\n@immutable\nclass User {\n  final String name;\n  final int age;\n\n  const User(this.name, this.age);\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          In the proceeding example, once created, you can't modify the <code>User</code> instance.
                          You must create a new one to change any data.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/class-modifiers#final"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>final</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="irrefutable-pattern" class="card outlined-card expandable-card glossary-card" data-partial-matches="irrefutable pattern language patterns" data-full-matches="irrefutable context">
                      <div class="card-header">
                        <h2 class="card-title">Irrefutable pattern</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Irrefutable pattern card" title="Link to card" href="#irrefutable-pattern"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="irrefutable-pattern-content" aria-label="Expand or collapse Irrefutable pattern card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A pattern that always matches.</p></div>
                      <div id="irrefutable-pattern-content" class="card-content expandable-content">
                        <p>
                          <em>Irrefutable patterns</em> are patterns that always match.
                          Irrefutable patterns are the only patterns that can appear in
                          <em>irrefutable contexts</em>: the <a href="/language/patterns#variable-declaration"><em>declaration</em></a>
                           and <a href="/language/patterns#variable-assignment"><em>assignment</em></a>
                          pattern contexts.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/patterns#places-patterns-can-appear"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Places patterns can appear</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://codelabs.developers.google.com/codelabs/dart-patterns-records"><span class="material-symbols" aria-hidden="true" translate="no">school</span>Dive into Dart patterns and records</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="late" class="card outlined-card expandable-card glossary-card" data-partial-matches="late language variables null safety" data-full-matches="late keyword,deferred initialization,late final">
                      <div class="card-header">
                        <h2 class="card-title">Late</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Late card" title="Link to card" href="#late"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="late-content" aria-label="Expand or collapse Late card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A keyword that enables deferred initialization of variables and is
                          typically used with non-nullable variables.
                        </p>
                      </div>
                      <div id="late-content" class="card-content expandable-content">
                        <p>
                          The <code>late</code> keyword in Dart is used to indicate that a variable
                          will be initialized later, after its declaration, but before it's used.
                          This helps avoid the need to make a variable nullable (<code>?</code>) when you
                          know it will definitely receive a value, just not immediately.
                        </p>
                        <p>
                          Using <code>late</code> defers initialization, allowing you to write more
                          flexible and readable code, especially when dealing with dependencies
                          or complex setup.
                        </p>
                        <p>For example:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">late</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>description</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">setup</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span>description</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">This will be initialized before use.</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"late String description;\n\nvoid setup() {\n  description = 'This will be initialized before use.';\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          Be careful with late variables that are part of a public API.
                          If a client accesses the variable before it's initialized,
                          they will encounter a <code>LateInitializationError</code>, which provides
                          little context. In such cases, consider using a
                          private nullable variable with a public getter that throws a
                          descriptive error (e.g., <code>StateError</code>) if accessed too early as
                          this can offer clearer feedback to API users, despite the added
                          complexity.
                        </p>
                        <p>
                          You can also use <code>late final</code> when the variable should only be set once.
                          This is useful in scenarios where the value is not available at object
                          construction time, such as cyclic dependencies in object graphs.
                        </p>
                        <p>Example:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">LinkedQueue</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&lt;</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">T</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&gt;</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">late</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">QueueLink</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&lt;</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">T</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&gt;</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">_head</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">LinkedQueue</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">_head</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">QueueLink</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&lt;</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">T</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">&gt;</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">_head</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>owner</span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">:</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">this</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Cyclic reference between objects</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class LinkedQueue&lt;T&gt; {\n  late final QueueLink&lt;T&gt; _head;\n\n  LinkedQueue() {\n    _head = QueueLink&lt;T&gt;._head(owner: this); // Cyclic reference between objects\n  }\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          Be cautious: if a late variable is accessed before it's initialized
                          or never initialized at all, it will cause a runtime error.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/null-safety"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Null safety in Dart</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/variables#late-variables"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Late variables</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://api.dart.dev/stable/2.7.2/dart-core/LateInitializationError-class.html"><span class="material-symbols" aria-hidden="true" translate="no">description</span>Error: LateInitializationError</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="library" class="card outlined-card expandable-card glossary-card" data-partial-matches="library language libraries" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Library</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Library card" title="Link to card" href="#library"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="library-content" aria-label="Expand or collapse Library card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A single compilation unit in Dart, made up of a
                          primary Dart file and its parts.
                        </p>
                      </div>
                      <div id="library-content" class="card-content expandable-content">
                        <p>
                          A Dart <em>library</em> is a single compilation unit in Dart,
                          made up of a primary <code>.dart</code> file and any optional number of <a href="#part-file">parts</a>.
                          Libraries have their own private scope.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#part-file"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Part file</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="lockfile" class="card outlined-card expandable-card glossary-card" data-partial-matches="lockfile pub packages" data-full-matches="pubspec.lock">
                      <div class="card-header">
                        <h2 class="card-title">Lockfile</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Lockfile card" title="Link to card" href="#lockfile"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="lockfile-content" aria-label="Expand or collapse Lockfile card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A file named pubspec.lock that specifies the versions of each dependency.</p></div>
                      <div id="lockfile-content" class="card-content expandable-content">
                        <p>
                          A file named <code>pubspec.lock</code> that specifies the
                          concrete versions and other identifying information for every
                          <a href="#immediate-dependency">immediate</a> and <a href="#transitive-dependency">transitive</a>
                           dependency a package relies on.
                        </p>
                        <p>
                          Unlike the <a href="/tools/pub/pubspec">pubspec</a>, which only lists immediate dependencies and
                          allows version ranges, the lockfile comprehensively pins down
                          the entire dependency graph to specific versions of packages.
                          A lockfile ensures that you can recreate the
                          exact configuration of packages used by an application.
                        </p>
                        <p>
                          The lockfile is generated automatically for you by pub when you run
                          <a href="/tools/pub/cmd/pub-get"><code>pub get</code></a>, <a href="/tools/pub/cmd/pub-upgrade"><code>pub upgrade</code></a>, or 
                          <a href="/tools/pub/cmd/pub-downgrade"><code>pub downgrade</code></a>.
                          Pub includes a <a href="#pub-content-hash">content hash</a> for each dependency
                          to check against during future resolutions.
                        </p>
                        <p>
                          If your package is an <a href="#application-package">application package</a>,
                          you will typically check this into source control.
                          For regular (library) packages, you usually won't.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/cmd/pub-get"><span class="material-symbols" aria-hidden="true" translate="no">article</span>pub get</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/cmd/pub-upgrade"><span class="material-symbols" aria-hidden="true" translate="no">article</span>pub upgrade</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/cmd/pub-downgrade"><span class="material-symbols" aria-hidden="true" translate="no">article</span>pub downgrade</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="mixin-application" class="card outlined-card expandable-card glossary-card" data-partial-matches="mixin application language understanding diagnostics" data-full-matches="with mixin">
                      <div class="card-header">
                        <h2 class="card-title">Mixin application</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Mixin application card" title="Link to card" href="#mixin-application"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="mixin-application-content" aria-label="Expand or collapse Mixin application card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A class created when a mixin is applied to a class.</p></div>
                      <div id="mixin-application-content" class="card-content expandable-content">
                        <p>
                          A <em>mixin application</em> is the class created when
                          a mixin is applied to a class.
                          For example, consider the following declarations:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">mixin</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">M</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">extends</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">with</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">M</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class A {}\n\nmixin M {}\n\nclass B extends A with M {}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          The class <code>B</code> is a subclass of the mixin application of <code>M</code> to <code>A</code>,
                          sometimes nomenclated as <code>A+M</code>. The class <code>A+M</code> is a subclass of 
                          <code>A</code> and
                          has members that are copied from <code>M</code>.
                        </p>
                        <p>You can give an actual name to a mixin application by defining it as:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">mixin</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">M</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A_M</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">with</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">M</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class A {}\n\nmixin M {}\n\nclass A_M = A with M;","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          Given this declaration of <code>A_M</code>, the following declaration of <code>B</code> is
                          equivalent to the declaration of <code>B</code> in the original example:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">extends</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A_M</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class B extends A_M {}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/mixins"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Mixins in Dart</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="obviously-typed" class="card outlined-card expandable-card glossary-card" data-partial-matches="obviously typed language type system style" data-full-matches="obvious expression type,clear type">
                      <div class="card-header">
                        <h2 class="card-title">Obviously typed</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Obviously typed card" title="Link to card" href="#obviously-typed"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="obviously-typed-content" aria-label="Expand or collapse Obviously typed card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>An expression whose type can be mechanically determined without ambiguity.</p></div>
                      <div id="obviously-typed-content" class="card-content expandable-content">
                        <p>
                          An expression in Dart is considered <strong>obviously typed</strong> when
                          its type is immediately clear from its syntax,
                          without needing inference or complex analysis.
                        </p>
                        <p>
                          This concept is mainly used in lint rules like
                          <code>omit_obvious_local_variable_types</code> and <code>specify_nonobvious_property_types</code>
                          
                          to decide whether an explicit type annotation is redundant or necessary.
                        </p>
                        <div class="header-wrapper">
                          <h3 id="obviously-typed-expressions">Obviously typed expressions</h3>
                          <a class="heading-link" href="#obviously-typed-expressions" aria-label="Link to 'Obviously typed expressions' section">#</a>
                        </div>
                        <p>The following types of expressions are considered obviously typed:</p>
                        <ul>
                          <li>
                            Non-collection literals:
                            <code>1</code>, <code>true</code>, <code>'Hello'</code>.
                          </li>
                          <li>
                            Collection literals with explicit type arguments:
                            <code>&lt;int&gt;[]</code>, <code>&lt;String, bool&gt;{}</code>.
                          </li>
                          <li>
                            Homogeneous list/set literals whose elements are obviously typed:
                            <code>[1, 2, 3]</code>, <code>{true, false}</code>.
                          </li>
                          <li>
                            Homogeneous map literals with obvious key and value types:
                            <code>{1: 10, 2: 20}</code>.
                          </li>
                          <li>
                            Record literals with obvious types:
                            <code>(1, enabled: true)</code>.
                          </li>
                          <li>Local variables and formal parameters that have not been promoted.</li>
                          <li>
                            Instance creation with non-generic classes or explicit type arguments:
                            <code>C()</code>, <code>Set&lt;int&gt;()</code>.
                          </li>
                          <li>
                            Cascades with obviously typed targets:
                            <code>StringBuffer('Hello, ')..write('world!')</code>.
                          </li>
                          <li>
                            Type casts:
                            <code>x as int</code>.
                          </li>
                          <li>
                            Conditional expressions with obviously typed branches of the same type:
                            <code>condition ? 1 : 2</code>.
                          </li>
                          <li>
                            Type tests:
                            <code>x is String</code>.
                          </li>
                          <li>
                            Throw expressions:
                            <code>throw Exception()</code>.
                          </li>
                          <li>
                            Parenthesized expressions whose contents are obviously typed:
                            <code>('Hello!')</code>.
                          </li>
                          <li>
                            <code>this</code> and type literals:
                            <code>String</code>.
                          </li>
                        </ul>
                        <p>
                          In this list, <em>homogeneous</em> means "where every element has the same type".
                          For example, <code>{1: 'one', 2: 'two'}</code> is a homogeneous map,
                          but <code>{1: 'one', 1.5: true}</code> is not.
                          By contrast, if the type of an expression requires inference (for example
                          <code>[1, 2.5]</code> → <code>List&lt;num&gt;</code>), it is <strong>not</strong>
                           considered obviously typed.
                        </p>
                        <p>
                          This distinction helps style rules decide when to
                          enforce or omit type annotations for clarity and consistency.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/effective-dart/style"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Effective Dart: Style</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/linter-rules/omit_obvious_local_variable_types"><span class="material-symbols" aria-hidden="true" translate="no">lightbulb</span>Lint: omit_obvious_local_variable_types</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/linter-rules/specify_nonobvious_property_types"><span class="material-symbols" aria-hidden="true" translate="no">lightbulb</span>Lint: specify_nonobvious_property_types</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="override-inference" class="card outlined-card expandable-card glossary-card" data-partial-matches="override inference language type inference understanding diagnostics" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Override inference</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Override inference card" title="Link to card" href="#override-inference"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="override-inference-content" aria-label="Expand or collapse Override inference card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>How missing types in a method declaration are inferred.</p></div>
                      <div id="override-inference-content" class="card-content expandable-content">
                        <p>
                          Override inference is the process by which any missing types in
                          a method declaration are inferred based on the corresponding types from
                          the method or methods that it overrides.
                        </p>
                        <p>
                          If a candidate method (the method that's missing type information)
                          overrides a single inherited method, then the
                          corresponding types from the overridden method are inferred.
                          For example, consider the following code:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">m</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">0</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">extends</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">@override</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">m</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>s</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">1</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class A {\n  int m(String s) =&gt; 0;\n}\n\nclass B extends A {\n  @override\n  m(s) =&gt; 1;\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          The declaration of <code>m</code> in <code>B</code> is a candidate because
                          it's missing both the return type and the parameter type.
                          Because it overrides a single method (the method <code>m</code> in <code>A</code>),
                          the types from the overridden method will be used to infer
                          the missing types and it will be as if the method in <code>B</code> had been
                          declared as <code>int m(String s) =&gt; 1;</code>.
                        </p>
                        <p>
                          If a candidate method overrides multiple methods, and
                          the function type one of those overridden methods, M<sub>s</sub>,
                          is a supertype of the function types of all of the other overridden methods,
                          then M<sub>s</sub> is used to infer the missing types.
                          For example, consider the following code:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">m</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">num</span><span> </span><span>n</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">0</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">num</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">m</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">int</span><span> </span><span>i</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">0</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">C</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">implements</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">@override</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">m</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>n</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">1</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class A {\n  int m(num n) =&gt; 0;\n}\n\nclass B {\n  num m(int i) =&gt; 0;\n}\n\nclass C implements A, B {\n  @override\n  m(n) =&gt; 1;\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          The declaration of <code>m</code> in <code>C</code> is a candidate for override inference because
                          it's missing both the return type and the parameter type.
                          It overrides both <code>m</code> in <code>A</code> and <code>m</code> in <code>B</code>, so the compiler needs to
                          choose one of them from which the missing types can be inferred.
                          But because the function type of <code>m</code> in <code>A</code> (<code>int Function(num)</code>) is
                          a supertype of the function type of <code>m</code> in <code>B</code> (<code>num Function(int)</code>),
                          the function in <code>A</code> is used to infer the missing types. The result is
                          the same as declaring the method in <code>C</code> as <code>int m(num n) =&gt; 1;</code>.
                        </p>
                        <p>
                          It is an error if none of the overridden methods have a function type that
                          is a supertype of all the other overridden methods.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/extend"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Inheritance in Dart</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="package" class="card outlined-card expandable-card glossary-card" data-partial-matches="package pub packages" data-full-matches="library package">
                      <div class="card-header">
                        <h2 class="card-title">Package</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Package card" title="Link to card" href="#package"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="package-content" aria-label="Expand or collapse Package card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A directory with a collection of Dart libraries, resources,
                          and a pubspec.yaml file describing them.
                        </p>
                      </div>
                      <div id="package-content" class="card-content expandable-content">
                        <p>
                          A Dart <em>package</em> is a collection of Dart <a href="#library">libraries</a> and resources in
                          a directory, with a <a href="/tools/pub/pubspec"><code>pubspec.yaml</code></a>
                           file in the root of that directory.
                        </p>
                        <p>
                          Packages can have <a href="#dependency">dependencies</a> on other packages
                          <em>and</em> can be dependencies themselves.
                          A package's <code>/lib</code> directory contains the <a href="/tools/pub/package-layout#public-libraries">public libraries</a>
                           that
                          other packages can import and use.
                          They can also include scripts to be run directly.
                          A package that is not intended to be depended on by
                          other packages is an <a href="#application-package">application package</a>.
                          Shared packages are <a href="/tools/pub/publishing">published</a> to pub.dev,
                          but you can also have non-published packages.
                        </p>
                        <p>
                          Don't check the <a href="#lockfile">lockfile</a> of a package into source control,
                          since libraries should support a range of dependency versions.
                          The <a href="#version-constraint">version constraints</a> of a package's <a href="#immediate-dependency">immediate dependencies</a>
                           should
                          be as wide as possible while still ensuring that the dependencies will be
                          compatible with the versions that were tested against.
                        </p>
                        <p>
                          Since <a href="https://semver.org/spec/v2.0.0-rc.1.html">semantic versioning</a> requires that
                          libraries increment their major version numbers for
                          any backwards incompatible changes, packages will usually
                          require their dependencies' versions to be greater than or equal to
                          the versions that were tested and less than the next major version.
                          So if your library depended on the (fictional) <code>transmogrify</code> package and
                          you tested it at version <code>1.2.1</code>, your version constraint would be 
                          <code>^1.2.1</code>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/packages"><span class="material-symbols" aria-hidden="true" translate="no">article</span>How to use packages</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/pubspec"><span class="material-symbols" aria-hidden="true" translate="no">article</span>The pubspec.yaml file</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/publishing"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Publishing packages</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="package-uploader" class="card outlined-card expandable-card glossary-card" data-partial-matches="package uploader pub packages" data-full-matches="uploader">
                      <div class="card-header">
                        <h2 class="card-title">Package uploader</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Package uploader card" title="Link to card" href="#package-uploader"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="package-uploader-content" aria-label="Expand or collapse Package uploader card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A pub.dev user who has administrative permissions for a package.</p></div>
                      <div id="package-uploader-content" class="card-content expandable-content">
                        <p>
                          A <em>package uploader</em> is someone who has
                          administrative permissions for a package.
                          A package uploader can upload new versions of the package,
                          and they can also <a href="/tools/pub/publishing#uploaders">add and remove other uploaders</a>
                           for that package.
                        </p>
                        <p>
                          If a package has a <a href="#verified-publisher">verified publisher</a>,
                          then all members of the publisher can upload the package.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/publishing#uploaders"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Managing uploaders</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="part-file" class="card outlined-card expandable-card glossary-card" data-partial-matches="part file language libraries" data-full-matches="part">
                      <div class="card-header">
                        <h2 class="card-title">Part file</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Part file card" title="Link to card" href="#part-file"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="part-file-content" aria-label="Expand or collapse Part file card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A Dart source file that contains a <code>part of</code> directive.</p></div>
                      <div id="part-file-content" class="card-content expandable-content">
                        <p>
                          A part file is a Dart source file that contains a <code>part of</code> directive
                          and is included in a library using the <code>part</code> directive.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/create-packages#organizing-a-package"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Guidance on libraries and parts</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/effective-dart/usage#do-use-strings-in-part-of-directives"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Use library URIs in <code>part of</code> directives</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="potentially-non-nullable" class="card outlined-card expandable-card glossary-card" data-partial-matches="potentially non-nullable language type system flow analysis understanding diagnostics" data-full-matches="potentially nullable">
                      <div class="card-header">
                        <h2 class="card-title">Potentially non-nullable</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Potentially non-nullable card" title="Link to card" href="#potentially-non-nullable"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="potentially-non-nullable-content" aria-label="Expand or collapse Potentially non-nullable card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A type that is either non-nullable explicitly or
                          due to being a type parameter.
                        </p>
                      </div>
                      <div id="potentially-non-nullable-content" class="card-content expandable-content">
                        <p>
                          A type is <em>potentially non-nullable</em> if it's either
                          explicitly non-nullable or if it's a type parameter.
                        </p>
                        <p>
                          A type is explicitly non-nullable if it is a
                          type name that isn't followed by a question mark (<code>?</code>).
                          Note that there are a few types that are always nullable, such as
                          <code>Null</code> and <code>dynamic</code>, and that <code>FutureOr</code>
                           is only non-nullable if
                          it isn't followed by a question mark <em>and</em>
                          the type argument is non-nullable (such as <code>FutureOr&lt;String&gt;</code>).
                        </p>
                        <p>
                          Type parameters are potentially non-nullable because the actual
                          runtime type (the type specified as a type argument) might be non-nullable.
                          For example, given a declaration of <code>class C&lt;T&gt; {}</code>,
                          the type <code>C</code> could be used with a non-nullable type argument as in 
                          <code>C&lt;int&gt;</code>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/null-safety/understanding-null-safety#nullability-and-generics"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Nullability and generics</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="pub-content-hash" class="card outlined-card expandable-card glossary-card" data-partial-matches="pub content hash pub security" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Pub content hash</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Pub content hash card" title="Link to card" href="#pub-content-hash"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="pub-content-hash-content" aria-label="Expand or collapse Pub content hash card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>SHA256 hashes maintained by pub.dev to validate package integrity.</p></div>
                      <div id="pub-content-hash-content" class="card-content expandable-content">
                        <p>
                          The pub.dev repository maintains a SHA256 <em>content hash</em> of
                          each version of each package it hosts.
                          Pub clients use this hash to validate the integrity of downloaded packages,
                          and protect against changes on the source repository.
                        </p>
                        <p>
                          When <code>dart pub get</code> downloads a package,
                          it computes the hash of the downloaded archive.
                          The hash of each hosted dependency is stored with the
                          <a href="/tools/pub/cmd/pub-get">resolution</a> in the <a href="#lockfile">lockfile</a>.
                        </p>
                        <p>
                          The pub client uses this content hash to verify that
                          running <code>dart pub get</code> again using the same lockfile,
                          potentially on a different computer, uses exactly the same packages.
                        </p>
                        <p>
                          If the locked hash doesn't match what's currently in the pub cache,
                          pub redownloads the archive. If it still doesn't match,
                          the lockfile updates and a warning is printed.
                        </p>
                        <p>
                          To make a discrepancy become an error instead of a warning,
                          use the <a href="/tools/pub/cmd/pub-get#enforce-lockfile"><code>--enforce-lockfile</code></a>
                           option for <code>dart pub get</code>.
                          With this option, if pub can't find package archives with the same hashes,
                          dependency resolution fails and the lockfile isn't updated.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/cmd/pub-get#enforce-lockfile"><span class="material-symbols" aria-hidden="true" translate="no">article</span>dart pub get --enforce-lockfile</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="pub-system-cache" class="card outlined-card expandable-card glossary-card" data-partial-matches="pub system cache pub packages" data-full-matches="pub cache">
                      <div class="card-header">
                        <h2 class="card-title">Pub system cache</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Pub system cache card" title="Link to card" href="#pub-system-cache"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="pub-system-cache-content" aria-label="Expand or collapse Pub system cache card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A directory where pub stores downloaded remote packages.</p></div>
                      <div id="pub-system-cache-content" class="card-content expandable-content">
                        <p>
                          When pub gets a remote package,
                          it downloads it into a single <em>pub system cache</em> directory.
                          On macOS and Linux, this directory defaults to <code>~/.pub-cache</code>.
                          On Windows, the directory defaults to <code>%LOCALAPPDATA%\Pub\Cache</code>,
                          though its exact location might vary depending on the Windows version.
                          You can specify a different location using the
                          <a href="/tools/pub/environment-variables"><code>PUB_CACHE</code></a> environment variable.
                        </p>
                        <p>
                          Once packages are in the system cache,
                          pub creates a <code>package_config.json</code> file that maps each package
                          used by your application to the corresponding package in the cache.
                        </p>
                        <p>
                          You only have to download a given version of a package once
                          and can then reuse it in as many packages as you would like.
                          If you specify the <code>--offline</code> flag to use cached packages,
                          you can delete and regenerate your <code>package_config.json</code>
                          files without having to access the network.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/environment-variables"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Pub environment variables</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="pub-workspace" class="card outlined-card expandable-card glossary-card" data-partial-matches="pub workspace pub packages" data-full-matches="workspace">
                      <div class="card-header">
                        <h2 class="card-title">Pub workspace</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Pub workspace card" title="Link to card" href="#pub-workspace"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="pub-workspace-content" aria-label="Expand or collapse Pub workspace card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A collection of packages that are developed together with
                          a shared resolution of their dependency constraints.
                        </p>
                      </div>
                      <div id="pub-workspace-content" class="card-content expandable-content">
                        <p>
                          A <em>pub workspace</em> associated a collection of local packages that are
                          treated as a single unit during development, enabling
                          shared resolution of their dependency constraints.
                          Useful for developing in a monorepo.
                        </p>
                        <p>
                          The packages have shared <code>pubspec.lock</code> and
                          <code>.dart_tool/package_config.json</code> files in the workspace root directory.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/workspaces"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Pub workspaces</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="public-library" class="card outlined-card expandable-card glossary-card" data-partial-matches="public library language libraries" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Public library</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Public library card" title="Link to card" href="#public-library"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="public-library-content" aria-label="Expand or collapse Public library card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A library that is located in a package's <code>lib</code> directory but
                          not inside the <code>lib/src</code> directory.
                        </p>
                      </div>
                      <div id="public-library-content" class="card-content expandable-content">
                        <p>
                          A public library is a library that is located inside the package's <code>lib</code>
                          directory but not inside the <code>lib/src</code> directory.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/create-packages#organizing-a-package"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Organizing a package's libraries</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/package-layout#public-directories"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Public package directories</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="quick-fix" class="card outlined-card expandable-card glossary-card" data-partial-matches="quick fix tools understanding diagnostics" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Quick fix</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Quick fix card" title="Link to card" href="#quick-fix"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="quick-fix-content" aria-label="Expand or collapse Quick fix card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          An automated, local code edit targeted at fixing the issue reported by a
                          specific diagnostic.
                        </p>
                      </div>
                      <div id="quick-fix-content" class="card-content expandable-content">
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="https://blog.dart.dev/quick-fixes-for-analysis-issues-c10df084971a"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Quick fixes for analysis issues</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/diagnostic-messages"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Diagnostic messages</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/linter-rules"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Linter rules</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="refactor" class="card outlined-card expandable-card glossary-card" data-partial-matches="refactor tools analysis" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Refactor</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Refactor card" title="Link to card" href="#refactor"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="refactor-content" aria-label="Expand or collapse Refactor card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A code edit targeted at modifications that are either non-local or that
                          require user interaction.
                        </p>
                      </div>
                      <div id="refactor-content" class="card-content expandable-content">
                        <p>
                          A refactor is a code edit targeted at modifications that are either non-local
                          or that require user interaction.
                          Examples of refactors include renaming, removing, or extracting code.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#assist"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Assist</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="refutable-pattern" class="card outlined-card expandable-card glossary-card" data-partial-matches="refutable pattern language patterns" data-full-matches="matching contexts">
                      <div class="card-header">
                        <h2 class="card-title">Refutable pattern</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Refutable pattern card" title="Link to card" href="#refutable-pattern"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="refutable-pattern-content" aria-label="Expand or collapse Refutable pattern card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A pattern that can be tested against a value.</p></div>
                      <div id="refutable-pattern-content" class="card-content expandable-content">
                        <p>
                          A <em>refutable pattern</em> is a pattern that can be tested against a value to
                          determine if the pattern matches the value.
                          If not, the pattern <em>refutes</em>, or denies, the match.
                          Refutable patterns appear in <a href="/language/patterns#matching"><em>matching contexts</em></a>.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/patterns#places-patterns-can-appear"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Places patterns can appear</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://codelabs.developers.google.com/codelabs/dart-patterns-records"><span class="material-symbols" aria-hidden="true" translate="no">school</span>Dive into Dart patterns and records</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="shadowing" class="card outlined-card expandable-card glossary-card" data-partial-matches="shadowing language" data-full-matches="variable shadowing,name shadowing">
                      <div class="card-header">
                        <h2 class="card-title">Shadowing</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Shadowing card" title="Link to card" href="#shadowing"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="shadowing-content" aria-label="Expand or collapse Shadowing card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>When a local declaration hides another with the same name.</p></div>
                      <div id="shadowing-content" class="card-content expandable-content">
                        <p>
                          <strong>Shadowing</strong> occurs when a local declaration,
                          such as a variable or parameter,
                          uses the same name as an existing declaration in an outer scope,
                          making the outer one inaccessible within the inner scope.
                        </p>
                        <p>
                          While valid in Dart, shadowing can lead to
                          confusing code or unintended behavior.
                          As a result, it's generally discouraged unless
                          used deliberately to improve the clarity of your code.
                        </p>
                        <div class="header-wrapper">
                          <h3 id="example">Example</h3>
                          <a class="heading-link" href="#example" aria-label="Link to 'Example' section">#</a>
                        </div>
                        <p>
                          In this example, the local <code>message</code> variable inside
                          the <code>printMessage</code> function <strong>shadows</strong> the top-level 
                          <code>message</code> variable:
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>message</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Global</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">printMessage</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>message</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Local</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Shadows the global `message` variable.</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>message</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Prints: Local</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">printMessage</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>message</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Prints: Global</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"final message = 'Global';\n\nvoid printMessage() {\n  final message = 'Local'; // Shadows the global `message` variable.\n  print(message); // Prints: Local\n}\n\nvoid main() {\n  printMessage();\n  print(message); // Prints: Global\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>Shadowing can also occur in nested blocks:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>value</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">10</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">if</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">true</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">final</span><span> </span><span>value</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">20</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Shadows the outer `value` variable.</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>value</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span>   </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Prints: 20</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>value</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span>     </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Prints: 10</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"void main() {\n  final value = 10;\n  if (true) {\n    final value = 20; // Shadows the outer `value` variable.\n    print(value);   // Prints: 20\n  }\n  print(value);     // Prints: 10\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                      </div>
                    </div>
                    <div id="subclass" class="card outlined-card expandable-card glossary-card" data-partial-matches="subclass language type system" data-full-matches="child class">
                      <div class="card-header">
                        <h2 class="card-title">Subclass</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Subclass card" title="Link to card" href="#subclass"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="subclass-content" aria-label="Expand or collapse Subclass card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A class that inherits the implementation of another class.</p></div>
                      <div id="subclass-content" class="card-content expandable-content">
                        <p>
                          A <em>subclass</em> is a class that inherits the implementation of another class by
                          using the <a href="/language/extend"><code>extends</code></a> keyword, or by 
                          <a href="#mixin-application">mixin application</a>.
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// A is a subclass of B; B is the superclass of A.</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">extends</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// B1 has the superclass `A with M`, which has the superclass A.</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B1</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">extends</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">with</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">M</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"// A is a subclass of B; B is the superclass of A.\nclass A extends B {}\n\n// B1 has the superclass `A with M`, which has the superclass A.\nclass B1 extends A with M {}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          A subclass relation also implies an associated <a href="#subtype">subtype</a> relation.
                          For example, <code>class A</code> implicitly defines an associated type <code>A</code>
                          
                          which instances of the class <code>A</code> inhabit.
                          So, <code>class A extends B</code> declares not just that the class
                          <code>A</code> is a subclass of <code>B</code>, but also establishes that the 
                          <em>type</em> <code>A</code> is a
                          <em>subtype</em> of the type <code>B</code>.
                        </p>
                        <p>
                          Subclass relations are a subset of subtype relations.
                          When the documentation says "<code>S</code> must be a subtype of <code>T</code>",
                          it's fine for <code>S</code> to be a subclass of <code>T</code>.
                          However, the converse is not true: not all subtypes are subclasses.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/extend"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Inheritance in Dart</a>
                            </li>
                            <li>
                              <a class="filled-button" href="#subtype"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Subtype relationship</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="subtype" class="card outlined-card expandable-card glossary-card" data-partial-matches="subtype language type system" data-full-matches="subtyping,subtype polymorphism">
                      <div class="card-header">
                        <h2 class="card-title">Subtype</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Subtype card" title="Link to card" href="#subtype"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="subtype-content" aria-label="Expand or collapse Subtype card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A type that can be used wherever a value of its supertype is expected.</p></div>
                      <div id="subtype-content" class="card-content expandable-content">
                        <p>
                          A <em>subtype</em> relation is where a value of a certain type is substitutable
                          where the value of another type, the supertype, is expected.
                          For example, if <code>S</code> is a subtype of <code>T</code>,
                          then you can substitute a value of type <code>S</code>
                          where a value of type <code>T</code> is expected.
                        </p>
                        <p>
                          A subtype supports all of the operations of its supertype
                          (and possibly some extra operations).
                          In practice, this means you can assign the value of a subtype
                          to any location expecting the supertype,
                          and all of the methods of the supertype are available on the subtype.
                        </p>
                        <p>
                          This is true at least statically.
                          A specific API might not allow the substitution at run time,
                          depending on its operations.
                        </p>
                        <p>
                          Some subtype relations are based on the structure of the type,
                          like with nullable types (for example, <code>int</code> is a subtype of <code>int?</code>)
                          and function types
                          (for example, <code>String Function()</code> is a subtype of <code>void Function()</code>).
                        </p>
                        <p>
                          Subtypes can also be introduced for classes by
                          <a href="/language/classes#implicit-interfaces">implementation</a>
                          or <a href="/language/extend">inheritance</a> (direct or indirect):
                        </p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// A is a subtype of B, but NOT a subclass of B.</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">A</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">implements</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">B</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// C is a subtype AND a subclass of D.</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">C</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">extends</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">D</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"// A is a subtype of B, but NOT a subclass of B.\nclass A implements B {}\n\n// C is a subtype AND a subclass of D.\nclass C extends D {}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#subclass"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Subclass</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/type-system#substituting-types"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Substituting types</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="transitive-dependency" class="card outlined-card expandable-card glossary-card" data-partial-matches="transitive dependency pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Transitive dependency</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Transitive dependency card" title="Link to card" href="#transitive-dependency"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="transitive-dependency-content" aria-label="Expand or collapse Transitive dependency card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A dependency that a package indirectly uses because
                          one of its dependencies requires it.
                        </p>
                      </div>
                      <div id="transitive-dependency-content" class="card-content expandable-content">
                        <p>
                          A <em>transitive dependency</em> is a <a href="#dependency">dependency</a> that a package indirectly uses
                          because one of its dependencies, or their dependencies, requires it.
                        </p>
                        <p>
                          If your package depends on A, which in turn depends on B which depends on C,
                          then A is an <a href="#immediate-dependency">immediate dependency</a> and B and C are transitive ones.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#immediate-dependency"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Immediate dependency</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="tree-shaking" class="card outlined-card expandable-card glossary-card" data-partial-matches="tree shaking language compilation optimization" data-full-matches="dead-code elimination">
                      <div class="card-header">
                        <h2 class="card-title">Tree shaking</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Tree shaking card" title="Link to card" href="#tree-shaking"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="tree-shaking-content" aria-label="Expand or collapse Tree shaking card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A compiler optimization that removes unused code.</p></div>
                      <div id="tree-shaking-content" class="card-content expandable-content">
                        <p>
                          <strong>Tree shaking</strong> is a compiler optimization that
                          analyzes which parts of the code are actually used by an application and
                          removes everything else from the final output.
                        </p>
                        <p>
                          This makes the compiled program smaller and faster to load, since dead code
                          that is never referenced doesn't end up in the binary or bundle.
                        </p>
                        <p>
                          Tree shaking is especially important for web and mobile apps, where
                          code size directly impacts download time and runtime performance.
                        </p>
                        <p>
                          For example, if you import a library that defines ten top-level functions,
                          but your app only calls two, tree shaking ensures
                          the other eight functions are excluded from the compiled output.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/dart-compile"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Dart compile</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/libraries"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Libraries &amp; imports</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/web/deployment"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Web deployment</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="type-alias" class="card outlined-card expandable-card glossary-card" data-partial-matches="type alias language type system" data-full-matches="typedef,alias">
                      <div class="card-header">
                        <h2 class="card-title">Type alias</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Type alias card" title="Link to card" href="#type-alias"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="type-alias-content" aria-label="Expand or collapse Type alias card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content"><p>A user-defined name for an existing type.</p></div>
                      <div id="type-alias-content" class="card-content expandable-content">
                        <p>A <strong>type alias</strong> is an alternative name that refers to another type.</p>
                        <p>
                          They can be used to simplify complex type definitions,
                          improve readability, or create semantic meaning in code.
                        </p>
                        <p>
                          Dart supports defining type aliases using the <code>typedef</code> keyword.
                          You can alias functions, classes, and even generic types.
                        </p>
                        <div class="header-wrapper">
                          <h3 id="examples">Examples</h3>
                          <a class="heading-link" href="#examples" aria-label="Link to 'Examples' section">#</a>
                        </div>
                        <div class="header-wrapper">
                          <h4 id="function-type-alias">Function type alias</h4>
                          <a class="heading-link" href="#function-type-alias" aria-label="Link to 'Function type alias' section">#</a>
                        </div>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">typedef</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">StringTransformer</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Function</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">printTransformed</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">String</span><span> </span><span>input</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">StringTransformer</span><span> </span><span>transformer</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">transformer</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>input</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">printTransformed</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">hello</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>str</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=&gt;</span><span> </span><span>str</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">toUpperCase</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span><span> </span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Output: HELLO</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"typedef StringTransformer = String Function(String);\n\nvoid printTransformed(String input, StringTransformer transformer) {\n  print(transformer(input));\n}\n\nvoid main() {\n  printTransformed('hello', (str) =&gt; str.toUpperCase()); // Output: HELLO\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <div class="header-wrapper">
                          <h4 id="class-alias">Class alias</h4>
                          <a class="heading-link" href="#class-alias" aria-label="Link to 'Class alias' section">#</a>
                        </div>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">class</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">HttpClient</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">typedef</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Client</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">HttpClient</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Client</span><span> </span><span>client</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">HttpClient</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"class HttpClient {}\n\ntypedef Client = HttpClient;\n\nClient client = HttpClient();","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>Type aliases don't create new types, they just provide alternate names.</p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/typedefs"><span class="material-symbols" aria-hidden="true" translate="no">article</span><code>typedef</code> keyword</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="variance" class="card outlined-card expandable-card glossary-card" data-partial-matches="variance and variance positions language type system generics" data-full-matches="variance positions,covariance,covariant,contravariance,contravariant">
                      <div class="card-header">
                        <h2 class="card-title">Variance and variance positions</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Variance and variance positions card" title="Link to card" href="#variance"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="variance-content" aria-label="Expand or collapse Variance and variance positions card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          How changing a type argument of a type affects the relationship
                          between the original type and the resulting one.
                        </p>
                        <p>
                          In Dart, changing the type argument of a
                          type declaration (like a class) or function return type, changes the
                          overall type relationship in the same direction (covariant).
                        </p>
                        <p>
                          However, changing the type of a function's parameter types, changes the
                          overall type relationship in the opposite direction (contravariant).
                        </p>
                      </div>
                      <div id="variance-content" class="card-content expandable-content">
                        <p>
                          A type parameter of a class (or other type declaration, like a mixin) is
                          said to be <em>covariant</em> when the type as a whole
                          "co-varies" with the actual type argument.
                          In other words, if the type argument is replaced by a
                          subtype then the type as a whole is also a subtype.
                        </p>
                        <p>
                          For example, the type parameter of the class <code>List</code> is covariant because
                          list types co-vary with their type argument: <code>List&lt;int&gt;</code> is a subtype of
                          <code>List&lt;Object&gt;</code> because <code>int</code> is a subtype of <code>Object</code>.
                        </p>
                        <p>
                          In Dart, all type parameters of all class, mixin,
                          mixin class, and enum declarations are covariant.
                        </p>
                        <p>
                          However, function types are different:
                          A function type is covariant in its return type, but
                          the opposite (known as <em>contravariant</em>) in its parameter types.
                          For example, the type <code>int Function(int)</code> is a
                          subtype of the type <code>Object Function(int)</code>, but it is a
                          supertype of <code>int Function(Object)</code>.
                        </p>
                        <p>
                          This makes sense if you consider their <a href="#subtype">substitutability</a>.
                          If you call a function with a static type of <code>int Function(int)</code>,
                          that function can actually be of type <code>int Function(Object)</code> at runtime.
                          Based on the static type, you expect to be able to pass an <code>int</code>
                           to it.
                          That will be fine since the function actually accepts any <code>Object</code>,
                          and this includes every object of type <code>int</code>.
                          Similarly, the returned result will be of type <code>int</code>,
                          which is also what you expect based on the static type.
                        </p>
                        <p>Hence, <code>int Function(Object)</code> is a subtype of <code>int Function(int)</code>.</p>
                        <p>
                          Note that everything is turned upside-down for parameter types.
                          In particular, this subtype relation among function types requires that
                          the <em>opposite</em> subtype relation exists for the parameter type.
                          For example, <code>void Function(Object)</code> is a subtype of <code>void Function(int)</code>
                          
                          because <code>int</code> is a subtype of <code>Object</code>.
                        </p>
                        <p>
                          With a more complex type like <code>List&lt;void Function(int)&gt;</code>,
                          you have to consider the <em>positions</em> in the type.
                          To accomplish this, turn one of the parts of the type into a placeholder,
                          and then consider what happens to the type when
                          different types are placed in that position.
                        </p>
                        <p>
                          For example, consider <code>List&lt;void Function(_)&gt;</code> as a template for
                          a type where you can put different types in place of the placeholder <code>_</code>.
                          This type is contravariant in the position where that placeholder occurs.
                        </p>
                        <p>
                          The following illustrates this by substituting <code>Object</code> and <code>int</code> for <code>_</code>.
                          <code>List&lt;void Function(Object)&gt;</code> is a subtype of <code>List&lt;void Function(int)&gt;</code>
                          
                          because <code>void Function(Object)</code> is a subtype of <code>void Function(int)</code>
                           because
                          <code>void</code> is a subtype of <code>void</code> (the return types) and
                          <code>int</code> is a subtype of <code>Object</code> (the parameter types, in the opposite order).
                          Hence, the type at <code>_</code> varies in the opposite direction of
                          the type <code>List&lt;void Function(_)&gt;</code> as a whole, and this
                          'opposite direction' by definition makes it a <em>contravariant position</em>.
                        </p>
                        <p>
                          A <em>covariant position</em> is defined similarly.
                          For example, <code>_</code> is at a covariant position in the type <code>List&lt;_&gt;</code>,
                          and <code>_</code> is also at a covariant position in the type <code>_ Function(int)</code>.
                        </p>
                        <p>
                          There is yet another kind of position known as <em>invariant</em>,
                          but it occurs much more rarely so the details are omitted here.
                        </p>
                        <p>
                          In practice, it's often sufficient to know that
                          the type arguments of a class, mixin, etc. are in a covariant position,
                          and so is the return type of a function type, but
                          the parameter types are in a contravariant position.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="#subtype"><span class="material-symbols" aria-hidden="true" translate="no">dictionary</span>Subtype relationship</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Covariance and contravariance</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/type-system#covariant-keyword"><span class="material-symbols" aria-hidden="true" translate="no">article</span>The covariant keyword</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="verified-publisher" class="card outlined-card expandable-card glossary-card" data-partial-matches="verified publisher pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Verified publisher</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Verified publisher card" title="Link to card" href="#verified-publisher"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="verified-publisher-content" aria-label="Expand or collapse Verified publisher card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A package publisher on the pub.dev site whose
                          identity has been verified by pub.dev.
                        </p>
                      </div>
                      <div id="verified-publisher-content" class="card-content expandable-content">
                        <p>
                          A <em>verified publisher</em> is a collection of one or more users who
                          are identified with a unique domain name.
                          The ownership of the domain name is verified by pub.dev,
                          such as for the <a href="https://pub.dev/publishers/dart.dev">dart.dev publisher</a>
                           on pub.dev by the Dart team.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/verified-publishers"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Verified publishers</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/publishing#verified-publisher"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Publishing packages as verified publisher</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="version-constraint" class="card outlined-card expandable-card glossary-card" data-partial-matches="version constraint pub packages" data-full-matches>
                      <div class="card-header">
                        <h2 class="card-title">Version constraint</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Version constraint card" title="Link to card" href="#version-constraint"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="version-constraint-content" aria-label="Expand or collapse Version constraint card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A constraint associated with each dependency that
                          specifies which versions a package is expected to work with.
                        </p>
                      </div>
                      <div id="version-constraint-content" class="card-content expandable-content">
                        <p>
                          A <em>version constraint</em> is a specified range of compatible versions
                          of a <a href="#dependency">dependency</a> for a package.
                          This can be a single version (<code>0.3.0</code>) or a range of versions (<code>^1.2.1</code>).
                          While <code>any</code> is also allowed, for performance reasons it's not recommended.
                        </p>
                        <p>
                          Library <a href="#package">packages</a> should always specify version constraints
                          for each of their non-dev dependencies.
                          <a href="#application-package">Application packages</a>, on the other hand,
                          can allow any version of their dependencies,
                          since they use the <a href="#lockfile">lockfile</a> to manage their dependency versions.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/tools/pub/dependencies#version-constraints"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Version constraints</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/versioning"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Pub versioning philosophy</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/tools/pub/dependencies#caret-syntax"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Caret syntax</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="wildcard" class="card outlined-card expandable-card glossary-card" data-partial-matches="wildcard language patterns syntax" data-full-matches="underscore,discard symbol,pattern wildcard,placeholder pattern">
                      <div class="card-header">
                        <h2 class="card-title">Wildcard</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Wildcard card" title="Link to card" href="#wildcard"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="wildcard-content" aria-label="Expand or collapse Wildcard card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A symbol (<code>_</code>) used instead of a variable name to
                          indicate an unused value in patterns and other contexts.
                        </p>
                      </div>
                      <div id="wildcard-content" class="card-content expandable-content">
                        <p>
                          A wildcard is the underscore character (<code>_</code>) used to
                          ignore values or indicate that a value is intentionally unused.
                          It's often used in patterns, destructuring, and switch expressions to
                          match any value without binding it to a name.
                        </p>
                        <p>
                          Wildcards help make the code more intentional by clearly marking
                          values that aren't needed in a specific context.
                        </p>
                        <p>Example:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(89, 97, 110, 1.0); --opal-dark-color: rgba(139, 149, 167, 1.0);">// Ignoring the value in a for-each loop.</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">var</span><span> </span><span>names</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">=</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">[</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Alice</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Bob</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Charlie</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">]</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">for</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">var</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">_</span><span> </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">in</span><span> </span><span>names</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Someone is here!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"// Ignoring the value in a for-each loop.\nvar names = ['Alice', 'Bob', 'Charlie'];\nfor (var _ in names) {\n  print('Someone is here!');\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>The wildcard pattern is particularly useful when:</p>
                        <ul>
                          <li>You only need certain parts of a destructured value.</li>
                          <li>You want to explicitly show some values are being ignored.</li>
                          <li>You need a catch-all case in pattern matching.</li>
                        </ul>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="/language/variables#wildcard-variables"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Wildcard variables</a>
                            </li>
                            <li>
                              <a class="filled-button" href="/language/pattern-types#wildcard"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Wildcard patterns</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                    <div id="zone" class="card outlined-card expandable-card glossary-card" data-partial-matches="zone language asynchronous runtime" data-full-matches="zones,dart zones,execution zone,runzoned">
                      <div class="card-header">
                        <h2 class="card-title">Zone</h2>
                        <div class="card-header-buttons">
                          <a class="text-button icon-button share-button" aria-label="Link to Zone card" title="Link to card" href="#zone"><span class="material-symbols" aria-hidden="true" translate="no">tag</span></a>
                          <button class="text-button icon-button expand-button" aria-expanded="true" aria-controls="zone-content" aria-label="Expand or collapse Zone card" title="Expand or collapse card"><span class="material-symbols" aria-hidden="true" translate="no">keyboard_arrow_up</span></button>
                        </div>
                      </div>
                      <div class="initial-content">
                        <p>
                          A mechanism to customize the behavior of asynchronous code
                          without modifying the asynchronous code itself.
                        </p>
                      </div>
                      <div id="zone-content" class="card-content expandable-content">
                        <p>
                          A zone is an execution context that allows you to run code with
                          customized behavior for asynchronous events such as timers,
                          microtasks, and uncaught errors.
                        </p>
                        <p>Zones are useful for:</p>
                        <ul>
                          <li>Logging</li>
                          <li>Error tracking</li>
                          <li>
                            Maintaining request-specific state across async gaps
                            (for example, in server apps)
                          </li>
                          <li>Testing and debugging async behavior</li>
                        </ul>
                        <p>
                          Zones provide a way to track and influence asynchronous execution
                          without requiring the asynchronous code to be aware of it.
                        </p>
                        <p>
                          You can create a new zone using <code>runZoned</code> (or <code>runZonedGuarded</code>)
                          and override zone-specific behavior such as error handling and timers.
                          Even <code>print</code> can be overridden, although it's not asynchronous and just
                          included for convenience.
                        </p>
                        <p>Example:</p>
                        <div class="code-block-wrapper language-dart">
                          <div class="code-block-body">
                            <span class="code-block-language" title="Language dart">dart</span>
                            <pre class="opal" tabindex="0"><code><span class="line"><span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">import</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">dart:async</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span style="user-select: none; -webkit-user-select: none">​</span>
</span><span class="line"><span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">void</span><span> </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">main</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">runZonedGuarded</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Future</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">.</span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">delayed</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(20, 107, 205, 1.0); --opal-dark-color: rgba(107, 177, 255, 1.0);">Duration</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>seconds</span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">:</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">1</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>      </span><span style="color: rgba(189, 35, 20, 1.0); --opal-dark-color: rgba(255, 137, 126, 1.0);">throw</span><span> </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Zone caught this error!</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span>error</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">,</span><span> </span><span>stackTrace</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span> </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">{</span></span>
</span><span class="line"><span><span>    </span><span style="color: rgba(98, 0, 238, 1.0); --opal-dark-color: rgba(181, 129, 255, 1.0);">print</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">(</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">Caught error: </span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">$error</span><span style="color: rgba(12, 112, 100, 1.0); --opal-dark-color: rgba(28, 218, 197, 1.0);">'</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span>  </span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">)</span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">;</span></span>
</span><span class="line"><span><span style="color: rgba(25, 28, 34, 1.0); --opal-dark-color: rgba(220, 220, 220, 1.0);">}</span></span>
</span></code></pre>
                            <!--@src/components/common/client/copy_button data={"toCopy":"import 'dart:async';\n\nvoid main() {\n  runZonedGuarded(() {\n    Future.delayed(Duration(seconds: 1), () {\n      throw 'Zone caught this error!';\n    });\n  }, (error, stackTrace) {\n    print('Caught error: $error');\n  });\n}","buttonText":null,"classes":[],"title":"Copy code to clipboard"}-->
                            <button class="text-button icon-button copy-button hidden" title="Copy code to clipboard"><span class="material-symbols" aria-hidden="true" translate="no">content_copy</span></button>
                            <!--/@src/components/common/client/copy_button-->
                          </div>
                        </div>
                        <p>
                          In the preceding example, the uncaught error inside the async callback
                          is intercepted by the custom zone.
                        </p>
                        <div>
                          <h3 class="no_toc details-header">Related docs and resources</h3>
                          <ul class="resources-list">
                            <li>
                              <a class="filled-button" href="https://api.dart.dev/stable/dart-async/Zone-class.html"><span class="material-symbols" aria-hidden="true" translate="no">description</span>Zones API documentation</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://dart.dev/articles/libraries/zones"><span class="material-symbols" aria-hidden="true" translate="no">article</span>Error handling with zones</a>
                            </li>
                            <li>
                              <a class="filled-button" href="https://api.dart.dev/stable/dart-async/runZonedGuarded.html"><span class="material-symbols" aria-hidden="true" translate="no">description</span>runZonedGuarded</a>
                            </li>
                          </ul>
                        </div>
                      </div>
                    </div>
                  </div>
                </section>
                <div id="trailing-content" data-nosnippet="true">
                  <!--@src/components/common/client/feedback data={"issueUrl":"https://github.com/dart-lang/site-www/issues/new?template=1_page_issue.yml&amp;page-url=https://dart.dev/resources/glossary"}-->
                  <div id="page-feedback">
                    <div class="feedback">
                      <div>Was this page's content helpful?</div>
                      <div class="feedback-buttons">
                        <button class="text-button icon-button" title="Yes, this page was helpful."><span class="material-symbols" aria-hidden="true" translate="no">thumb_up</span></button>
                        <button class="text-button icon-button" title="No, this page was not helpful or had an issue"><span class="material-symbols" aria-hidden="true" translate="no">thumb_down</span></button>
                      </div>
                    </div>
                  </div>
                  <!--/@src/components/common/client/feedback-->
                  <p id="page-github-links">
                    <span>Unless stated otherwise, the documentation on this site reflects Dart 3.9.2. </span><a title="Report an issue with this page" target="_blank" rel="noopener" href="https://github.com/dart-lang/site-www/issues/new?template=1_page_issue.yml&amp;page-url=https://dart.dev/resources/glossary">Report an issue</a>.
                  </p>
                </div>
              </div>
            </article>
          </div>
        </main>
      </div>
      <footer id="page-footer" data-nosnippet="true">
        <div class="footer-section footer-main">
          <a class="brand" title="Dart" href="/"><img alt="Dart" width="164" src="/assets/img/logo/logo-white-text.svg"/></a>
          <div class="footer-social-links">
            <a rel="noopener" title="Dart's Medium publication" href="https://blog.dart.dev" target="_blank"><svg><use href="/assets/img/social/medium.svg#medium"></use></svg></a>
            <a rel="noopener" title="Dart's GitHub organization" href="https://github.com/dart-lang" target="_blank"><svg><use href="/assets/img/social/github.svg#github"></use></svg></a>
            <a rel="noopener" title="Dart's Bluesky (Twitter) profile" href="https://bsky.app/profile/dart.dev" target="_blank"><svg><use href="/assets/img/social/bluesky.svg#bluesky"></use></svg></a>
            <a rel="noopener" title="Dart's X (Twitter) profile" href="https://twitter.com/dart_lang" target="_blank"><svg><use href="/assets/img/social/x.svg#x"></use></svg></a>
          </div>
        </div>
        <div class="footer-section footer-tray">
          <div class="footer-licenses">
            Except as otherwise noted, this site is licensed under a 
            <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License,</a>
             and code samples are licensed under the 
            <a href="https://opensource.org/licenses/BSD-3-Clause">3-Clause BSD License.</a>
          </div>
          <div class="footer-utility-links">
            <ul>
              <li><a title="Terms of use" href="/terms">Terms</a></li>
              <li>
                <a rel="noopener" title="Privacy policy" href="https://policies.google.com/privacy" target="_blank">Privacy</a>
              </li>
              <li><a title="Security philosophy and practices" href="/security">Security</a></li>
            </ul>
            <div class="footer-technology">
              <a class="jaspr-badge-link" rel="noopener" title="This site is built with the Jaspr web framework for Dart." href="https://jaspr.site" target="_blank">
                <span><svg fill="none" viewBox="0 0 106 40" width="106px" height="40px"><rect rx="10" width="106" height="40" fill="#F5F5F5"></rect><path stroke-linejoin="round" d="M14.8115 26.0483C14.8115 26.0483 16.5768 27.9534 18.269 29.3852L21.4834 25.4226L22.5262 26.0483C23.9862 23.5455 22.3041 22.096 22.3041 22.096C24.1264 21.8356 23.7359 19.1022 23.7359 19.1022C22.8248 18.0608 22.6946 17.0195 22.8248 16.3687C22.9454 15.8288 22.754 15.2687 22.5644 14.9368L23.7359 13.6352L24.6139 13.7432C24.6139 11.6576 21.2503 10.6148 20.8598 10.6148C20.4693 10.6148 19.4404 11.4224 19.1801 12.3335L16.0561 12.5939C15.6458 8.11202 9.46732 13.0672 9.59749 14.3689L10.6403 13.9517L12.021 15.848C9.93835 17.41 9.59748 20.8342 9.59748 20.8342L11.3702 20.534C10.459 22.3563 10.7193 24.4389 10.7193 24.4389L12.3088 23.7541C12.439 25.4463 13.7687 27.2996 13.7687 27.2996L14.8115 26.0483Z" stroke="#0E1117" stroke-width="1.25"/><path stroke-linejoin="round" d="M16.0558 12.5941C15.4049 12.5941 15.0197 13.1178 13.9769 14.3691C12.9341 15.6205 13.4524 15.4578 11.6301 16.1086" stroke="#0E1117" stroke-width="1.25"/><path stroke-linejoin="round" d="M19.1799 12.3338C20.2213 12.5941 21.6531 13.3751 22.5642 14.9371" stroke="#0E1117" stroke-width="1.25"/><path stroke-linejoin="round" d="M11.3701 20.5339C11.3701 20.5339 12.1511 19.1021 13.8433 18.3211C12.0209 19.1021 11.3701 20.5339 11.3701 20.5339Z" stroke="#0E1117" stroke-width="1.25"/><path d="M21.5648 18.9821C21.5648 18.9821 20.0028 18.7218 20.2632 19.8933C20.5813 21.3251 22.7363 20.6743 22.6061 19.7631C22.6061 18.9821 21.5648 18.9821 21.5648 18.9821Z" fill="#0E1117"/><path stroke-linejoin="round" d="M22.4341 22.0961C21.2626 22.0961 18.9826 22.2943 17.7312 21.46C19.1891 22.7114 23.3603 21.0429 22.9432 24.797C23.3603 23.1285 22.5281 22.5028 22.4341 22.0961Z" stroke="#0E1117" stroke-width="1.25"/><path d="M48.6833 14.4545H51.7231V24.5966C51.7231 25.5341 51.5124 26.3485 51.091 27.0398C50.6743 27.7311 50.0943 28.2637 49.3509 28.6378C48.6075 29.0118 47.7434 29.1989 46.7586 29.1989C45.8826 29.1989 45.0872 29.045 44.3722 28.7372C43.662 28.4247 43.0985 27.9512 42.6819 27.3168C42.2652 26.6776 42.0592 25.875 42.064 24.9091H45.125C45.1345 25.2926 45.2126 25.6217 45.3594 25.8963C45.5109 26.1662 45.7169 26.3745 45.9773 26.5213C46.2425 26.6634 46.555 26.7344 46.9148 26.7344C47.2936 26.7344 47.6132 26.6539 47.8736 26.4929C48.1388 26.3272 48.34 26.0857 48.4773 25.7685C48.6146 25.4512 48.6833 25.0606 48.6833 24.5966V14.4545ZM57.3196 29.206C56.6236 29.206 56.0034 29.0852 55.4589 28.8438C54.9143 28.5975 54.4835 28.2353 54.1662 27.7571C53.8537 27.2741 53.6975 26.6728 53.6975 25.9531C53.6975 25.3471 53.8088 24.8381 54.0313 24.4261C54.2538 24.0142 54.5569 23.6828 54.9404 23.4318C55.3239 23.1809 55.7595 22.9915 56.2472 22.8636C56.7396 22.7358 57.2557 22.6458 57.7955 22.5938C58.43 22.5275 58.9413 22.4659 59.3296 22.4091C59.7178 22.3475 59.9996 22.2576 60.1748 22.1392C60.35 22.0208 60.4375 21.8456 60.4375 21.6136V21.571C60.4375 21.1212 60.2955 20.7732 60.0114 20.527C59.7321 20.2808 59.3343 20.1577 58.8182 20.1577C58.2737 20.1577 57.8405 20.2784 57.5185 20.5199C57.1965 20.7566 56.9835 21.0549 56.8793 21.4148L54.081 21.1875C54.2231 20.5246 54.5024 19.9517 54.9191 19.4688C55.3357 18.9811 55.8732 18.607 56.5313 18.3466C57.1942 18.0814 57.9612 17.9489 58.8324 17.9489C59.4385 17.9489 60.0185 18.0199 60.5725 18.1619C61.1312 18.304 61.626 18.5241 62.0569 18.8224C62.4925 19.1207 62.8357 19.5043 63.0867 19.973C63.3376 20.437 63.4631 20.9934 63.4631 21.642V29H60.5938V27.4872H60.5086C60.3334 27.8281 60.099 28.1288 59.8054 28.3892C59.5119 28.6449 59.1591 28.8461 58.7472 28.9929C58.3353 29.1349 57.8594 29.206 57.3196 29.206ZM58.1861 27.1179C58.6312 27.1179 59.0242 27.0303 59.3651 26.8551C59.706 26.6752 59.9735 26.4337 60.1677 26.1307C60.3618 25.8277 60.4589 25.4844 60.4589 25.1009V23.9432C60.3642 24.0047 60.2339 24.0616 60.0682 24.1136C59.9072 24.161 59.725 24.206 59.5214 24.2486C59.3178 24.2865 59.1142 24.322 58.9106 24.3551C58.707 24.3835 58.5223 24.4096 58.3566 24.4332C58.0015 24.4853 57.6913 24.5682 57.4262 24.6818C57.161 24.7955 56.9551 24.9493 56.8083 25.1435C56.6615 25.3329 56.5881 25.5696 56.5881 25.8537C56.5881 26.2656 56.7373 26.5805 57.0356 26.7983C57.3386 27.0114 57.7221 27.1179 58.1861 27.1179ZM74.8871 21.2017L72.1172 21.3722C72.0699 21.1354 71.9681 20.9223 71.8118 20.733C71.6556 20.5388 71.4496 20.3849 71.1939 20.2713C70.943 20.1529 70.6423 20.0938 70.2919 20.0938C69.8232 20.0938 69.4278 20.1932 69.1059 20.392C68.7839 20.5862 68.6229 20.8466 68.6229 21.1733C68.6229 21.4337 68.7271 21.6539 68.9354 21.8338C69.1437 22.0137 69.5012 22.1581 70.0079 22.267L71.9823 22.6648C73.0429 22.8826 73.8336 23.233 74.3544 23.7159C74.8753 24.1989 75.1357 24.8333 75.1357 25.6193C75.1357 26.3343 74.925 26.9616 74.5036 27.5014C74.0869 28.0412 73.514 28.4626 72.7848 28.7656C72.0604 29.0639 71.2247 29.2131 70.2777 29.2131C68.8336 29.2131 67.683 28.9124 66.826 28.3111C65.9738 27.705 65.4742 26.8812 65.3275 25.8395L68.3033 25.6832C68.3933 26.1236 68.6111 26.4598 68.9567 26.6918C69.3024 26.919 69.7451 27.0327 70.2848 27.0327C70.8151 27.0327 71.2413 26.9309 71.5633 26.7273C71.89 26.5189 72.0557 26.2514 72.0604 25.9247C72.0557 25.6501 71.9397 25.4252 71.7124 25.25C71.4851 25.0701 71.1348 24.9328 70.6613 24.8381L68.7721 24.4616C67.7067 24.2486 66.9136 23.8793 66.3928 23.3537C65.8767 22.8281 65.6187 22.1581 65.6187 21.3438C65.6187 20.643 65.808 20.0393 66.1868 19.5327C66.5704 19.026 67.1078 18.6354 67.7991 18.3608C68.4951 18.0862 69.3095 17.9489 70.2422 17.9489C71.6201 17.9489 72.7044 18.2401 73.4951 18.8224C74.2905 19.4048 74.7545 20.1979 74.8871 21.2017ZM77.0409 33.0909V18.0909H80.0238V19.9233H80.1588C80.2914 19.6297 80.4831 19.3314 80.7341 19.0284C80.9897 18.7206 81.3212 18.465 81.7284 18.2614C82.1403 18.053 82.6517 17.9489 83.2625 17.9489C84.0579 17.9489 84.7918 18.1572 85.4642 18.5739C86.1365 18.9858 86.6739 19.6084 87.0764 20.4418C87.4789 21.2704 87.6801 22.3097 87.6801 23.5597C87.6801 24.7765 87.4836 25.804 87.0906 26.642C86.7023 27.4754 86.172 28.1075 85.4997 28.5384C84.8321 28.9645 84.084 29.1776 83.2554 29.1776C82.6682 29.1776 82.1687 29.0805 81.7568 28.8864C81.3496 28.6922 81.0158 28.4484 80.7554 28.1548C80.495 27.8565 80.2961 27.5559 80.1588 27.2528H80.0665V33.0909H77.0409ZM80.0025 23.5455C80.0025 24.1941 80.0925 24.7599 80.2724 25.2429C80.4523 25.7259 80.7128 26.1023 81.0537 26.3722C81.3946 26.6373 81.8089 26.7699 82.2966 26.7699C82.789 26.7699 83.2057 26.6349 83.5466 26.3651C83.8875 26.0904 84.1455 25.7116 84.3207 25.2287C84.5006 24.741 84.5906 24.1799 84.5906 23.5455C84.5906 22.9157 84.503 22.3617 84.3278 21.8835C84.1526 21.4053 83.8946 21.0312 83.5537 20.7614C83.2128 20.4915 82.7937 20.3565 82.2966 20.3565C81.8041 20.3565 81.3875 20.4867 81.0466 20.7472C80.7104 21.0076 80.4523 21.3769 80.2724 21.8551C80.0925 22.3333 80.0025 22.8968 80.0025 23.5455ZM89.6971 29V18.0909H92.6304V19.9943H92.744C92.9429 19.3172 93.2767 18.8059 93.7454 18.4602C94.2142 18.1098 94.754 17.9347 95.3647 17.9347C95.5163 17.9347 95.6796 17.9441 95.8548 17.9631C96.03 17.982 96.1839 18.008 96.3165 18.0412V20.7259C96.1744 20.6832 95.9779 20.6454 95.727 20.6122C95.476 20.5791 95.2464 20.5625 95.038 20.5625C94.593 20.5625 94.1952 20.6596 93.8449 20.8537C93.4992 21.0431 93.2246 21.3082 93.021 21.6491C92.8221 21.9901 92.7227 22.383 92.7227 22.8281V29H89.6971Z" fill="#0E1117"/><path d="M56.9197 14V7.45455H59.3167C59.7812 7.45455 60.1658 7.53125 60.4705 7.68466C60.7752 7.83594 61.0032 8.04155 61.1545 8.30149C61.3057 8.5593 61.3814 8.85014 61.3814 9.17401C61.3814 9.44673 61.3313 9.67685 61.2312 9.86435C61.131 10.0497 60.9968 10.1989 60.8285 10.3118C60.6623 10.4226 60.479 10.5036 60.2787 10.5547V10.6186C60.4961 10.6293 60.7081 10.6996 60.9147 10.8295C61.1236 10.9574 61.2961 11.1396 61.4325 11.3761C61.5689 11.6126 61.637 11.9002 61.637 12.239C61.637 12.5735 61.5582 12.8739 61.4005 13.1403C61.245 13.4045 61.0042 13.6143 60.6782 13.7699C60.3522 13.9233 59.9357 14 59.4286 14H56.9197ZM57.9073 13.1531H59.3327C59.8057 13.1531 60.1445 13.0614 60.3491 12.8782C60.5536 12.695 60.6559 12.4659 60.6559 12.1911C60.6559 11.9844 60.6037 11.7947 60.4993 11.6222C60.3949 11.4496 60.2457 11.3121 60.0518 11.2099C59.8601 11.1076 59.6321 11.0565 59.3679 11.0565H57.9073V13.1531ZM57.9073 10.2862H59.2304C59.452 10.2862 59.6513 10.2436 59.8281 10.1584C60.0071 10.0732 60.1488 9.95384 60.2532 9.80043C60.3597 9.64489 60.413 9.46165 60.413 9.25071C60.413 8.98011 60.3182 8.7532 60.1285 8.56996C59.9389 8.38672 59.6481 8.2951 59.256 8.2951H57.9073V10.2862ZM65.8414 11.9641V9.09091H66.8002V14H65.8606V13.1499H65.8095C65.6965 13.4119 65.5154 13.6303 65.2661 13.805C65.019 13.9776 64.7111 14.0639 64.3425 14.0639C64.0271 14.0639 63.748 13.9947 63.5051 13.8562C63.2644 13.7156 63.0747 13.5078 62.9362 13.233C62.7999 12.9581 62.7317 12.6183 62.7317 12.2134V9.09091H63.6873V12.0984C63.6873 12.4329 63.78 12.6992 63.9654 12.8974C64.1507 13.0955 64.3915 13.1946 64.6877 13.1946C64.8666 13.1946 65.0445 13.1499 65.2214 13.0604C65.4004 12.9709 65.5484 12.8356 65.6656 12.6545C65.785 12.4734 65.8435 12.2433 65.8414 11.9641ZM68.0842 14V9.09091H69.0398V14H68.0842ZM68.5668 8.33345C68.4006 8.33345 68.2579 8.27805 68.1386 8.16726C68.0214 8.05433 67.9628 7.9201 67.9628 7.76456C67.9628 7.60689 68.0214 7.47266 68.1386 7.36186C68.2579 7.24893 68.4006 7.19247 68.5668 7.19247C68.733 7.19247 68.8747 7.24893 68.9919 7.36186C69.1112 7.47266 69.1709 7.60689 69.1709 7.76456C69.1709 7.9201 69.1112 8.05433 68.9919 8.16726C68.8747 8.27805 68.733 8.33345 68.5668 8.33345ZM71.281 7.45455V14H70.3254V7.45455H71.281ZM74.8582 9.09091V9.85795H72.1767V9.09091H74.8582ZM72.8958 7.91477H73.8514V12.5586C73.8514 12.744 73.8791 12.8835 73.9345 12.9773C73.9899 13.0689 74.0613 13.1317 74.1487 13.1658C74.2382 13.1978 74.3351 13.2138 74.4395 13.2138C74.5162 13.2138 74.5833 13.2085 74.6409 13.1978C74.6984 13.1871 74.7431 13.1786 74.7751 13.1722L74.9477 13.9616C74.8923 13.983 74.8135 14.0043 74.7112 14.0256C74.6089 14.049 74.4811 14.0618 74.3277 14.0639C74.0762 14.0682 73.8419 14.0234 73.6245 13.9297C73.4072 13.8359 73.2314 13.6911 73.0972 13.495C72.963 13.299 72.8958 13.0529 72.8958 12.7567V7.91477ZM79.3614 14L77.9168 9.09091H78.9044L79.8664 12.696H79.9143L80.8795 9.09091H81.8671L82.8259 12.68H82.8738L83.8294 9.09091H84.817L83.3756 14H82.4008L81.4037 10.4556H81.3301L80.333 14H79.3614ZM85.7239 14V9.09091H86.6795V14H85.7239ZM86.2065 8.33345C86.0403 8.33345 85.8975 8.27805 85.7782 8.16726C85.661 8.05433 85.6024 7.9201 85.6024 7.76456C85.6024 7.60689 85.661 7.47266 85.7782 7.36186C85.8975 7.24893 86.0403 7.19247 86.2065 7.19247C86.3727 7.19247 86.5144 7.24893 86.6315 7.36186C86.7509 7.47266 86.8105 7.60689 86.8105 7.76456C86.8105 7.9201 86.7509 8.05433 86.6315 8.16726C86.5144 8.27805 86.3727 8.33345 86.2065 8.33345ZM90.2566 9.09091V9.85795H87.5752V9.09091H90.2566ZM88.2943 7.91477H89.2499V12.5586C89.2499 12.744 89.2776 12.8835 89.333 12.9773C89.3884 13.0689 89.4598 13.1317 89.5471 13.1658C89.6366 13.1978 89.7336 13.2138 89.838 13.2138C89.9147 13.2138 89.9818 13.2085 90.0393 13.1978C90.0968 13.1871 90.1416 13.1786 90.1735 13.1722L90.3461 13.9616C90.2907 13.983 90.2119 14.0043 90.1096 14.0256C90.0073 14.049 89.8795 14.0618 89.7261 14.0639C89.4747 14.0682 89.2403 14.0234 89.023 13.9297C88.8056 13.8359 88.6299 13.6911 88.4956 13.495C88.3614 13.299 88.2943 13.0529 88.2943 12.7567V7.91477ZM92.3748 11.0852V14H91.4192V7.45455H92.362V9.88991H92.4227C92.5378 9.62571 92.7136 9.41584 92.9501 9.2603C93.1866 9.10476 93.4955 9.02699 93.8769 9.02699C94.2136 9.02699 94.5076 9.09624 94.759 9.23473C95.0126 9.37322 95.2086 9.5799 95.3471 9.85476C95.4877 10.1275 95.558 10.4684 95.558 10.8775V14H94.6024V10.9925C94.6024 10.6325 94.5097 10.3533 94.3244 10.1552C94.139 9.9549 93.8812 9.85476 93.5509 9.85476C93.3251 9.85476 93.1227 9.9027 92.9437 9.99858C92.7668 10.0945 92.6273 10.2351 92.525 10.4205C92.4249 10.6037 92.3748 10.8253 92.3748 11.0852Z" fill="#0E1117"/></svg></span>
                <span><svg fill="none" viewBox="0 0 106 40" width="106px" height="40px"><rect rx="10" width="106" height="40" fill="#F5F5F5"></rect><path stroke-linejoin="round" d="M14.8115 26.0483C14.8115 26.0483 16.5768 27.9534 18.269 29.3852L21.4834 25.4226L22.5262 26.0483C23.9862 23.5455 22.3041 22.096 22.3041 22.096C24.1264 21.8356 23.7359 19.1022 23.7359 19.1022C22.8248 18.0608 22.6946 17.0195 22.8248 16.3687C22.9454 15.8288 22.754 15.2687 22.5644 14.9368L23.7359 13.6352L24.6139 13.7432C24.6139 11.6576 21.2503 10.6148 20.8598 10.6148C20.4693 10.6148 19.4404 11.4224 19.1801 12.3335L16.0561 12.5939C15.6458 8.11202 9.46732 13.0672 9.59749 14.3689L10.6403 13.9517L12.021 15.848C9.93835 17.41 9.59748 20.8342 9.59748 20.8342L11.3702 20.534C10.459 22.3563 10.7193 24.4389 10.7193 24.4389L12.3088 23.7541C12.439 25.4463 13.7687 27.2996 13.7687 27.2996L14.8115 26.0483Z" stroke="#0066B4" stroke-width="1.25"/><path stroke-linejoin="round" d="M16.0558 12.5941C15.4049 12.5941 15.0197 13.1178 13.9769 14.3691C12.9341 15.6205 13.4524 15.4578 11.6301 16.1086" stroke="#0066B4" stroke-width="1.25"/><path stroke-linejoin="round" d="M19.1799 12.3338C20.2213 12.5941 21.6531 13.3751 22.5642 14.9371" stroke="#0066B4" stroke-width="1.25"/><path stroke-linejoin="round" d="M11.3701 20.5339C11.3701 20.5339 12.1511 19.1021 13.8433 18.3211C12.0209 19.1021 11.3701 20.5339 11.3701 20.5339Z" stroke="#0066B4" stroke-width="1.25"/><path d="M21.5648 18.9821C21.5648 18.9821 20.0028 18.7218 20.2632 19.8933C20.5813 21.3251 22.7363 20.6743 22.6061 19.7631C22.6061 18.9821 21.5648 18.9821 21.5648 18.9821Z" fill="#0066B4"/><path stroke-linejoin="round" d="M22.4341 22.0961C21.2626 22.0961 18.9826 22.2943 17.7312 21.46C19.1891 22.7114 23.3603 21.0429 22.9432 24.797C23.3603 23.1285 22.5281 22.5028 22.4341 22.0961Z" stroke="#0066B4" stroke-width="1.25"/><path d="M48.6833 14.4545H51.7231V24.5966C51.7231 25.5341 51.5124 26.3485 51.091 27.0398C50.6743 27.7311 50.0943 28.2637 49.3509 28.6378C48.6075 29.0118 47.7434 29.1989 46.7586 29.1989C45.8826 29.1989 45.0872 29.045 44.3722 28.7372C43.662 28.4247 43.0985 27.9512 42.6819 27.3168C42.2652 26.6776 42.0592 25.875 42.064 24.9091H45.125C45.1345 25.2926 45.2126 25.6217 45.3594 25.8963C45.5109 26.1662 45.7169 26.3745 45.9773 26.5213C46.2425 26.6634 46.555 26.7344 46.9148 26.7344C47.2936 26.7344 47.6132 26.6539 47.8736 26.4929C48.1388 26.3272 48.34 26.0857 48.4773 25.7685C48.6146 25.4512 48.6833 25.0606 48.6833 24.5966V14.4545ZM57.3196 29.206C56.6236 29.206 56.0034 29.0852 55.4589 28.8438C54.9143 28.5975 54.4835 28.2353 54.1662 27.7571C53.8537 27.2741 53.6975 26.6728 53.6975 25.9531C53.6975 25.3471 53.8088 24.8381 54.0313 24.4261C54.2538 24.0142 54.5569 23.6828 54.9404 23.4318C55.3239 23.1809 55.7595 22.9915 56.2472 22.8636C56.7396 22.7358 57.2557 22.6458 57.7955 22.5938C58.43 22.5275 58.9413 22.4659 59.3296 22.4091C59.7178 22.3475 59.9996 22.2576 60.1748 22.1392C60.35 22.0208 60.4375 21.8456 60.4375 21.6136V21.571C60.4375 21.1212 60.2955 20.7732 60.0114 20.527C59.7321 20.2808 59.3343 20.1577 58.8182 20.1577C58.2737 20.1577 57.8405 20.2784 57.5185 20.5199C57.1965 20.7566 56.9835 21.0549 56.8793 21.4148L54.081 21.1875C54.2231 20.5246 54.5024 19.9517 54.9191 19.4688C55.3357 18.9811 55.8732 18.607 56.5313 18.3466C57.1942 18.0814 57.9612 17.9489 58.8324 17.9489C59.4385 17.9489 60.0185 18.0199 60.5725 18.1619C61.1312 18.304 61.626 18.5241 62.0569 18.8224C62.4925 19.1207 62.8357 19.5043 63.0867 19.973C63.3376 20.437 63.4631 20.9934 63.4631 21.642V29H60.5938V27.4872H60.5086C60.3334 27.8281 60.099 28.1288 59.8054 28.3892C59.5119 28.6449 59.1591 28.8461 58.7472 28.9929C58.3353 29.1349 57.8594 29.206 57.3196 29.206ZM58.1861 27.1179C58.6312 27.1179 59.0242 27.0303 59.3651 26.8551C59.706 26.6752 59.9735 26.4337 60.1677 26.1307C60.3618 25.8277 60.4589 25.4844 60.4589 25.1009V23.9432C60.3642 24.0047 60.2339 24.0616 60.0682 24.1136C59.9072 24.161 59.725 24.206 59.5214 24.2486C59.3178 24.2865 59.1142 24.322 58.9106 24.3551C58.707 24.3835 58.5223 24.4096 58.3566 24.4332C58.0015 24.4853 57.6913 24.5682 57.4262 24.6818C57.161 24.7955 56.9551 24.9493 56.8083 25.1435C56.6615 25.3329 56.5881 25.5696 56.5881 25.8537C56.5881 26.2656 56.7373 26.5805 57.0356 26.7983C57.3386 27.0114 57.7221 27.1179 58.1861 27.1179ZM74.8871 21.2017L72.1172 21.3722C72.0699 21.1354 71.9681 20.9223 71.8118 20.733C71.6556 20.5388 71.4496 20.3849 71.1939 20.2713C70.943 20.1529 70.6423 20.0938 70.2919 20.0938C69.8232 20.0938 69.4278 20.1932 69.1059 20.392C68.7839 20.5862 68.6229 20.8466 68.6229 21.1733C68.6229 21.4337 68.7271 21.6539 68.9354 21.8338C69.1437 22.0137 69.5012 22.1581 70.0079 22.267L71.9823 22.6648C73.0429 22.8826 73.8336 23.233 74.3544 23.7159C74.8753 24.1989 75.1357 24.8333 75.1357 25.6193C75.1357 26.3343 74.925 26.9616 74.5036 27.5014C74.0869 28.0412 73.514 28.4626 72.7848 28.7656C72.0604 29.0639 71.2247 29.2131 70.2777 29.2131C68.8336 29.2131 67.683 28.9124 66.826 28.3111C65.9738 27.705 65.4742 26.8812 65.3275 25.8395L68.3033 25.6832C68.3933 26.1236 68.6111 26.4598 68.9567 26.6918C69.3024 26.919 69.7451 27.0327 70.2848 27.0327C70.8151 27.0327 71.2413 26.9309 71.5633 26.7273C71.89 26.5189 72.0557 26.2514 72.0604 25.9247C72.0557 25.6501 71.9397 25.4252 71.7124 25.25C71.4851 25.0701 71.1348 24.9328 70.6613 24.8381L68.7721 24.4616C67.7067 24.2486 66.9136 23.8793 66.3928 23.3537C65.8767 22.8281 65.6187 22.1581 65.6187 21.3438C65.6187 20.643 65.808 20.0393 66.1868 19.5327C66.5704 19.026 67.1078 18.6354 67.7991 18.3608C68.4951 18.0862 69.3095 17.9489 70.2422 17.9489C71.6201 17.9489 72.7044 18.2401 73.4951 18.8224C74.2905 19.4048 74.7545 20.1979 74.8871 21.2017ZM77.0409 33.0909V18.0909H80.0238V19.9233H80.1588C80.2914 19.6297 80.4831 19.3314 80.7341 19.0284C80.9897 18.7206 81.3212 18.465 81.7284 18.2614C82.1403 18.053 82.6517 17.9489 83.2625 17.9489C84.0579 17.9489 84.7918 18.1572 85.4642 18.5739C86.1365 18.9858 86.6739 19.6084 87.0764 20.4418C87.4789 21.2704 87.6801 22.3097 87.6801 23.5597C87.6801 24.7765 87.4836 25.804 87.0906 26.642C86.7023 27.4754 86.172 28.1075 85.4997 28.5384C84.8321 28.9645 84.084 29.1776 83.2554 29.1776C82.6682 29.1776 82.1687 29.0805 81.7568 28.8864C81.3496 28.6922 81.0158 28.4484 80.7554 28.1548C80.495 27.8565 80.2961 27.5559 80.1588 27.2528H80.0665V33.0909H77.0409ZM80.0025 23.5455C80.0025 24.1941 80.0925 24.7599 80.2724 25.2429C80.4523 25.7259 80.7128 26.1023 81.0537 26.3722C81.3946 26.6373 81.8089 26.7699 82.2966 26.7699C82.789 26.7699 83.2057 26.6349 83.5466 26.3651C83.8875 26.0904 84.1455 25.7116 84.3207 25.2287C84.5006 24.741 84.5906 24.1799 84.5906 23.5455C84.5906 22.9157 84.503 22.3617 84.3278 21.8835C84.1526 21.4053 83.8946 21.0312 83.5537 20.7614C83.2128 20.4915 82.7937 20.3565 82.2966 20.3565C81.8041 20.3565 81.3875 20.4867 81.0466 20.7472C80.7104 21.0076 80.4523 21.3769 80.2724 21.8551C80.0925 22.3333 80.0025 22.8968 80.0025 23.5455ZM89.6971 29V18.0909H92.6304V19.9943H92.744C92.9429 19.3172 93.2767 18.8059 93.7454 18.4602C94.2142 18.1098 94.754 17.9347 95.3647 17.9347C95.5163 17.9347 95.6796 17.9441 95.8548 17.9631C96.03 17.982 96.1839 18.008 96.3165 18.0412V20.7259C96.1744 20.6832 95.9779 20.6454 95.727 20.6122C95.476 20.5791 95.2464 20.5625 95.038 20.5625C94.593 20.5625 94.1952 20.6596 93.8449 20.8537C93.4992 21.0431 93.2246 21.3082 93.021 21.6491C92.8221 21.9901 92.7227 22.383 92.7227 22.8281V29H89.6971Z" fill="#0E1117"/><path d="M56.9197 14V7.45455H59.3167C59.7812 7.45455 60.1658 7.53125 60.4705 7.68466C60.7752 7.83594 61.0032 8.04155 61.1545 8.30149C61.3057 8.5593 61.3814 8.85014 61.3814 9.17401C61.3814 9.44673 61.3313 9.67685 61.2312 9.86435C61.131 10.0497 60.9968 10.1989 60.8285 10.3118C60.6623 10.4226 60.479 10.5036 60.2787 10.5547V10.6186C60.4961 10.6293 60.7081 10.6996 60.9147 10.8295C61.1236 10.9574 61.2961 11.1396 61.4325 11.3761C61.5689 11.6126 61.637 11.9002 61.637 12.239C61.637 12.5735 61.5582 12.8739 61.4005 13.1403C61.245 13.4045 61.0042 13.6143 60.6782 13.7699C60.3522 13.9233 59.9357 14 59.4286 14H56.9197ZM57.9073 13.1531H59.3327C59.8057 13.1531 60.1445 13.0614 60.3491 12.8782C60.5536 12.695 60.6559 12.4659 60.6559 12.1911C60.6559 11.9844 60.6037 11.7947 60.4993 11.6222C60.3949 11.4496 60.2457 11.3121 60.0518 11.2099C59.8601 11.1076 59.6321 11.0565 59.3679 11.0565H57.9073V13.1531ZM57.9073 10.2862H59.2304C59.452 10.2862 59.6513 10.2436 59.8281 10.1584C60.0071 10.0732 60.1488 9.95384 60.2532 9.80043C60.3597 9.64489 60.413 9.46165 60.413 9.25071C60.413 8.98011 60.3182 8.7532 60.1285 8.56996C59.9389 8.38672 59.6481 8.2951 59.256 8.2951H57.9073V10.2862ZM65.8414 11.9641V9.09091H66.8002V14H65.8606V13.1499H65.8095C65.6965 13.4119 65.5154 13.6303 65.2661 13.805C65.019 13.9776 64.7111 14.0639 64.3425 14.0639C64.0271 14.0639 63.748 13.9947 63.5051 13.8562C63.2644 13.7156 63.0747 13.5078 62.9362 13.233C62.7999 12.9581 62.7317 12.6183 62.7317 12.2134V9.09091H63.6873V12.0984C63.6873 12.4329 63.78 12.6992 63.9654 12.8974C64.1507 13.0955 64.3915 13.1946 64.6877 13.1946C64.8666 13.1946 65.0445 13.1499 65.2214 13.0604C65.4004 12.9709 65.5484 12.8356 65.6656 12.6545C65.785 12.4734 65.8435 12.2433 65.8414 11.9641ZM68.0842 14V9.09091H69.0398V14H68.0842ZM68.5668 8.33345C68.4006 8.33345 68.2579 8.27805 68.1386 8.16726C68.0214 8.05433 67.9628 7.9201 67.9628 7.76456C67.9628 7.60689 68.0214 7.47266 68.1386 7.36186C68.2579 7.24893 68.4006 7.19247 68.5668 7.19247C68.733 7.19247 68.8747 7.24893 68.9919 7.36186C69.1112 7.47266 69.1709 7.60689 69.1709 7.76456C69.1709 7.9201 69.1112 8.05433 68.9919 8.16726C68.8747 8.27805 68.733 8.33345 68.5668 8.33345ZM71.281 7.45455V14H70.3254V7.45455H71.281ZM74.8582 9.09091V9.85795H72.1767V9.09091H74.8582ZM72.8958 7.91477H73.8514V12.5586C73.8514 12.744 73.8791 12.8835 73.9345 12.9773C73.9899 13.0689 74.0613 13.1317 74.1487 13.1658C74.2382 13.1978 74.3351 13.2138 74.4395 13.2138C74.5162 13.2138 74.5833 13.2085 74.6409 13.1978C74.6984 13.1871 74.7431 13.1786 74.7751 13.1722L74.9477 13.9616C74.8923 13.983 74.8135 14.0043 74.7112 14.0256C74.6089 14.049 74.4811 14.0618 74.3277 14.0639C74.0762 14.0682 73.8419 14.0234 73.6245 13.9297C73.4072 13.8359 73.2314 13.6911 73.0972 13.495C72.963 13.299 72.8958 13.0529 72.8958 12.7567V7.91477ZM79.3614 14L77.9168 9.09091H78.9044L79.8664 12.696H79.9143L80.8795 9.09091H81.8671L82.8259 12.68H82.8738L83.8294 9.09091H84.817L83.3756 14H82.4008L81.4037 10.4556H81.3301L80.333 14H79.3614ZM85.7239 14V9.09091H86.6795V14H85.7239ZM86.2065 8.33345C86.0403 8.33345 85.8975 8.27805 85.7782 8.16726C85.661 8.05433 85.6024 7.9201 85.6024 7.76456C85.6024 7.60689 85.661 7.47266 85.7782 7.36186C85.8975 7.24893 86.0403 7.19247 86.2065 7.19247C86.3727 7.19247 86.5144 7.24893 86.6315 7.36186C86.7509 7.47266 86.8105 7.60689 86.8105 7.76456C86.8105 7.9201 86.7509 8.05433 86.6315 8.16726C86.5144 8.27805 86.3727 8.33345 86.2065 8.33345ZM90.2566 9.09091V9.85795H87.5752V9.09091H90.2566ZM88.2943 7.91477H89.2499V12.5586C89.2499 12.744 89.2776 12.8835 89.333 12.9773C89.3884 13.0689 89.4598 13.1317 89.5471 13.1658C89.6366 13.1978 89.7336 13.2138 89.838 13.2138C89.9147 13.2138 89.9818 13.2085 90.0393 13.1978C90.0968 13.1871 90.1416 13.1786 90.1735 13.1722L90.3461 13.9616C90.2907 13.983 90.2119 14.0043 90.1096 14.0256C90.0073 14.049 89.8795 14.0618 89.7261 14.0639C89.4747 14.0682 89.2403 14.0234 89.023 13.9297C88.8056 13.8359 88.6299 13.6911 88.4956 13.495C88.3614 13.299 88.2943 13.0529 88.2943 12.7567V7.91477ZM92.3748 11.0852V14H91.4192V7.45455H92.362V9.88991H92.4227C92.5378 9.62571 92.7136 9.41584 92.9501 9.2603C93.1866 9.10476 93.4955 9.02699 93.8769 9.02699C94.2136 9.02699 94.5076 9.09624 94.759 9.23473C95.0126 9.37322 95.2086 9.5799 95.3471 9.85476C95.4877 10.1275 95.558 10.4684 95.558 10.8775V14H94.6024V10.9925C94.6024 10.6325 94.5097 10.3533 94.3244 10.1552C94.139 9.9549 93.8812 9.85476 93.5509 9.85476C93.3251 9.85476 93.1227 9.9027 92.9437 9.99858C92.7668 10.0945 92.6273 10.2351 92.525 10.4205C92.4249 10.6037 92.3748 10.8253 92.3748 11.0852Z" fill="#0E1117"/></svg></span>
              </a>
            </div>
          </div>
        </div>
      </footer>
    </div>
    <script>
    const prefersDarkMode = window.matchMedia('(prefers-color-scheme: dark)');
    
    const storedTheme = window.localStorage.getItem('theme') ?? 'light-mode';
    if (storedTheme === 'auto-mode') {
      document.body.classList.add(
          'auto-mode',
          prefersDarkMode.matches ? 'dark-mode' : 'light-mode',
      );
    } else {
      document.body.classList.add(storedTheme);
    }
    </script>
          
    <!--@src/client/global_scripts-->
    <!--/@src/client/global_scripts-->
  </body>
</html>
