CINXE.COM

Dart - Medium

<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Dart - Medium</title><link rel="canonical" href="https://medium.com/dartlang"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/dartlang"><meta name="robots" content="index,follow"><meta name="title" content="Dart - Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Dart is an approachable, portable, and productive language for high-quality apps on any platform. Learn more at https://dart.dev."><meta name="keywords" content="MOBILE APP DEVELOPMENT, WEB DEVELOPMENT, DART, PROGRAMMING LANGUAGES, SOFTWARE DEVELOPMENT"><meta name="theme-color" content="#000000"><meta property="og:title" content="Dart – Medium"><meta property="twitter:title" content="Dart – Medium"><meta property="og:url" content="https://medium.com/dartlang"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*knHF_qpxdtS8h0Z8EeqowA.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Dart is an approachable, portable, and productive language for high-quality apps on any platform. Learn more at https://dart.dev."><meta name="twitter:description" content="Dart is an approachable, portable, and productive language for high-quality apps on any platform. Learn more at https://dart.dev."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*knHF_qpxdtS8h0Z8EeqowA.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@dartlang"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://dartlang"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://dartlang"><meta property="al:android:url" content="medium://dartlang"><meta property="al:web:url" content="https://medium.com/dartlang"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/dartlang" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/medium.com", "name": "Medium", "alternateName": "Medium is a community of readers and writers offering unique perspectives on ideas large and small."},{"@type": "Organization", "url": "https:\/\/medium.com\/dartlang", "name": "Dart"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.tWIMt8r3Nl52PPi9OfgcVw.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*knHF_qpxdtS8h0Z8EeqowA.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*knHF_qpxdtS8h0Z8EeqowA.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*knHF_qpxdtS8h0Z8EeqowA.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*knHF_qpxdtS8h0Z8EeqowA.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix u-textColorTransparentWhiteDarker u-tintBgColor u-tintSpectrum js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillWhite u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/dartlang%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--light button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fdartlang&amp;source=--------------------------nav_reg&amp;operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/dartlang" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--light button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fdartlang&amp;source=--------------------------nav_reg&amp;operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/dartlang" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-tintBgColor u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutMedium collectionHeader--alignmentLeft collectionHeader--withLogo collectionHeader--withoutBackground collectionHeader--colorBehaviorBold collectionHeader--withNavigation collectionHeader--editorLayoutTitleAndLogo is-modeView u-tintBgColor"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix u-tintSpectrum"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style="width: 92px; float: left; padding-right: 20px; margin-right: 0;"><a class="link u-baseColor--link" href="https://medium.com/dartlang" title="Go to Dart" aria-label="Go to Dart"><div class="u-relative u-marginAuto"><div style="padding-bottom: 100%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" src="https://cdn-images-1.medium.com/max/184/1*knHF_qpxdtS8h0Z8EeqowA@2x.png" data-image-id="1*knHF_qpxdtS8h0Z8EeqowA@2x.png" data-width="1080" data-height="1080" /></div></a></div><div class="collectionHeader-nameAndDescription"><a class="link link--noUnderline u-baseColor--link" href="https://medium.com/dartlang" title="Go to Dart" aria-label="Go to Dart"><h1 class="collectionHeader-name js-collectionName u-foreground u-baseColor--textDark u-paddingBottom4 u-lineHeightTightest u-contentSansBold u-fontSize40 u-xs-fontSize32">Dart</h1></a><h2 class="collectionHeader-description js-collectionDescription u-foreground u-baseColor--textNormal u-contentSansRegular u-fontSize24 u-xs-fontSize18">An approachable, portable, and productive language for high-quality apps on any platform</h2></div></div></div></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div><div class="collectionHeader-blockNav"><div class="u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto"><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY u-tintSpectrum"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/dartlang/tagged/announcements">Announcements</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/dartlang/archive">Archive</a></li><span class="u-borderLeft1 u-paddingLeft22 u-xs-paddingLeft12 u-baseColor--borderLight"></span><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 is-external"><a class="link link--darkenOnHover u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://dart.dev" rel="nofollow noopener" target="_blank">dart.dev</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search Dart"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search Dart" required="true" data-collection-id="23738d481ce8" /></label><a class="button button--light button--chromeless is-touchIconBlackPulse u-baseColor--buttonLight button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://twitter.com/dart_lang" title="Visit “Dart” on X" aria-label="Visit “Dart” on X" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M14.215 11.3l5.764-6.7h-1.366l-5.005 5.818L9.611 4.6H5l6.045 8.798L5 20.424h1.366l5.286-6.144 4.221 6.144h4.61L14.216 11.3zm-1.871 2.175l-.612-.876-4.874-6.97h2.098l3.933 5.625.613.876 5.112 7.312h-2.098l-4.172-5.966z" fill="#242424"/></svg></span></span></a><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/dartlang" data-action-source="pub_header----23738d481ce8----------------------follow_pub" data-collection-id="23738d481ce8"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight15 u-size8of12" data-source="collection_home---4------0-----------------------" data-post-id="bf864a1b195c" data-index="0"><div class="u-lineHeightBase postItem u-marginRight3"><a href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height350 u-width100pct u-floatLeft u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/2000/1*tdCaUfGrIk42FIuu2qs9Yw.gif&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Announcing Dart 3.7</span></a></div></div><div class="col u-xs-marginBottom10 u-paddingLeft9 u-paddingRight12 u-paddingTop0 u-sm-paddingTop20 u-paddingBottom25 u-size4of12 u-xs-size12of12 u-marginBottom30"><a class="" href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="bf864a1b195c"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp4 u-fontSize30 u-size12of12 u-xs-size12of12 u-xs-fontSize24">Announcing Dart 3.7</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@mbelanger_65682" data-action="show-user-card" data-action-value="ae996dbdd76e" data-action-type="hover" data-user-id="ae996dbdd76e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*dvfKkfTnezv7BhXgB51pGA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Marya Belanger"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@mbelanger_65682" data-action="show-user-card" data-action-value="ae996dbdd76e" data-action-type="hover" data-user-id="ae996dbdd76e" dir="auto">Marya Belanger</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2025-02-12T19:10:27.521Z">Feb 12</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------1-----------------------" data-post-id="06d3037d4f12" data-index="1"><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-marginBottom60"><a class="" href="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="06d3037d4f12"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">An update on Dart macros &amp; data serialization</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@vijaysmenon" data-action="show-user-card" data-action-value="bc0c65a5ad39" data-action-type="hover" data-user-id="bc0c65a5ad39" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*GVSu2mBv9BIXCpOO.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Vijay Menon"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@vijaysmenon" data-action="show-user-card" data-action-value="bc0c65a5ad39" data-action-type="hover" data-user-id="bc0c65a5ad39" dir="auto">Vijay Menon</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2025-01-29T21:19:17.971Z">Jan 29</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="778dd7a80983" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/0*pojZOcfCeFztkEzK&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Announcing Dart 3.6</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="778dd7a80983"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Announcing Dart 3.6</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in the language…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@mbelanger_65682" data-action="show-user-card" data-action-value="ae996dbdd76e" data-action-type="hover" data-user-id="ae996dbdd76e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*dvfKkfTnezv7BhXgB51pGA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Marya Belanger"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@mbelanger_65682" data-action="show-user-card" data-action-value="ae996dbdd76e" data-action-type="hover" data-user-id="ae996dbdd76e" dir="auto">Marya Belanger</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-12-11T20:20:13.654Z">Dec 11, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------3-----------------------" data-post-id="ae925357d2d7" data-index="3"><div class="u-lineHeightBase postItem"><a href="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=collection_home---4------3-----------------------" data-action="open-post" data-action-value="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=collection_home---4------3-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/0*vm7AfKyip_pXJGCd&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Google Summer of Code 2024 Results</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=collection_home---4------3-----------------------" data-action-source="collection_home---4------3-----------------------" data-post-id="ae925357d2d7"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Google Summer of Code 2024 Results</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Results from Dart contributors in Google Summer of Code 2024.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@jonasfj" data-action="show-user-card" data-action-value="4a41236ee91e" data-action-type="hover" data-user-id="4a41236ee91e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*9dn0P6YHJVXOAB6Tf6Y3bw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Jonas Finnemann Jensen"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@jonasfj" data-action="show-user-card" data-action-value="4a41236ee91e" data-action-type="hover" data-user-id="4a41236ee91e" dir="auto">Jonas Finnemann Jensen</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-14T17:23:41.553Z">Oct 14, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------4-----------------------" data-post-id="6ca36259fa2f" data-index="4"><div class="u-lineHeightBase postItem"><a href="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=collection_home---4------4-----------------------" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=collection_home---4------4-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/1*PVj9TIzP50I00tavJqAg_Q.gif&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Announcing Dart 3.5, and an update on the Dart roadmap</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=collection_home---4------4-----------------------" data-action-source="collection_home---4------4-----------------------" data-post-id="6ca36259fa2f"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Announcing Dart 3.5, and an update on the Dart roadmap</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">It’s time for another of our quarterly Dart SDK releases. We have improvements in interoperability, new features in our pub.dev package…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@mit.mit" data-action="show-user-card" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Y_CFLc1qadgr3tPK." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Michael Thomsen"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@mit.mit" data-action="show-user-card" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto">Michael Thomsen</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-08-06T18:02:39.459Z">Aug 6, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------5-----------------------" data-post-id="bd8d23b4462a" data-index="5"><div class="u-lineHeightBase postItem"><a href="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=collection_home---4------5-----------------------" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=collection_home---4------5-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/0*hAcsCFLU0Ze7pej6&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Announcing Dart 3.4</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=collection_home---4------5-----------------------" data-action-source="collection_home---4------5-----------------------" data-post-id="bd8d23b4462a"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Announcing Dart 3.4</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4 / IO24 post, so…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@mit.mit" data-action="show-user-card" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*Y_CFLc1qadgr3tPK." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Michael Thomsen"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@mit.mit" data-action="show-user-card" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto">Michael Thomsen</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-05-14T20:36:15.743Z">May 14, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------6-----------------------" data-post-id="98b06991158f" data-index="6"><div class="u-lineHeightBase postItem"><a href="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=collection_home---4------6-----------------------" data-action="open-post" data-action-value="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=collection_home---4------6-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/1*dhBQqKXU46sGKjx36LNf0w.jpeg&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">History of JS interop in Dart</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=collection_home---4------6-----------------------" data-action-source="collection_home---4------6-----------------------" data-post-id="98b06991158f"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">History of JS interop in Dart</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Support for Wasm just landed in the current Flutter beta, thanks to an exciting JavaScript interop milestone reached in Dart 3.3. To…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@sigmund_73865" data-action="show-user-card" data-action-value="a96e25894a2e" data-action-type="hover" data-user-id="a96e25894a2e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*VSpZ-PDOkwSn2Kyi" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Sigmund Cherem"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@sigmund_73865" data-action="show-user-card" data-action-value="a96e25894a2e" data-action-type="hover" data-user-id="a96e25894a2e" dir="auto">Sigmund Cherem</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-03-28T15:01:11.571Z">Mar 28, 2024</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div></div></div></section></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #798795 !important;} .u-accentColor--borderNormal {border-color: #798795 !important;} .u-accentColor--borderDark {border-color: #69737F !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #798795 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #798795 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #69737F !important;} .u-accentColor--textNormal {color: #69737F !important;} .u-accentColor--hoverTextNormal:hover {color: #69737F !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #606A74 !important;} .u-accentColor--textDark {color: #606A74 !important;} .u-accentColor--backgroundLight {background-color: #798795 !important;} .u-accentColor--backgroundNormal {background-color: #798795 !important;} .u-accentColor--backgroundDark {background-color: #69737F !important;} .u-accentColor--buttonDark {border-color: #69737F !important; color: #606A74 !important;} .u-accentColor--buttonDark:hover {border-color: #606A74 !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #69737F !important; fill: #69737F !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #798795 !important; color: #69737F !important;} .u-accentColor--buttonNormal:hover {border-color: #69737F !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #798795 !important; fill: #798795 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #69737F !important; border-color: #69737F !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #798795 !important; border-color: #798795 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #69737F !important;}.u-tintBgColor {background-color: rgba(28, 40, 52, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(28, 40, 52, 1) 0%, rgba(28, 40, 52, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(28, 40, 52, 0) 0%, rgba(28, 40, 52, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #989FA8 !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #EBEDF1 !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #989FA8 !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #EBEDF1 !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--textDark {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #989FA8 !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #EBEDF1 !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #989FA8 !important; color: #989FA8 !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #989FA8 !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #989FA8 !important; fill: #989FA8 !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #EBEDF1 !important; color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #EBEDF1 !important; fill: #EBEDF1 !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #C3C7CE !important; color: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #EBEDF1 !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #C3C7CE !important; fill: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #EBEDF1 !important; border-color: #EBEDF1 !important; color: rgba(28, 40, 52, 1) !important; fill: rgba(28, 40, 52, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #C3C7CE !important; border-color: #C3C7CE !important; color: rgba(28, 40, 52, 1) !important; fill: rgba(28, 40, 52, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #C3C7CE !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--darken:active {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:active {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #FEFFFF !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #989FA8;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #989FA8;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #989FA8;} .u-tintSpectrum .ui-h1,.u-tintSpectrum .ui-h2,.u-tintSpectrum .ui-h3,.u-tintSpectrum .ui-h4,.u-tintSpectrum .ui-brand1,.u-tintSpectrum .ui-brand2,.u-tintSpectrum .ui-captionStrong {color: #FEFFFF !important; fill: #FEFFFF !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #FEFFFF !important; fill: #FEFFFF !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #989FA8 !important; fill: #989FA8 !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #989FA8 !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #EBEDF1 !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #989FA8 !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #EBEDF1 !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #FEFFFF !important;} .u-tintSpectrum .u-accentColor--textDark {color: #FEFFFF !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #989FA8 !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #EBEDF1 !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #EBEDF1 !important; color: #FEFFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #FEFFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #EBEDF1 !important; fill: #EBEDF1 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #C3C7CE !important; color: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #EBEDF1 !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #C3C7CE !important; fill: #C3C7CE !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(28, 40, 52, 1) !important; fill: rgba(28, 40, 52, 1) !important;} .u-tintSpectrum .u-accentColor--buttonDark.button--filled,.u-tintSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-tintSpectrum .u-accentColor--fillWhenActive.is-active {background-color: #EBEDF1 !important; border-color: #EBEDF1 !important; color: rgba(28, 40, 52, 1) !important; fill: rgba(28, 40, 52, 1) !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-tintSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #C3C7CE !important; border-color: #C3C7CE !important; color: rgba(28, 40, 52, 1) !important; fill: rgba(28, 40, 52, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #C3C7CE !important;} .u-accentColor--highlightFaint {background-color: rgba(239, 241, 246, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(215, 225, 238, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(239, 241, 246, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(239, 241, 246, 1), rgba(239, 241, 246, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(226, 232, 241, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(226, 232, 241, 1), rgba(226, 232, 241, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(215, 225, 238, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(215, 225, 238, 1), rgba(215, 225, 238, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(215, 225, 238, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(215, 225, 238, 1), rgba(215, 225, 238, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(215, 225, 238, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(215, 225, 238, 1), rgba(215, 225, 238, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-tintBgColor u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-tintSpectrum"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://medium.com/dartlang/about" title="About Dart" aria-label="About Dart">About Dart</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/dartlang/latest" title="Latest Stories for Dart" aria-label="Latest Stories for Dart">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/dartlang/archive" title="Archive for Dart" aria-label="Archive for Dart">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20250214-1839-root","currentUser":{"userId":"lo_da7f734c4306","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.8Tcu27LFq3PCOR9WxTangw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.OeYcXrNwP1RO6In97YcKLQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.wCbOa67hZjl5Sam6zzVFnA.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.tTmySBFexDB1lciGURkN8g.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.a_EBqZVM6AyX_Kp1jlxGyQ.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.-oShrzSeUmNJS3K6rx04MA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.P8k9CfZ1LzppHTJYwJD_Ig.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.9h8MreH1W2quy7BlStgo8w.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.BeGFKpJATbmOvbKtPqdULA.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.7zPJu_iPvZQ7WmBm5quNMw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.JdLpnwrzm9Rc1drxpYremQ.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1739729244924:e709d63edfe8","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_abandoned_paywall_email_experiment":"control","enable_abandoned_paywall_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bg_post_post":true,"enable_boost_experiment":"control","enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_cancellation_discount_v1_1":true,"enable_cancellation_discount_v1_email":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_deviant_get_variant_flag_from_medium2":true,"enable_diversification_rex":true,"enable_engagement_service_publish_response":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_hybrid_ranking_model":"experiment","enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_medium_com_canonical_urls":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_plans_page_branding":"control","enable_plans_page_branding_v2":"control","enable_plans_page_payment_form":"group_1","enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_post_bottom_responses_native":true,"enable_post_publish_permission_check":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_pub_featuring":true,"enable_pub_featuring_post_page_label":true,"enable_pub_featuring_stats":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_trust_service_recaptcha":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"enable_winback_promotion_email":true,"get_highlights_from_engagement":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":3,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.8Tcu27LFq3PCOR9WxTangw.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"23738d481ce8":{"id":"23738d481ce8","name":"Dart","slug":"dartlang","tags":["MOBILE APP DEVELOPMENT","WEB DEVELOPMENT","DART","PROGRAMMING LANGUAGES","SOFTWARE DEVELOPMENT"],"creatorId":"3193e0e1210f","description":"Dart is an approachable, portable, and productive language for high-quality apps on any platform. Learn more at https://dart.dev.","shortDescription":"Dart is an approachable, portable, and productive language…","image":{"imageId":"1*knHF_qpxdtS8h0Z8EeqowA.png","filter":"","backgroundSize":"","originalWidth":1080,"originalHeight":1080,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":13145,"activeAt":1739387427610},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*NRb7RFVWJQFzY47j3v4U7Q.png","filter":"","backgroundSize":"","originalWidth":400,"originalHeight":154,"strategy":"resample","height":0,"width":0},"twitterUsername":"dart_lang","publicEmail":"medium@dartlang.org","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Dart","description":"An approachable, portable, and productive language for high-quality apps on any platform","backgroundImage":{},"logoImage":{"id":"1*knHF_qpxdtS8h0Z8EeqowA@2x.png","originalWidth":1080,"originalHeight":1080,"alt":"Dart"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":7,"postIds":[]}}],"tintColor":"#FF1C2834","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF798795","point":0},{"color":"#FF717D8A","point":0.1},{"color":"#FF69737F","point":0.2},{"color":"#FF606A74","point":0.3},{"color":"#FF586068","point":0.4},{"color":"#FF4E555D","point":0.5},{"color":"#FF454A51","point":0.6},{"color":"#FF3B3F45","point":0.7},{"color":"#FF303438","point":0.8},{"color":"#FF25272B","point":0.9},{"color":"#FF181A1C","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF1C2834","point":0},{"color":"#FF394450","point":0.1},{"color":"#FF535D68","point":0.2},{"color":"#FF6B747F","point":0.3},{"color":"#FF828A94","point":0.4},{"color":"#FF989FA8","point":0.5},{"color":"#FFAEB3BB","point":0.6},{"color":"#FFC3C7CE","point":0.7},{"color":"#FFD7DAE0","point":0.8},{"color":"#FFEBEDF1","point":0.9},{"color":"#FFFEFFFF","point":1}],"backgroundColor":"#FF1C2834"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF1F3F6","point":0},{"color":"#FFEFF1F6","point":0.1},{"color":"#FFECEFF5","point":0.2},{"color":"#FFEAEDF4","point":0.3},{"color":"#FFE7ECF3","point":0.4},{"color":"#FFE4EAF2","point":0.5},{"color":"#FFE2E8F1","point":0.6},{"color":"#FFDFE6F0","point":0.7},{"color":"#FFDCE5EF","point":0.8},{"color":"#FFDAE3EF","point":0.9},{"color":"#FFD7E1EE","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF919FAE","point":0},{"color":"#FF9BA7B5","point":0.1},{"color":"#FFA5AFBC","point":0.2},{"color":"#FFAEB8C3","point":0.3},{"color":"#FFB7C0CA","point":0.4},{"color":"#FFC1C8D1","point":0.5},{"color":"#FFCAD0D7","point":0.6},{"color":"#FFD3D7DE","point":0.7},{"color":"#FFDCDFE4","point":0.8},{"color":"#FFE5E7EB","point":0.9},{"color":"#FFEEEEF1","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":1,"title":"Announcements","tagSlug":"announcements","url":"https://medium.com/dartlang/tagged/announcements","source":"tagSlug"},{"type":5,"title":"Archive","url":"https://medium.com/dartlang/archive"},{"type":3,"title":"dart.dev","url":"https://dart.dev"}],"colorBehavior":2,"collectionFeatures":[25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Dart","description":"An approachable, portable, and productive language for high-quality apps on any platform","backgroundImage":{},"logoImage":{"id":"1*knHF_qpxdtS8h0Z8EeqowA@2x.png","originalWidth":1080,"originalHeight":1080,"alt":"Dart"},"alignment":2,"layout":5},"subscriberCount":13145,"tagline":"Dart is a client-optimized language for fast apps on any platform.","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092887098,"type":"Collection"}},"User":{"ae996dbdd76e":{"userId":"ae996dbdd76e","name":"Marya Belanger","username":"mbelanger_65682","createdAt":1661376028922,"imageId":"1*dvfKkfTnezv7BhXgB51pGA.png","backgroundImageId":"","bio":"Technical Writer for Dart","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[8,32,29,2,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"bc0c65a5ad39":{"userId":"bc0c65a5ad39","name":"Vijay Menon","username":"vijaysmenon","createdAt":1545059693095,"imageId":"0*GVSu2mBv9BIXCpOO.jpg","backgroundImageId":"","bio":"Director of Engineering, Dart","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"4a41236ee91e":{"userId":"4a41236ee91e","name":"Jonas Finnemann Jensen","username":"jonasfj","createdAt":1458688536576,"imageId":"1*9dn0P6YHJVXOAB6Tf6Y3bw.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"Jonas Finnemann Jensen","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,12,8,30,2,18,1,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-dk","type":"User"},"a6d788faa5e5":{"userId":"a6d788faa5e5","name":"Michael Thomsen","username":"mit.mit","createdAt":1481367237471,"imageId":"0*Y_CFLc1qadgr3tPK.","backgroundImageId":"","bio":"Product Manager working on Dart and Flutter. Helping developers is my passion!","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[32,12,8,5,21,30,2,18,1,17,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-dk","type":"User"},"a96e25894a2e":{"userId":"a96e25894a2e","name":"Sigmund Cherem","username":"sigmund_73865","createdAt":1710290402442,"imageId":"0*VSpZ-PDOkwSn2Kyi","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"}},"Post":{"bf864a1b195c":{"id":"bf864a1b195c","versionId":"33f1615f1b2d","creatorId":"ae996dbdd76e","homeCollectionId":"23738d481ce8","title":"Announcing Dart 3.7","detectedLanguage":"en","latestVersion":"33f1615f1b2d","latestPublishedVersion":"33f1615f1b2d","hasUnpublishedEdits":false,"latestRev":491,"createdAt":1739296008359,"updatedAt":1739391901238,"acceptedAt":0,"firstPublishedAt":1739387427521,"latestPublishedAt":1739387606487,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","filter":"","backgroundSize":"","originalWidth":1920,"originalHeight":1080,"strategy":"resample","height":0,"width":0},"wordCount":1350,"imageCount":5,"readingTime":5.927672955974843,"subtitle":"It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":155,"isBookmarked":false,"tags":[{"slug":"dart","name":"Dart","postCount":14975,"metadata":{"postCount":14975,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1084,"metadata":{"postCount":1084,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":50033,"metadata":{"postCount":50033,"coverImage":{"id":"1*-XHpdhmBoEU-K3pSPWTX3g.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":6,"links":{"entries":[{"url":"https://pub.dev/packages/web","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/js-interop","alts":[],"httpStatus":200},{"url":"https://dart.dev/tools/pub/pubspec#topics","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/dart-js_interop/dart-js_interop-library.html","alts":[],"httpStatus":200},{"url":"https://dart.dev/guides/language/evolution","alts":[],"httpStatus":200},{"url":"https://dart.dev/language/patterns","alts":[],"httpStatus":200},{"url":"https://pub.dev/help/search","alts":[],"httpStatus":200},{"url":"https://pub.dev/topics","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/pub-dev/blob/master/doc/topics.yaml","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/dart_style/wiki/FAQ","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/dart_style/blob/cea5a1a3e974c5065e6f4cc19b2838cd62448f0a/CHANGELOG.md#300","alts":[],"httpStatus":200},{"url":"https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983","alts":[{"type":3,"url":"medium://p/778dd7a80983"},{"type":2,"url":"medium://p/778dd7a80983"}],"httpStatus":200},{"url":"https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12","alts":[{"type":3,"url":"medium://p/06d3037d4f12"},{"type":2,"url":"medium://p/06d3037d4f12"}],"httpStatus":200},{"url":"https://medium.com/dartlang/dart-3-3-325bf2bf6c13","alts":[{"type":3,"url":"medium://p/325bf2bf6c13"},{"type":2,"url":"medium://p/325bf2bf6c13"}],"httpStatus":200},{"url":"https://github.com/dart-lang/language/blob/main/working/augmentation-libraries/feature-specification.md","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/f90c380c2317","alts":[{"type":3,"url":"medium://p/f90c380c2317"},{"type":2,"url":"medium://p/f90c380c2317"}],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues/4232","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/pub-dev/issues/4416","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/build/issues/3800","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#analyzer-1","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/dart_style/issues/1253","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues/1482#issuecomment-2622895490","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1739387608258},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1393,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-dart-3-7","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-dart-3-7-bf864a1b195c","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},{"name":"e5d2","type":3,"text":"Announcing Dart 3.7","markups":[],"alignment":1},{"name":"03a9","type":1,"text":"It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"a0793f413fe1","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e5d2","type":3,"text":"Announcing Dart 3.7","markups":[]},{"name":"03a9","type":1,"text":"It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!","markups":[]},{"name":"37f5","type":1,"text":"The theme for this release is developer productivity. We’ve made the Dart language more consistent by tweaking how it handles wildcard variables. There’s also a brand new style in the Dart formatter, new quick…","markups":[{"type":2,"start":30,"end":52}]}],"sections":[{"name":"4edb","startIndex":0}]},"isFullContent":false,"subtitle":"It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"06d3037d4f12":{"id":"06d3037d4f12","versionId":"544bb6be4045","creatorId":"bc0c65a5ad39","homeCollectionId":"23738d481ce8","title":"An update on Dart macros & data serialization","detectedLanguage":"en","latestVersion":"544bb6be4045","latestPublishedVersion":"544bb6be4045","hasUnpublishedEdits":false,"latestRev":36,"createdAt":1738182714858,"updatedAt":1738189438033,"acceptedAt":0,"firstPublishedAt":1738185557971,"latestPublishedAt":1738185557971,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":535,"imageCount":0,"readingTime":2.018867924528302,"subtitle":"We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":179,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":13,"links":{"entries":[{"url":"https://dart.dev/language/macros","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/build/issues/3800","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues/4154","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/language/blob/main/working/augmentation-libraries/feature-specification.md","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues/1482","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues/314","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1738185560127},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1268,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"an-update-on-dart-macros-data-serialization","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"an-update-on-dart-macros-data-serialization-06d3037d4f12","previewContent":{"bodyModel":{"paragraphs":[{"name":"98f0","type":3,"text":"An update on Dart macros & data serialization","markups":[],"alignment":1},{"name":"90db","type":1,"text":"We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major technical hurdle, we saw new ones pop up. At this point, we are not seeing macros converging anytime soon…","markups":[{"type":3,"start":61,"end":67,"href":"https://dart.dev/language/macros","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"98f0","type":3,"text":"An update on Dart macros & data serialization","markups":[]},{"name":"90db","type":1,"text":"We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major technical hurdle, we saw new ones pop up. At this point, we are not seeing macros converging anytime soon toward a feature we are comfortable shipping, with the…","markups":[{"type":3,"start":61,"end":67,"href":"https://dart.dev/language/macros","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"e6d4","startIndex":0}]},"isFullContent":false,"subtitle":"We have invested significant time and resources to prototype macros over the past couple years. Unfortunately, each time we solved a major…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"778dd7a80983":{"id":"778dd7a80983","versionId":"610625bbe4eb","creatorId":"ae996dbdd76e","homeCollectionId":"23738d481ce8","title":"Announcing Dart 3.6","detectedLanguage":"en","latestVersion":"610625bbe4eb","latestPublishedVersion":"610625bbe4eb","hasUnpublishedEdits":true,"latestRev":123,"createdAt":1733857944064,"updatedAt":1739305715281,"acceptedAt":0,"firstPublishedAt":1733948413654,"latestPublishedAt":1733948413654,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in the language…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*pojZOcfCeFztkEzK","filter":"","backgroundSize":"","originalWidth":1400,"originalHeight":788,"strategy":"resample","height":0,"width":0},"wordCount":465,"imageCount":2,"readingTime":2.138050314465409,"subtitle":"Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in the language…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":159,"isBookmarked":false,"tags":[{"slug":"dart","name":"Dart","postCount":14975,"metadata":{"postCount":14975,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1084,"metadata":{"postCount":1084,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":50033,"metadata":{"postCount":50033,"coverImage":{"id":"1*-XHpdhmBoEU-K3pSPWTX3g.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":4,"links":{"entries":[{"url":"https://github.com/dart-lang/pub-dev/issues/2714","alts":[],"httpStatus":200},{"url":"https://pub.dev/help/scoring","alts":[],"httpStatus":200},{"url":"https://dart.dev/go/pub-workspaces","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c","alts":[{"type":3,"url":"medium://p/28341129570c"},{"type":2,"url":"medium://p/28341129570c"}],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#360","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1733948414607},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1007,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-dart-3-6","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"announcing-dart-3-6-778dd7a80983","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*pojZOcfCeFztkEzK","originalWidth":1400,"originalHeight":788,"isFeatured":true}},{"name":"9735","type":3,"text":"Announcing Dart 3.6","markups":[],"alignment":1},{"name":"a112","type":1,"text":"Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in…","markups":[{"type":3,"start":70,"end":82,"href":"https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in the language…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"70d53a74cb07","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"9735","type":3,"text":"Announcing Dart 3.6","markups":[]},{"name":"a112","type":1,"text":"Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in the language, digit separators. We also have several new features in the pub ecosystem: pub download counts, and the highly anticipated pub workspaces!","markups":[{"type":3,"start":70,"end":82,"href":"https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c","title":"","rel":"","anchorType":0},{"type":2,"start":137,"end":154},{"type":2,"start":212,"end":231},{"type":2,"start":259,"end":274}]},{"name":"3eab","type":4,"text":"Dart 3.6","markups":[],"layout":1,"metadata":{"id":"0*pojZOcfCeFztkEzK","originalWidth":1400,"originalHeight":788,"isFeatured":true}},{"name":"1db9","type":3,"text":"Pub workspaces","markups":[]},{"name":"8025","type":1,"text":"Pub now supports shared…","markups":[]}],"sections":[{"name":"7407","startIndex":0}]},"isFullContent":false,"subtitle":"Welcome to Dart 3.6! Today is our last release of the year, alongside Flutter 3.27. We’re excited to share a new feature in the language…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"ae925357d2d7":{"id":"ae925357d2d7","versionId":"d4957659a5d8","creatorId":"4a41236ee91e","homeCollectionId":"23738d481ce8","title":"Google Summer of Code 2024 Results","detectedLanguage":"en","latestVersion":"d4957659a5d8","latestPublishedVersion":"d4957659a5d8","hasUnpublishedEdits":false,"latestRev":153,"createdAt":1727701796853,"updatedAt":1731649581624,"acceptedAt":0,"firstPublishedAt":1728926621553,"latestPublishedAt":1728926621553,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Results from Dart contributors in Google Summer of Code 2024.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*vm7AfKyip_pXJGCd","filter":"","backgroundSize":"","originalWidth":674,"originalHeight":350,"strategy":"resample","height":0,"width":0},"wordCount":952,"imageCount":2,"readingTime":3.9757861635220126,"subtitle":"Results from Dart contributors in Google Summer of Code 2024.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":14,"isBookmarked":false,"tags":[{"slug":"dartlang","name":"Dartlang","postCount":1084,"metadata":{"postCount":1084,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":50033,"metadata":{"postCount":50033,"coverImage":{"id":"1*-XHpdhmBoEU-K3pSPWTX3g.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"open-source","name":"Open Source","postCount":53114,"metadata":{"postCount":53114,"coverImage":{"id":"1*MU8r1brqC9EA5_cGSjmcsg.jpeg","originalWidth":682,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"google-summer-of-code","name":"Google Summer Of Code","postCount":1295,"metadata":{"postCount":1295,"coverImage":{"id":"1*cMqcXphL_FG9433Mh7q77A.png","originalWidth":800,"originalHeight":400}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://square.github.io/okhttp/","alts":[],"httpStatus":200},{"url":"https://summerofcode.withgoogle.com/","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/dartdoc_test","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/jni","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/ok_http","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/jnigen","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/c-interop","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/ffigen","alts":[],"httpStatus":200},{"url":"https://github.com/dcharkes","alts":[],"httpStatus":200},{"url":"https://github.com/eyebrowsoffire","alts":[],"httpStatus":200},{"url":"https://github.com/mannprerak2","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/native/tree/cf13658c3bc92e62893ec15659dc1370a7d07e8a/pkgs/swift2objc","alts":[],"httpStatus":200},{"url":"https://github.com/TheComputerM/dart-native/tree/ffigenpad","alts":[],"httpStatus":200},{"url":"https://github.com/Anikate-De/gsoc-2024-project-report","alts":[],"httpStatus":200},{"url":"https://thecomputerm.hashnode.dev/dirty-deeds-done-dart-cheap-experiments-with-dart2wasm","alts":[],"httpStatus":200},{"url":"https://ffigenpad.surge.sh/","alts":[],"httpStatus":200},{"url":"https://medium.com/@mohammad.mossad.eid/swift2objc-more-convenient-swift-dart-interoperability-b152dd5bed13","alts":[{"type":3,"url":"medium://p/b152dd5bed13"},{"type":2,"url":"medium://p/b152dd5bed13"}],"httpStatus":200}],"version":"0.3","generatedAt":1728926622637},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":141,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"google-summer-of-code-2024-results","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"google-summer-of-code-2024-results-ae925357d2d7","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*vm7AfKyip_pXJGCd","originalWidth":674,"originalHeight":350,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Google Summer of Code 2024 Results","alignment":1},{"name":"previewSubtitle","type":13,"text":"Results from Dart contributors in Google Summer of Code 2024.","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Results from Dart contributors in Google Summer of Code 2024."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0510","type":3,"text":"Google Summer of Code 2024 Results","markups":[]},{"name":"c828","type":1,"text":"The Google Summer of Code (GSoC) program focuses on engaging new developers worldwide with open source software development. Google sponsors contributors to work with a mentoring open source organization on a 12-week programming project during the summer. Over the past 19 years, more than 20,000 contributors have participated in Google…","markups":[{"type":3,"start":4,"end":25,"href":"https://summerofcode.withgoogle.com/","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"a18e","startIndex":0}]},"isFullContent":false,"subtitle":"Results from Dart contributors in Google Summer of Code 2024."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"6ca36259fa2f":{"id":"6ca36259fa2f","versionId":"a219727acd2b","creatorId":"a6d788faa5e5","homeCollectionId":"23738d481ce8","title":"Announcing Dart 3.5, and an update on the Dart roadmap","detectedLanguage":"en","latestVersion":"a219727acd2b","latestPublishedVersion":"a219727acd2b","hasUnpublishedEdits":false,"latestRev":152,"createdAt":1722599602770,"updatedAt":1731992315676,"acceptedAt":0,"firstPublishedAt":1722967359459,"latestPublishedAt":1722967359459,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"It’s time for another of our quarterly Dart SDK releases. We have improvements in interoperability, new features in our pub.dev package…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*PVj9TIzP50I00tavJqAg_Q.gif","filter":"","backgroundSize":"","originalWidth":1920,"originalHeight":1080,"strategy":"resample","height":0,"width":0},"wordCount":1535,"imageCount":1,"readingTime":5.99245283018868,"subtitle":"It’s time for another of our quarterly Dart SDK releases. We have improvements in interoperability, new features in our pub.dev package…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":204,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":4,"links":{"entries":[{"url":"https://dart.dev/get-dart","alts":[],"httpStatus":200},{"url":"https://dart.dev/tools/linter-rules/invalid_runtime_check_with_js_interop_types","alts":[],"httpStatus":200},{"url":"https://pub.dev/help/scoring","alts":[],"httpStatus":200},{"url":"https://dart.dev/tools/pub/pubspec#topics","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/c-interop","alts":[],"httpStatus":200},{"url":"https://medium.com/dartlang/dart-3-4-bd8d23b4462a","alts":[{"type":3,"url":"medium://p/bd8d23b4462a"},{"type":2,"url":"medium://p/bd8d23b4462a"}],"httpStatus":200},{"url":"https://medium.com/flutter/whats-new-in-flutter-3-24-6c040f87d1e4","alts":[{"type":3,"url":"medium://p/6c040f87d1e4"},{"type":2,"url":"medium://p/6c040f87d1e4"}],"httpStatus":200},{"url":"https://pub.dev/packages/web","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/ffigen","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/jnigen/changelog","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/jnigen","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/js-interop/package-web","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/js-interop","alts":[],"httpStatus":200},{"url":"https://dart.dev/tools/experiment-flags","alts":[],"httpStatus":200},{"url":"https://github.com/orgs/dart-lang/projects/87","alts":[],"httpStatus":200},{"url":"https://github.com/orgs/dart-lang/projects/90/views/1","alts":[],"httpStatus":200},{"url":"https://github.com/orgs/dart-lang/projects/69/","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/56358","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/pub-dev/blob/master/doc/topics.yaml","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/articles/perf-jni","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/native/issues/660","alts":[],"httpStatus":200},{"url":"https://docs.flutter.dev/platform-integration/web/wasm","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/packages/tree/main","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/http/tree/master/pkgs/cupertino_http","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/53875","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/blob/master/CHANGELOG.md#350","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/44589","alts":[],"httpStatus":200},{"url":"https://github.com/flutter/engine/pull/54157/files","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/pub-dev/issues/2714","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/dart_style/issues","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/dart_style/issues/1253","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/50565","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1722967361230},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":2000,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-dart-3-5-and-an-update-on-the-dart-roadmap","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"dart-3-5-6ca36259fa2f","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*PVj9TIzP50I00tavJqAg_Q.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},{"name":"482a","type":3,"text":"Announcing Dart 3.5, and an update on the Dart roadmap","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"It’s time for another of our quarterly Dart SDK releases. We have improvements in interoperability, new features in our pub.dev package…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"062ee839f01b","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"482a","type":3,"text":"Announcing Dart 3.5, and an update on the Dart roadmap","markups":[]},{"name":"1236","type":1,"text":"It’s time for another of our quarterly Dart SDK releases. We have improvements in interoperability, new features in our pub.dev package manager, and we’ve graduated our new web integration APIs to stable and version 1.0.","markups":[]},{"name":"429e","type":1,"text":"A large portion of our time has been dedicated to larger, multi-quarter efforts, so with…","markups":[]}],"sections":[{"name":"9369","startIndex":0}]},"isFullContent":false,"subtitle":"It’s time for another of our quarterly Dart SDK releases. We have improvements in interoperability, new features in our pub.dev package…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"bd8d23b4462a":{"id":"bd8d23b4462a","versionId":"295ed09217b3","creatorId":"a6d788faa5e5","homeCollectionId":"23738d481ce8","title":"Announcing Dart 3.4","detectedLanguage":"en","latestVersion":"295ed09217b3","latestPublishedVersion":"295ed09217b3","hasUnpublishedEdits":false,"latestRev":171,"createdAt":1715596328947,"updatedAt":1732625264312,"acceptedAt":0,"firstPublishedAt":1715718975743,"latestPublishedAt":1715721565869,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4 / IO24 post, so…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*hAcsCFLU0Ze7pej6","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":900,"strategy":"resample","height":0,"width":0},"wordCount":965,"imageCount":2,"readingTime":4.024842767295597,"subtitle":"Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4 / IO24 post, so…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":358,"isBookmarked":false,"tags":[{"slug":"dart","name":"Dart","postCount":14975,"metadata":{"postCount":14975,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1084,"metadata":{"postCount":1084,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"wasm","name":"Wasm","postCount":883,"metadata":{"postCount":883,"coverImage":{"id":"1*iaVps3H1f1uUUjkmkt_PGg.jpeg","originalWidth":735,"originalHeight":500,"isFeatured":true}},"type":"Tag"},{"slug":"webassembly","name":"Webassembly","postCount":1868,"metadata":{"postCount":1868,"coverImage":{"id":"0*xsPc7lztC0-gUkM6","originalWidth":4522,"originalHeight":3015,"isFeatured":true,"unsplashPhotoId":"yeB9jDmHm6M"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":6,"links":{"entries":[{"url":"https://dart.dev/interop/js-interop","alts":[],"httpStatus":200},{"url":"http://dart.dev/web/wasm","alts":[],"httpStatus":200},{"url":"https://dart.dev/go/json-codable","alts":[],"httpStatus":200},{"url":"https://dart.dev/go/macros","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/io24-5e211f708a37","alts":[{"type":3,"url":"medium://p/5e211f708a37"},{"type":2,"url":"medium://p/5e211f708a37"}],"httpStatus":200},{"url":"http://twitter.com/JsonCodable","alts":[],"httpStatus":400},{"url":"https://docs.flutter.dev/platform-integration/web/wasm","alts":[],"httpStatus":200},{"url":"https://docs.flutter.dev/data-and-backend/serialization/json#serializing-json-using-code-generation-libraries","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/labels/analyzer-completion-correctness","alts":[],"httpStatus":404},{"url":"https://github.com/dart-lang/language/blob/main/working/augmentation-libraries/feature-specification.md","alts":[],"httpStatus":200},{"url":"https://developer.chrome.com/blog/wasmgc/","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/53884","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#language-1","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#340","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1715721567903},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":2751,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"announcing-dart-3-4","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"dart-3-4-bd8d23b4462a","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*hAcsCFLU0Ze7pej6","originalWidth":1600,"originalHeight":900,"isFeatured":true}},{"name":"d0ae","type":3,"text":"Announcing Dart 3.4","markups":[],"alignment":1},{"name":"9a51","type":1,"text":"Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4…","markups":[{"type":3,"start":100,"end":123,"href":"https://medium.com/flutter/io24-5e211f708a37","title":"","rel":"","anchorType":0}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4 / IO24 post, so…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"d0ae","type":3,"text":"Announcing Dart 3.4","markups":[]},{"name":"9a51","type":1,"text":"Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4 / IO24 post, so make sure to get the full scoop there. This post introduces our support for WebAssembly, and then details one of the major roadmap…","markups":[{"type":3,"start":100,"end":130,"href":"https://medium.com/flutter/io24-5e211f708a37","title":"","rel":"","anchorType":0},{"type":2,"start":310,"end":317}]}],"sections":[{"name":"d4e5","startIndex":0}]},"isFullContent":false,"subtitle":"Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the Flutter 3.22 / Dart 3.4 / IO24 post, so…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"98b06991158f":{"id":"98b06991158f","versionId":"3214e1de2563","creatorId":"a96e25894a2e","homeCollectionId":"23738d481ce8","title":"History of JS interop in Dart","detectedLanguage":"en","latestVersion":"3214e1de2563","latestPublishedVersion":"3214e1de2563","hasUnpublishedEdits":false,"latestRev":420,"createdAt":1711566963257,"updatedAt":1732894922021,"acceptedAt":0,"firstPublishedAt":1711638071571,"latestPublishedAt":1711638071571,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Support for Wasm just landed in the current Flutter beta, thanks to an exciting JavaScript interop milestone reached in Dart 3.3. To…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*dhBQqKXU46sGKjx36LNf0w.jpeg","filter":"","backgroundSize":"","originalWidth":1536,"originalHeight":1536,"strategy":"resample","height":0,"width":0},"wordCount":1206,"imageCount":1,"readingTime":4.750943396226416,"subtitle":"Support for Wasm just landed in the current Flutter beta, thanks to an exciting JavaScript interop milestone reached in Dart 3.3. To…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":44,"isBookmarked":false,"tags":[{"slug":"dart","name":"Dart","postCount":14975,"metadata":{"postCount":14975,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1084,"metadata":{"postCount":1084,"coverImage":{"id":"1*tdCaUfGrIk42FIuu2qs9Yw.gif","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Announcing Dart 3.7"}},"type":"Tag"},{"slug":"interoperability","name":"Interoperability","postCount":56139,"metadata":{"postCount":56139,"coverImage":{"id":"1*g-Z5ZVKpP_VGM7sMO3DMSA.png","originalWidth":6988,"originalHeight":3144,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://dart.dev/interop/js-interop","alts":[],"httpStatus":200},{"url":"https://dart.dev/language/extension-types","alts":[],"httpStatus":200},{"url":"https://dart.dev/language/type-system#what-is-soundness","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/js-interop/package-web","alts":[],"httpStatus":200},{"url":"https://pub.dev/documentation/js/latest/","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/typings","alts":[],"httpStatus":200},{"url":"https://docs.flutter.dev/platform-integration/web/wasm","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/js_bindings","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/js-interop/js-types","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/stable/dart-io/dart-io-library.html","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/stable/dart-html/dart-html-library.html","alts":[],"httpStatus":200},{"url":"https://github.com/a14n/dart-js-wrapping","alts":[],"httpStatus":200},{"url":"https://github.com/dart-archive/js_facade_gen","alts":[],"httpStatus":200},{"url":"https://codereview.chromium.org//15782009","alts":[],"httpStatus":200},{"url":"https://codereview.chromium.org/2150313003/","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/whats-next-for-flutter-b94ce089f49c","alts":[{"type":2,"url":"medium://p/b94ce089f49c"},{"type":3,"url":"medium://p/b94ce089f49c"}],"httpStatus":200},{"url":"https://github.com/dart-archive/js-interop-deprecated","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/35084","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1711638072906},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":414,"sectionCount":1,"readingList":0,"topics":[{"topicId":"63c6f1f93ee","slug":"javascript","createdAt":1493945704961,"deletedAt":0,"image":{"id":"1*5UyyDJ1ESD11yQNd1UVAaQ@2x.jpeg","originalWidth":5472,"originalHeight":3648},"name":"Javascript","description":"An ode to code.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Javascript News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"history-of-js-interop-in-dart","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"history-of-js-interop-in-dart-98b06991158f","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*dhBQqKXU46sGKjx36LNf0w.jpeg","originalWidth":1536,"originalHeight":1536,"isFeatured":true}},{"name":"070f","type":3,"text":"History of JS interop in Dart","markups":[],"alignment":1},{"name":"b424","type":13,"text":"Support for Wasm just landed in the current Flutter beta, thanks to an…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Support for Wasm just landed in the current Flutter beta, thanks to an exciting JavaScript interop milestone reached in Dart 3.3. To…"},"license":1,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"070f","type":3,"text":"History of JS interop in Dart","markups":[]},{"name":"b424","type":13,"text":"Support for Wasm just landed in the current Flutter beta, thanks to an exciting JavaScript interop milestone reached in Dart 3.3. To celebrate, we’re taking a look back at the decade-long journey of Dart and JS interoperability.","markups":[]},{"name":"cc1d","type":4,"text":"AI Image generated by Gemini","markups":[],"layout":1,"metadata":{"id":"1*dhBQqKXU46sGKjx36LNf0w.jpeg","originalWidth":1536,"originalHeight":1536,"isFeatured":true}},{"name":"05c7","type":1,"text":"Interoperability has been a core focus from the beginning of Dart. When Dart was first released in 2011, it was designed to be embeddable and multi-platform. It ran on a standalone virtual machine, embedded in a browser, and compiled to JavaScript. When Flutter came along in 2015, we were ready…","markups":[{"type":3,"start":342,"end":364,"href":"https://docs.flutter.dev/platform-integration/web/wasm","title":"","rel":"","anchorType":0},{"type":2,"start":127,"end":137},{"type":2,"start":142,"end":156}]}],"sections":[{"name":"7dd3","startIndex":0}]},"isFullContent":false,"subtitle":"Support for Wasm just landed in the current Flutter beta, thanks to an exciting JavaScript interop milestone reached in Dart 3.3. To…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/23738d481ce8/stream","next":{"to":"1711638071571","ignoredIds":[],"page":2}},"collection":{"id":"23738d481ce8","name":"Dart","slug":"dartlang","tags":["MOBILE APP DEVELOPMENT","WEB DEVELOPMENT","DART","PROGRAMMING LANGUAGES","SOFTWARE DEVELOPMENT"],"creatorId":"3193e0e1210f","description":"Dart is an approachable, portable, and productive language for high-quality apps on any platform. Learn more at https://dart.dev.","shortDescription":"Dart is an approachable, portable, and productive language…","image":{"imageId":"1*knHF_qpxdtS8h0Z8EeqowA.png","filter":"","backgroundSize":"","originalWidth":1080,"originalHeight":1080,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":13145,"activeAt":1739387427610},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*NRb7RFVWJQFzY47j3v4U7Q.png","filter":"","backgroundSize":"","originalWidth":400,"originalHeight":154,"strategy":"resample","height":0,"width":0},"twitterUsername":"dart_lang","publicEmail":"medium@dartlang.org","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Dart","description":"An approachable, portable, and productive language for high-quality apps on any platform","backgroundImage":{},"logoImage":{"id":"1*knHF_qpxdtS8h0Z8EeqowA@2x.png","originalWidth":1080,"originalHeight":1080,"alt":"Dart"},"alignment":2,"layout":5}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":7,"postIds":["bf864a1b195c","06d3037d4f12","778dd7a80983","ae925357d2d7","6ca36259fa2f","bd8d23b4462a","98b06991158f"]}}],"tintColor":"#FF1C2834","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF798795","point":0},{"color":"#FF717D8A","point":0.1},{"color":"#FF69737F","point":0.2},{"color":"#FF606A74","point":0.3},{"color":"#FF586068","point":0.4},{"color":"#FF4E555D","point":0.5},{"color":"#FF454A51","point":0.6},{"color":"#FF3B3F45","point":0.7},{"color":"#FF303438","point":0.8},{"color":"#FF25272B","point":0.9},{"color":"#FF181A1C","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF1C2834","point":0},{"color":"#FF394450","point":0.1},{"color":"#FF535D68","point":0.2},{"color":"#FF6B747F","point":0.3},{"color":"#FF828A94","point":0.4},{"color":"#FF989FA8","point":0.5},{"color":"#FFAEB3BB","point":0.6},{"color":"#FFC3C7CE","point":0.7},{"color":"#FFD7DAE0","point":0.8},{"color":"#FFEBEDF1","point":0.9},{"color":"#FFFEFFFF","point":1}],"backgroundColor":"#FF1C2834"},"highlightSpectrum":{"colorPoints":[{"color":"#FFF1F3F6","point":0},{"color":"#FFEFF1F6","point":0.1},{"color":"#FFECEFF5","point":0.2},{"color":"#FFEAEDF4","point":0.3},{"color":"#FFE7ECF3","point":0.4},{"color":"#FFE4EAF2","point":0.5},{"color":"#FFE2E8F1","point":0.6},{"color":"#FFDFE6F0","point":0.7},{"color":"#FFDCE5EF","point":0.8},{"color":"#FFDAE3EF","point":0.9},{"color":"#FFD7E1EE","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF919FAE","point":0},{"color":"#FF9BA7B5","point":0.1},{"color":"#FFA5AFBC","point":0.2},{"color":"#FFAEB8C3","point":0.3},{"color":"#FFB7C0CA","point":0.4},{"color":"#FFC1C8D1","point":0.5},{"color":"#FFCAD0D7","point":0.6},{"color":"#FFD3D7DE","point":0.7},{"color":"#FFDCDFE4","point":0.8},{"color":"#FFE5E7EB","point":0.9},{"color":"#FFEEEEF1","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":1,"title":"Announcements","tagSlug":"announcements","url":"https://medium.com/dartlang/tagged/announcements","source":"tagSlug"},{"type":5,"title":"Archive","url":"https://medium.com/dartlang/archive"},{"type":3,"title":"dart.dev","url":"https://dart.dev"}],"colorBehavior":2,"collectionFeatures":[25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Dart","description":"An approachable, portable, and productive language for high-quality apps on any platform","backgroundImage":{},"logoImage":{"id":"1*knHF_qpxdtS8h0Z8EeqowA@2x.png","originalWidth":1080,"originalHeight":1080,"alt":"Dart"},"alignment":2,"layout":5},"subscriberCount":13145,"tagline":"Dart is a client-optimized language for fast apps on any platform.","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092887098,"type":"Collection"},"header":{"title":"Dart","description":"An approachable, portable, and productive language for high-quality apps on any platform","backgroundImage":{},"logoImage":{"id":"1*knHF_qpxdtS8h0Z8EeqowA@2x.png","originalWidth":1080,"originalHeight":1080,"alt":"Dart"},"alignment":2,"layout":5},"streamItems":[{"createdAt":1739729244992,"randomId":"73a8fe1542c4","section":{"items":[{"post":{"postId":"bf864a1b195c"},"itemType":"post"},{"post":{"postId":"06d3037d4f12"},"itemType":"post"},{"post":{"postId":"778dd7a80983"},"itemType":"post"},{"post":{"postId":"ae925357d2d7"},"itemType":"post"},{"post":{"postId":"6ca36259fa2f"},"itemType":"post"},{"post":{"postId":"bd8d23b4462a"},"itemType":"post"},{"post":{"postId":"98b06991158f"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"}]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'912f7a23b862a033',t:'MTczOTcyOTI0NS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10