@@ -19,6 +19,7 @@ import '../constants.dart';
1919import '../diagnostics/inspector_service.dart' ;
2020import '../feature_flags.dart' ;
2121import '../globals.dart' ;
22+ import '../managers/banner_messages.dart' ;
2223import '../primitives/query_parameters.dart' ;
2324import '../server/server.dart' ;
2425import '../utils/utils.dart' ;
@@ -65,6 +66,8 @@ enum _GeneralPreferences { verboseLogging }
6566/// A controller for global application preferences.
6667class PreferencesController extends DisposableController
6768 with AutoDisposeControllerMixin {
69+ static const _welcomeShownStorageId = 'wasmWelcomeShown' ;
70+
6871 /// Whether the user preference for DevTools theme is set to dark mode.
6972 ///
7073 /// To check whether DevTools is using a light or dark theme, other parts of
@@ -134,6 +137,13 @@ class PreferencesController extends DisposableController
134137 setGlobal (PreferencesController , this );
135138 }
136139
140+ /// Enables the wasm experiment in storage.
141+ ///
142+ /// This is used to persist the preference across reloads.
143+ Future <void > enableWasmInStorage () async {
144+ await storage.setValue (_ExperimentPreferences .wasm.storageKey, 'true' );
145+ }
146+
137147 Future <void > _initDarkMode () async {
138148 final darkModeValue = await storage.getValue (
139149 _UiPreferences .darkMode.storageKey,
@@ -181,6 +191,18 @@ class PreferencesController extends DisposableController
181191 );
182192 }
183193
194+ // Maybe show the WASM welcome message on app connection if this is the
195+ // first time the user is loading DevTools after the WASM experiment was
196+ // enabled.
197+ addAutoDisposeListener (
198+ serviceConnection.serviceManager.connectedState,
199+ () async {
200+ if (serviceConnection.serviceManager.connectedState.value.connected) {
201+ await _maybeShowWasmWelcomeMessage ();
202+ }
203+ },
204+ );
205+
184206 addAutoDisposeListener (wasmEnabled, () async {
185207 final enabled = wasmEnabled.value;
186208 _log.fine ('preference update (wasmEnabled = $enabled )' );
@@ -247,6 +269,23 @@ class PreferencesController extends DisposableController
247269 toggleWasmEnabled (shouldEnableWasm);
248270 }
249271
272+ Future <void > _maybeShowWasmWelcomeMessage () async {
273+ // If we have already shown the welcome message, don't show it again.
274+ final welcomeAlreadyShown = await storage.getValue (_welcomeShownStorageId);
275+ if (welcomeAlreadyShown == 'true' ) return ;
276+
277+ // Show the welcome message if the WASM experiment is enabled but the user
278+ // is not using the WASM build.
279+ final connectedApp = serviceConnection.serviceManager.connectedApp;
280+ if (connectedApp != null &&
281+ FeatureFlags .wasmByDefault.isEnabled (connectedApp) &&
282+ ! kIsWasm) {
283+ // Mark the welcome message as shown.
284+ await storage.setValue (_welcomeShownStorageId, 'true' );
285+ pushWasmWelcomeMessage ();
286+ }
287+ }
288+
250289 Future <void > _initVerboseLogging () async {
251290 final verboseLoggingEnabledValue = await boolValueFromStorage (
252291 _GeneralPreferences .verboseLogging.name,
0 commit comments