CINXE.COM
Latest stories published on 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>Latest stories published on Dart – Medium</title><link rel="canonical" href="https://medium.com/dartlang/latest"><meta name="robots" content="index,follow"><meta name="title" content="Latest stories published on Dart – Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Read the latest stories published by Dart. 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="Latest stories published on Dart – Medium"><meta property="twitter:title" content="Latest stories published on Dart – Medium"><meta property="og:url" content="https://medium.com/dartlang/latest"><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="Read the latest stories published by Dart. 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="Read the latest stories published by Dart. 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/latest"><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" /><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%2Flatest&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/dartlang/latest" 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%2Flatest&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/dartlang/latest" 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="container u-maxWidth1040"><div class="row u-paddingTop20 u-paddingBottom10 u-xs-paddingTop0 js-postList"><div class="col u-xs-size12of12 u-size8of12"><nav class="u-flex heading heading--borderedBottom heading--paddedTop"><span class="u-minWidth0"><ul class="heading-tabs"><li class="heading-tabsItem u-inlineBlock js-tabsItem is-active u-fontSize16"><span class="heading-title u-inlineBlock u-fontSize16"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/latest">Latest</a></span></li><li class="heading-tabsItem u-inlineBlock js-tabsItem u-fontSize16"><span class="heading-title u-inlineBlock u-fontSize16"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/trending">Trending</a></span></li></ul></span></nav><div class="js-postListHandle"><div class="u-maxWidth600 js-postList" data-count="10"><div class="js-postListHandle"><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="bf864a1b195c" data-source="---------0"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------0" data-action="show-user-card" data-action-source="---------0" data-action-value="ae996dbdd76e" data-action-type="hover" data-user-id="ae996dbdd76e" dir="auto">Marya Belanger</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------0" data-action="show-collection-card" data-action-source="---------0" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0" data-action="open-post" data-action-value="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0" data-action-source="preview-listing" ><time datetime="2025-02-12T19:10:27.521Z">Feb 12</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------0" data-action-value="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0" data-action-index="0" data-post-id="bf864a1b195c"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*tdCaUfGrIk42FIuu2qs9Yw.gif" data-width="1920" data-height="1080" data-is-featured="true" alt="Announcing Dart 3.7" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*tdCaUfGrIk42FIuu2qs9Yw.gif"></div></figure><h3 name="e5d2" id="e5d2" class="graf graf--h3 graf-after--figure graf--title">Announcing Dart 3.7</h3><p name="03a9" id="03a9" class="graf graf--p graf-after--h3 graf--trailing">It’s a new year, and time for a new Dart stable release. Welcome to Dart 3.7!</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0" data-action="open-post" data-action-source="---------0" data-action-value="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0" data-post-id="bf864a1b195c">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="bf864a1b195c" data-is-flush-left="true" data-source="listing-----bf864a1b195c---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/bf864a1b195c" data-action-source="listing-----bf864a1b195c---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="bf864a1b195c">2.1K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c?source=---------0#--responses" data-action-source="---------0">14 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="bf864a1b195c"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="06d3037d4f12" data-source="---------1"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------1" data-action="show-user-card" data-action-source="---------1" data-action-value="bc0c65a5ad39" data-action-type="hover" data-user-id="bc0c65a5ad39" dir="auto">Vijay Menon</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------1" data-action="show-collection-card" data-action-source="---------1" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1" data-action="open-post" data-action-value="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1" data-action-source="preview-listing" ><time datetime="2025-01-29T21:19:17.971Z">Jan 29</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------1" data-action-value="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1" data-action-index="1" data-post-id="06d3037d4f12"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="98f0" id="98f0" class="graf graf--h3 graf--leading graf--title">An update on Dart macros & data serialization</h3><p name="90db" id="90db" class="graf graf--p graf-after--h3 graf--trailing">We have invested significant time and resources to prototype <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://dart.dev/language/macros">macros</span> 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…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1" data-action="open-post" data-action-source="---------1" data-action-value="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1" data-post-id="06d3037d4f12">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="06d3037d4f12" data-is-flush-left="true" data-source="listing-----06d3037d4f12---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/06d3037d4f12" data-action-source="listing-----06d3037d4f12---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="06d3037d4f12">1.3K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/an-update-on-dart-macros-data-serialization-06d3037d4f12?source=---------1#--responses" data-action-source="---------1">13 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="06d3037d4f12"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="778dd7a80983" data-source="---------2"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------2" data-action="show-user-card" data-action-source="---------2" data-action-value="ae996dbdd76e" data-action-type="hover" data-user-id="ae996dbdd76e" dir="auto">Marya Belanger</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------2" data-action="show-collection-card" data-action-source="---------2" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2" data-action="open-post" data-action-value="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2" data-action-source="preview-listing" ><time datetime="2024-12-11T20:20:13.654Z">Dec 11, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------2" data-action-value="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2" data-action-index="2" data-post-id="778dd7a80983"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*pojZOcfCeFztkEzK" data-width="1400" data-height="788" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*pojZOcfCeFztkEzK"></div></figure><h3 name="9735" id="9735" class="graf graf--h3 graf-after--figure graf--title">Announcing Dart 3.6</h3><p name="a112" id="a112" class="graf graf--p graf-after--h3 graf--trailing">Welcome to Dart 3.6! Today is our last release of the year, alongside <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c">Flutter 3.27</span>. We’re excited to share a new feature in…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2" data-action="open-post" data-action-source="---------2" data-action-value="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2" data-post-id="778dd7a80983">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="778dd7a80983" data-is-flush-left="true" data-source="listing-----778dd7a80983---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/778dd7a80983" data-action-source="listing-----778dd7a80983---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="778dd7a80983">1K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/announcing-dart-3-6-778dd7a80983?source=---------2#--responses" data-action-source="---------2">4 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="778dd7a80983"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="ae925357d2d7" data-source="---------3"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------3" data-action="show-user-card" data-action-source="---------3" data-action-value="4a41236ee91e" data-action-type="hover" data-user-id="4a41236ee91e" dir="auto">Jonas Finnemann Jensen</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------3" data-action="show-collection-card" data-action-source="---------3" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=---------3" data-action="open-post" data-action-value="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=---------3" data-action-source="preview-listing" ><time datetime="2024-10-14T17:23:41.553Z">Oct 14, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=---------3" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------3" data-action-value="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=---------3" data-action-index="3" data-post-id="ae925357d2d7"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*vm7AfKyip_pXJGCd" data-width="674" data-height="350" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*vm7AfKyip_pXJGCd"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Google Summer of Code 2024 Results</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Results from Dart contributors in Google Summer of Code 2024.</h4></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=---------3" data-action="open-post" data-action-source="---------3" data-action-value="https://medium.com/dartlang/google-summer-of-code-2024-results-ae925357d2d7?source=---------3" data-post-id="ae925357d2d7">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="ae925357d2d7" data-is-flush-left="true" data-source="listing-----ae925357d2d7---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/ae925357d2d7" data-action-source="listing-----ae925357d2d7---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="ae925357d2d7">141</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="ae925357d2d7"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="6ca36259fa2f" data-source="---------4"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------4" data-action="show-user-card" data-action-source="---------4" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto">Michael Thomsen</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------4" data-action="show-collection-card" data-action-source="---------4" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4" data-action-source="preview-listing" ><time datetime="2024-08-06T18:02:39.459Z">Aug 6, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------4" data-action-value="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4" data-action-index="4" data-post-id="6ca36259fa2f"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*PVj9TIzP50I00tavJqAg_Q.gif" data-width="1920" data-height="1080" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*PVj9TIzP50I00tavJqAg_Q.gif"></div></figure><h3 name="482a" id="482a" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Announcing Dart 3.5, and an update on the Dart roadmap</h3></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4" data-action="open-post" data-action-source="---------4" data-action-value="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4" data-post-id="6ca36259fa2f">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="6ca36259fa2f" data-is-flush-left="true" data-source="listing-----6ca36259fa2f---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/6ca36259fa2f" data-action-source="listing-----6ca36259fa2f---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="6ca36259fa2f">2K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-5-6ca36259fa2f?source=---------4#--responses" data-action-source="---------4">4 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="6ca36259fa2f"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="bd8d23b4462a" data-source="---------5"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------5" data-action="show-user-card" data-action-source="---------5" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto">Michael Thomsen</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------5" data-action="show-collection-card" data-action-source="---------5" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5" data-action-source="preview-listing" ><time datetime="2024-05-14T20:36:15.743Z">May 14, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------5" data-action-value="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5" data-action-index="5" data-post-id="bd8d23b4462a"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*hAcsCFLU0Ze7pej6" data-width="1600" data-height="900" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/0*hAcsCFLU0Ze7pej6"></div></figure><h3 name="d0ae" id="d0ae" class="graf graf--h3 graf-after--figure graf--title">Announcing Dart 3.4</h3><p name="9a51" id="9a51" class="graf graf--p graf-after--h3 graf--trailing">Dart 3.4 is out today! This release showcases the joint efforts of Dart and Flutter together in the <span class="markup--anchor markup--p-anchor" data-action="open-inner-link" data-action-value="https://medium.com/flutter/io24-5e211f708a37">Flutter 3.22 / Dart 3.4</span>…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5" data-action="open-post" data-action-source="---------5" data-action-value="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5" data-post-id="bd8d23b4462a">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="bd8d23b4462a" data-is-flush-left="true" data-source="listing-----bd8d23b4462a---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/bd8d23b4462a" data-action-source="listing-----bd8d23b4462a---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="bd8d23b4462a">2.7K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-4-bd8d23b4462a?source=---------5#--responses" data-action-source="---------5">7 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="bd8d23b4462a"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="98b06991158f" data-source="---------6"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------6" data-action="show-user-card" data-action-source="---------6" data-action-value="a96e25894a2e" data-action-type="hover" data-user-id="a96e25894a2e" dir="auto">Sigmund Cherem</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------6" data-action="show-collection-card" data-action-source="---------6" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6" data-action="open-post" data-action-value="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6" data-action-source="preview-listing" ><time datetime="2024-03-28T15:01:11.571Z">Mar 28, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------6" data-action-value="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6" data-action-index="6" data-post-id="98b06991158f"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*dhBQqKXU46sGKjx36LNf0w.jpeg" data-width="1536" data-height="1536" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*dhBQqKXU46sGKjx36LNf0w.jpeg"></div></figure><h3 name="070f" id="070f" class="graf graf--h3 graf-after--figure graf--title">History of JS interop in Dart</h3><h4 name="b424" id="b424" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Support for Wasm just landed in the current Flutter beta, thanks to an…</h4></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6" data-action="open-post" data-action-source="---------6" data-action-value="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6" data-post-id="98b06991158f">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="98b06991158f" data-is-flush-left="true" data-source="listing-----98b06991158f---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/98b06991158f" data-action-source="listing-----98b06991158f---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="98b06991158f">418</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/history-of-js-interop-in-dart-98b06991158f?source=---------6#--responses" data-action-source="---------6">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="98b06991158f"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="8ca45fb6dc4e" data-source="---------7"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------7" data-action="show-user-card" data-action-source="---------7" data-action-value="4a41236ee91e" data-action-type="hover" data-user-id="4a41236ee91e" dir="auto">Jonas Finnemann Jensen</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------7" data-action="show-collection-card" data-action-source="---------7" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7" data-action-source="preview-listing" ><time datetime="2024-03-05T09:02:05.695Z">Mar 5, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="1 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------7" data-action-value="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7" data-action-index="7" data-post-id="8ca45fb6dc4e"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*69jdaJUqgu_phIVF4w-7_A.png" data-width="801" data-height="569" data-is-featured="true" src="https://cdn-images-1.medium.com/fit/t/1600/480/1*69jdaJUqgu_phIVF4w-7_A.png"></div></figure><h3 name="b1fc" id="b1fc" class="graf graf--h3 graf-after--figure graf--title">Dart in Google Summer of Code 2024</h3><p name="499c" id="499c" class="graf graf--p graf-after--h3 graf--trailing">The Google Summer of Code (GSoC) program focuses on bringing student developers from around the…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7" data-action="open-post" data-action-source="---------7" data-action-value="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7" data-post-id="8ca45fb6dc4e">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="8ca45fb6dc4e" data-is-flush-left="true" data-source="listing-----8ca45fb6dc4e---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/8ca45fb6dc4e" data-action-source="listing-----8ca45fb6dc4e---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="8ca45fb6dc4e">60</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-in-google-summer-of-code-2024-8ca45fb6dc4e?source=---------7#--responses" data-action-source="---------7">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="8ca45fb6dc4e"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 u-borderBottomLight js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="325bf2bf6c13" data-source="---------8"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@kevmoo" data-action="show-user-card" data-action-value="441fe70f4b5e" data-action-type="hover" data-user-id="441fe70f4b5e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iUVmcyWC2Pj7ERaoSF-Onw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Kevin Moore"></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/@kevmoo?source=---------8" data-action="show-user-card" data-action-source="---------8" data-action-value="441fe70f4b5e" data-action-type="hover" data-user-id="441fe70f4b5e" dir="auto">Kevin Moore</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------8" data-action="show-collection-card" data-action-source="---------8" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8" data-action-source="preview-listing" ><time datetime="2024-02-15T19:01:48.538Z">Feb 15, 2024</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------8" data-action-value="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8" data-action-index="8" data-post-id="325bf2bf6c13"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="6b3d" id="6b3d" class="graf graf--h3 graf--leading graf--title">New in Dart 3.3: Extension Types, JavaScript Interop, and More</h3><figure name="3836" id="3836" class="graf graf--figure graf--layoutConstrainedHeightPreview graf-after--h3 graf--trailing"><div class="aspectRatioPlaceholder is-locked" style="max-width: 240px; max-height: 240px;"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 100%;"></div><img class="graf-image" data-image-id="1*p4TBp0I66rJTq0LvnSuE7g.png" data-width="1076" data-height="1076" src="https://cdn-images-1.medium.com/max/480/1*p4TBp0I66rJTq0LvnSuE7g.png"></div></figure></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8" data-action="open-post" data-action-source="---------8" data-action-value="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8" data-post-id="325bf2bf6c13">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="325bf2bf6c13" data-is-flush-left="true" data-source="listing-----325bf2bf6c13---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/325bf2bf6c13" data-action-source="listing-----325bf2bf6c13---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="325bf2bf6c13">1.5K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-3-325bf2bf6c13?source=---------8#--responses" data-action-source="---------8">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="325bf2bf6c13"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div><div class="u-paddingTop20 u-paddingBottom25 js-block"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation" data-post-id="c8de8fe1b91f" data-source="---------9"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><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?source=---------9" data-action="show-user-card" data-action-source="---------9" data-action-value="a6d788faa5e5" data-action-type="hover" data-user-id="a6d788faa5e5" dir="auto">Michael Thomsen</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang?source=---------9" data-action="show-collection-card" data-action-source="---------9" data-action-value="dartlang" data-action-type="hover">Dart</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9" data-action="open-post" data-action-value="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9" data-action-source="preview-listing" ><time datetime="2023-11-15T21:44:57.615Z">Nov 15, 2023</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><div class="postArticle-content"><a href="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9" title="Latest stories published on Dart – Medium" aria-label="Latest stories published on Dart – Medium" data-action="open-post" data-action-source="---------9" data-action-value="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9" data-action-index="9" data-post-id="c8de8fe1b91f"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="6c3c" id="6c3c" class="graf graf--h3 graf--leading graf--title">Announcing Dart 3.2</h3><h3 name="8425" id="8425" class="graf graf--h3 graf-after--h3">Improved language & developer experience, and an update on web apps & Wasm</h3><p name="5cd2" id="5cd2" class="graf graf--p graf-after--h3">By: <span class="markup--user markup--p-user" data-action="show-user-card" data-action-type="hover" data-user-id="441fe70f4b5e" data-action-value="441fe70f4b5e">Kevin Moore</span> & <span class="markup--user markup--p-user" data-action="show-user-card" data-action-type="hover" data-user-id="a6d788faa5e5" data-action-value="a6d788faa5e5">Michael Thomsen</span></p><p name="61a4" id="61a4" class="graf graf--p graf-after--p graf--trailing">Today we’re announcing Dart 3.2, featuring a new language feature for non-null…</p></div></div></section></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9" data-action="open-post" data-action-source="---------9" data-action-value="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9" data-post-id="c8de8fe1b91f">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="c8de8fe1b91f" data-is-flush-left="true" data-source="listing-----c8de8fe1b91f---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/c8de8fe1b91f" data-action-source="listing-----c8de8fe1b91f---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25" ><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="c8de8fe1b91f">1.7K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://medium.com/dartlang/dart-3-2-c8de8fe1b91f?source=---------9#--responses" data-action-source="---------9">7 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="c8de8fe1b91f"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" ><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div></div></div></div><div class="col u-xs-size12of12 u-size4of12 js-aboutCollectionBox"><header class="heading heading--borderedBottom heading--paddedTop" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight"><a class="link link--darken u-accentColor--textDarken u-baseColor--link" href="https://medium.com/dartlang/about">About</a></span></div></div></header><div class="u-tableCell"><a class="link u-baseColor--link avatar avatar--roundedRectangle" href="https://medium.com/dartlang" title="Go to Dart" aria-label="Go to Dart"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*knHF_qpxdtS8h0Z8EeqowA.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Dart"></a></div><div class="u-tableCell u-verticalAlignMiddle u-textColorNormal u-fontSize16 u-breakWord u-paddingLeft10">Dart</div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingTop15 u-paddingBottom15"><div class="u-marginBottom15 u-breakWord">Dart is an approachable, portable, and productive language for high-quality apps on any platform. Learn more at <a rel="nofollow" href="https://dart.dev">https://dart.dev</a>.</div><a class=" link--darken u-accentColor--textDarken link--accent u-accentColor--textNormal" href="https://medium.com/dartlang/about">More information</a></div><div class="u-fontSize14 u-lineHeightBaseSans u-textColorDark u-paddingBottom15"><header class="heading heading--allCaps heading--light" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Followers</span></div></div></header>13.2K </div><div class="u-fontSize14 u-lineHeightBaseSans u-marginBottom4 u-paddingBottom15"><header class="heading heading--allCaps heading--light" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Elsewhere</span></div></div></header><div class="linkSet"><a class="button button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--dark button--chromeless" href="mailto:medium@dartlang.org" title="Email" aria-label="Email"><span class="button-defaultState"><span class="svgIcon svgIcon--email svgIcon--21px"><svg class="svgIcon-use" width="21" height="21" ><path d="M4.508 4A2.504 2.504 0 002 6.508v.277l8.054 4.1c.225.115.667.115.892 0L19 6.785v-.277A2.503 2.503 0 0016.492 4H4.508zm4.995 8.133L2 8.313v6.323a2.502 2.502 0 002.508 2.507h11.984A2.505 2.505 0 0019 14.636V8.313l-7.503 3.82c-.285.145-.64.217-.997.217-.356 0-.712-.072-.997-.217z"/></svg></span></span></a><a class="button button--dark button--chromeless is-touchIconBlackPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--dark button--chromeless" href="https://twitter.com/dart_lang" title="X profile" aria-label="X profile" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--21px"><svg class="svgIcon-use" width="21" height="21" fill="none" ><path d="M11.74 9.478l4.842-5.628h-1.147l-4.204 4.887L7.873 3.85H4l5.078 7.39L4 17.142h1.147l4.44-5.16 3.546 5.16h3.873L11.74 9.478zm-1.571 1.827l-.514-.736L5.56 4.714h1.762l3.304 4.725.514.736 4.295 6.143h-1.763l-3.504-5.013z" fill="#242424"/></svg></span></span></a></div></div></div></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></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":"20250320-1712-root","currentUser":{"userId":"lo_881cb12c3278","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.71JfT5PwI1Nxa2N5vRr3cw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.tSGs9o0CpD6fZw8IBeMDpw.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.uZAV3cxjUBprvFiEHbSlgg.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.l2NLAugbavWmX0SNQm7rJQ.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.6RrNL-1uTjwLj6YoV8eDrg.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.I58YjHDAkt7W3y45tQkNgQ.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.cc3ITwjgGKd7rMZZR9PqAA.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.WdJkh5Q-HtnasFaOPKc5Ig.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.EQo5uLzn479a85G8BXD7WQ.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.uxrpZ_QVd3WV4gphobrxQw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.V2JFozvy4p6MMkbJcG52bw.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":"1742787223501:4ead388d8aca","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_dense_post_preview":"control","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,"disable_rex_pub_featuring_recirc":true,"enable_abandoned_cart_promotion_email":true,"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_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_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_homepage_featured_feed":true,"enable_hybrid_ranking_model":"experiment","enable_iceland_forced_android":true,"enable_inline_comments":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_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_notifications":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_story_page_nofollow_meta_tag":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_user_profile_nofollow_attribute":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.71JfT5PwI1Nxa2N5vRr3cw.12.js" async></script><script>// < 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"},{"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":"","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":205,"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":2001,"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"},{"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":"","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":15280,"metadata":{"postCount":15280,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1106,"metadata":{"postCount":1106,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"wasm","name":"Wasm","postCount":898,"metadata":{"postCount":898,"coverImage":{"id":"1*z6wiNfxqRTUKpzEVngSRBw.png","originalWidth":2400,"originalHeight":607,"isFeatured":true}},"type":"Tag"},{"slug":"webassembly","name":"Webassembly","postCount":1915,"metadata":{"postCount":1915,"coverImage":{"id":"1*BpA3vpJAE85WIWjpcHLTvw.jpeg","originalWidth":1920,"originalHeight":1280,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":7,"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"},{"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":"","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":46,"isBookmarked":false,"tags":[{"slug":"dart","name":"Dart","postCount":15280,"metadata":{"postCount":15280,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1106,"metadata":{"postCount":1106,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"interoperability","name":"Interoperability","postCount":35018,"metadata":{"postCount":35018,"coverImage":{"id":"0*DGlk8WVEZ-li5tju","originalWidth":1620,"originalHeight":810,"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":418,"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"},{"id":"8ca45fb6dc4e","versionId":"10bf6d3b09a1","creatorId":"4a41236ee91e","homeCollectionId":"23738d481ce8","title":"Dart in Google Summer of Code 2024","detectedLanguage":"en","latestVersion":"10bf6d3b09a1","latestPublishedVersion":"10bf6d3b09a1","hasUnpublishedEdits":false,"latestRev":37,"createdAt":1708603514345,"updatedAt":1732996270996,"acceptedAt":0,"firstPublishedAt":1709629325695,"latestPublishedAt":1709629325695,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*69jdaJUqgu_phIVF4w-7_A.png","filter":"","backgroundSize":"","originalWidth":801,"originalHeight":569,"strategy":"resample","height":0,"width":0},"wordCount":197,"imageCount":1,"readingTime":0.9433962264150944,"subtitle":"The Google Summer of Code (GSoC) program focuses on bringing student developers from around the world into open source software…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":22,"isBookmarked":false,"tags":[{"slug":"dartlang","name":"Dartlang","postCount":1106,"metadata":{"postCount":1106,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"flutter","name":"Flutter","postCount":50890,"metadata":{"postCount":50890,"coverImage":{"id":"1*Rr10aK5E5Xb645rdMuKOcQ.png","originalWidth":2048,"originalHeight":701}},"type":"Tag"},{"slug":"open-source","name":"Open Source","postCount":53907,"metadata":{"postCount":53907,"coverImage":{"id":"0*Dd-eAWMwvxJHu0Q3.png","originalWidth":2000,"originalHeight":1282,"isFeatured":true}},"type":"Tag"},{"slug":"google-summer-of-code","name":"Google Summer Of Code","postCount":1296,"metadata":{"postCount":1296,"coverImage":{"id":"1*cMqcXphL_FG9433Mh7q77A.png","originalWidth":800,"originalHeight":400}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://google.github.io/gsocguides/student/","alts":[],"httpStatus":200},{"url":"https://summerofcode.withgoogle.com/programs/2024/organizations","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/wiki/Dart-GSoC-2024-Project-Ideas","alts":[],"httpStatus":200},{"url":"https://groups.google.com/g/dart-gsoc","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1709629326588},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":60,"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":"dart-in-google-summer-of-code-2024","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"dart-in-google-summer-of-code-2024-8ca45fb6dc4e","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*69jdaJUqgu_phIVF4w-7_A.png","originalWidth":801,"originalHeight":569,"isFeatured":true}},{"name":"b1fc","type":3,"text":"Dart in Google Summer of Code 2024","markups":[],"alignment":1},{"name":"499c","type":1,"text":"The Google Summer of Code (GSoC) program focuses on bringing student developers from around the…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The Google Summer of Code (GSoC) program focuses on bringing student developers from around the world into open source software…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"23738d481ce8","isNewsletter":false,"newsletterId":"45b6829fe833","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":"b1fc","type":3,"text":"Dart in Google Summer of Code 2024","markups":[]},{"name":"ca0f","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*69jdaJUqgu_phIVF4w-7_A.png","originalWidth":801,"originalHeight":569,"isFeatured":true}},{"name":"499c","type":1,"text":"The Google Summer of Code (GSoC) program focuses on bringing student developers from around the world into open source software development. Google sponsors students to work with a mentoring open source organization on a 12 week (or longer) programming project during the summer. Over the past 19 years, more than…","markups":[]}],"sections":[{"name":"3077","startIndex":0}]},"isFullContent":false,"subtitle":"The Google Summer of Code (GSoC) program focuses on bringing student developers from around the world into open source software…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"325bf2bf6c13","versionId":"9901f9420507","creatorId":"441fe70f4b5e","homeCollectionId":"23738d481ce8","title":"New in Dart 3.3: Extension Types, JavaScript Interop, and More","detectedLanguage":"en","latestVersion":"9901f9420507","latestPublishedVersion":"9901f9420507","hasUnpublishedEdits":false,"latestRev":418,"createdAt":1707955714971,"updatedAt":1708057220167,"acceptedAt":0,"firstPublishedAt":1708023708538,"latestPublishedAt":1708023708538,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*p4TBp0I66rJTq0LvnSuE7g.png","filter":"","backgroundSize":"","originalWidth":1076,"originalHeight":1076,"strategy":"resample","height":0,"width":0},"wordCount":731,"imageCount":2,"readingTime":3.141823899371069,"subtitle":"Dart 3.3 has landed, and it’s a game-changer for performance and cross-platform development! Get ready to supercharge your apps with…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":166,"isBookmarked":false,"tags":[{"slug":"dart-programming-language","name":"Dart Programming Language","postCount":381,"metadata":{"postCount":381,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"webassembly","name":"Webassembly","postCount":1915,"metadata":{"postCount":1915,"coverImage":{"id":"1*BpA3vpJAE85WIWjpcHLTvw.jpeg","originalWidth":1920,"originalHeight":1280,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":293590,"metadata":{"postCount":293590,"coverImage":{"id":"1*fvt7r8sARktoIS7Ua7JkbQ.png","originalWidth":1360,"originalHeight":742,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://ai.google.dev/tutorials/dart_quickstart","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/google_generative_ai","alts":[],"httpStatus":200},{"url":"https://webassembly.org/","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/web","alts":[],"httpStatus":200},{"url":"http://dart.dev/language/extension-types","alts":[],"httpStatus":200},{"url":"https://dart.dev/interop/js-interop","alts":[],"httpStatus":200},{"url":"https://dart.dev/language/extension-methods","alts":[],"httpStatus":200},{"url":"https://developer.mozilla.org/","alts":[],"httpStatus":200},{"url":"https://dart.dev/go/package-web","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/dart-html/dart-html-library.html","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/harness-gemini-in-your-dart-and-flutter-apps-00573e560381","alts":[{"type":3,"url":"medium://p/00573e560381"},{"type":2,"url":"medium://p/00573e560381"}],"httpStatus":200},{"url":"https://api.dart.dev/dart-js_interop/dart-js_interop-library.html","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1708023709444},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1596,"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":"new-in-dart-3-3-extension-types-javascript-interop-and-more","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"dart-3-3-325bf2bf6c13","previewContent":{"bodyModel":{"paragraphs":[{"name":"6b3d","type":3,"text":"New in Dart 3.3: Extension Types, JavaScript Interop, and More","markups":[],"alignment":1},{"name":"3836","type":4,"text":"","markups":[],"layout":9,"metadata":{"id":"1*p4TBp0I66rJTq0LvnSuE7g.png","originalWidth":1076,"originalHeight":1076}}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Dart 3.3 has landed, and it’s a game-changer for performance and cross-platform development! Get ready to supercharge your apps with…"},"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":"6b3d","type":3,"text":"New in Dart 3.3: Extension Types, JavaScript Interop, and More","markups":[]},{"name":"3836","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*p4TBp0I66rJTq0LvnSuE7g.png","originalWidth":1076,"originalHeight":1076}},{"name":"d69c","type":1,"text":"Dart 3.3 has landed, and it’s a game-changer for performance and cross-platform development! Get ready to supercharge your apps with Extension Types, revolutionizing performance optimization and how you interact with native code. Plus, our revamped JavaScript interop model introduces robust type safety and a developer-friendly way to tap into the…","markups":[{"type":1,"start":0,"end":92},{"type":1,"start":133,"end":148},{"type":1,"start":249,"end":267},{"type":1,"start":403,"end":414},{"type":1,"start":432,"end":459}]}],"sections":[{"name":"89a2","startIndex":0}]},"isFullContent":false,"subtitle":"Dart 3.3 has landed, and it’s a game-changer for performance and cross-platform development! Get ready to supercharge your apps with…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},{"id":"c8de8fe1b91f","versionId":"0635e409d47a","creatorId":"a6d788faa5e5","homeCollectionId":"23738d481ce8","title":"Announcing Dart 3.2","detectedLanguage":"en","latestVersion":"0635e409d47a","latestPublishedVersion":"0635e409d47a","hasUnpublishedEdits":false,"latestRev":207,"createdAt":1699968207674,"updatedAt":1704791818486,"acceptedAt":0,"firstPublishedAt":1700084697615,"latestPublishedAt":1704791818486,"vote":false,"experimentalCss":"","displayAuthor":"","virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*u5YRn1uMmXf94b2aPbcLRQ.png","filter":"","backgroundSize":"","originalWidth":4209,"originalHeight":1253,"strategy":"resample","height":0,"width":0},"wordCount":1255,"imageCount":2,"readingTime":5.119182389937107,"subtitle":"Improved language & developer experience, and an update on web apps & Wasm","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":280,"isBookmarked":false,"tags":[{"slug":"dart","name":"Dart","postCount":15280,"metadata":{"postCount":15280,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"},{"slug":"dartlang","name":"Dartlang","postCount":1106,"metadata":{"postCount":1106,"coverImage":{"id":"0*6he5fi_Ua3hpR0I0.jpg","originalWidth":1400,"originalHeight":748,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":7,"links":{"entries":[{"url":"https://webassembly.org/","alts":[],"httpStatus":200},{"url":"https://medium.com/flutter/whats-new-in-flutter-3-16-dba6cb1015d1","alts":[{"type":3,"url":"medium://p/dba6cb1015d1"},{"type":2,"url":"medium://p/dba6cb1015d1"}],"httpStatus":200},{"url":"https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87","alts":[{"type":3,"url":"medium://p/499a6e689c87"},{"type":2,"url":"medium://p/499a6e689c87"}],"httpStatus":200},{"url":"https://dart.dev/tools/dart-devtools","alts":[],"httpStatus":200},{"url":"https://dart.dev/get-dart","alts":[],"httpStatus":200},{"url":"https://dart.dev/overview#platform","alts":[],"httpStatus":200},{"url":"https://dart.dev/guides/language/evolution#language-versioning","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/cronet_http","alts":[],"httpStatus":200},{"url":"https://dart.dev/null-safety/understanding-null-safety#flow-analysis","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/flutter_lints","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/devtools_extensions","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/lints","alts":[],"httpStatus":200},{"url":"https://dart.dev/guides/libraries/java-interop","alts":[],"httpStatus":200},{"url":"https://dart.dev/guides/libraries/c-interop","alts":[],"httpStatus":200},{"url":"http://dart.dev/guides/libraries/c-interop#native-assets","alts":[],"httpStatus":200},{"url":"https://skia.org/docs/user/modules/canvaskit/","alts":[],"httpStatus":200},{"url":"https://dart.dev/guides/libraries/objective-c-interop","alts":[],"httpStatus":200},{"url":"https://pub.dev/packages/serverpod","alts":[],"httpStatus":200},{"url":"https://developer.chrome.com/blog/wasmgc/","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/lints/blob/main/CHANGELOG.md#300","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/stable/dart-ffi/NativeCallable/NativeCallable.listener.html","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/stable/dart-ffi/Pointer/fromFunction.html","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/http/blob/master/pkgs/cronet_http/jnigen.yaml","alts":[],"httpStatus":200},{"url":"https://developer.apple.com/documentation/coremotion","alts":[],"httpStatus":200},{"url":"https://api.dart.dev/stable/dart-ffi/NativeCallable/NativeCallable.isolateLocal.html","alts":[],"httpStatus":200},{"url":"https://github.com/orgs/serverpod/projects/4","alts":[],"httpStatus":200},{"url":"https://flutter.dev/wasm","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/lints#upgrading-to-the-latest-lints","alts":[],"httpStatus":200},{"url":"https://medium.com/p/c8bc1aaf8e5f/","alts":[{"type":3,"url":"medium://p/c8bc1aaf8e5f"},{"type":2,"url":"medium://p/c8bc1aaf8e5f"}],"httpStatus":200},{"url":"https://github.com/dart-lang/language/issues/2727","alts":[],"httpStatus":200},{"url":"https://github.com/dart-lang/sdk/issues/50565","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1704791819818},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":1742,"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-2","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"dart-3-2-c8de8fe1b91f","previewContent":{"bodyModel":{"paragraphs":[{"name":"6c3c","type":3,"text":"Announcing Dart 3.2","markups":[],"alignment":1},{"name":"8425","type":3,"text":"Improved language & developer experience, and an update on web apps & Wasm","markups":[],"alignment":1},{"name":"5cd2","type":1,"text":"By: Kevin Moore & Michael Thomsen","markups":[{"type":3,"start":4,"end":15,"anchorType":2,"userId":"441fe70f4b5e"},{"type":3,"start":18,"end":33,"anchorType":2,"userId":"a6d788faa5e5"}],"alignment":1},{"name":"61a4","type":1,"text":"Today we’re announcing Dart 3.2, featuring a new language feature for non-null…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Improved language & developer experience, and an update on web apps & Wasm"},"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":"6c3c","type":3,"text":"Announcing Dart 3.2","markups":[]},{"name":"8425","type":3,"text":"Improved language & developer experience, and an update on web apps & Wasm","markups":[]},{"name":"5cd2","type":1,"text":"By: Kevin Moore & Michael Thomsen","markups":[{"type":3,"start":4,"end":15,"anchorType":2,"userId":"441fe70f4b5e"},{"type":3,"start":18,"end":33,"anchorType":2,"userId":"a6d788faa5e5"}]},{"name":"61a4","type":1,"text":"Today we’re announcing Dart 3.2, featuring a new language feature for non-null promotion of private final fields, improved developer experience with new interop capabilities, support for extensions in DevTools, and an update on our web roadmap including support for Wasm (aka WebAssembly).","markups":[]},{"name":"e406","type":4,"text":"","markups":[],"layout":3,"metadata":{"id":"1*u5YRn1uMmXf94b2aPbcLRQ.png","originalWidth":4209,"originalHeight":1253}},{"name":"2026","type":3,"text":"Non-null promotion for private final fields","markups":[]},{"name":"358f","type":1,"text":"It’s been…","markups":[{"type":10,"start":158,"end":162},{"type":3,"start":42,"end":59,"href":"https://medium.com/dartlang/announcing-dart-2-12-499a6e689c87","title":"","rel":"","anchorType":0},{"type":3,"start":243,"end":256,"href":"https://dart.dev/null-safety/understanding-null-safety#flow-analysis","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"443b","startIndex":0}]},"isFullContent":false,"subtitle":"Improved language & developer experience, and an update on web apps & Wasm"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}],"tagName":null,"writerNames":["flutter.devrel","polina.c","kevmoo","jonasfj","leonsenft","kallentu","munificent","zoeyfan_43394","atsansone","john.p.ryan4","dacoharkes","davidmorgan_14314","munificentbob","erik_68861","mit.mit","josealba199675","sigmund_73865","matanlurey","taodong","vijaysmenon","bp74","brianwilkerson_17142","lrhn","mfairhurst","ryjohn_16185","BlackHC","bkonyi","domesticmouse","isoos","wal33d"]}) // ]]></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:'92531bd1df58820b',t:'MTc0Mjc4NzIyNC4wMDAwMDA='};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>