| // Copyright 2014 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'base/config.dart'; | |
| import 'base/platform.dart'; | |
| import 'features.dart'; | |
| import 'version.dart'; | |
| class FlutterFeatureFlags implements FeatureFlags { | |
| FlutterFeatureFlags({ | |
| required FlutterVersion flutterVersion, | |
| required Config config, | |
| required Platform platform, | |
| }) : _flutterVersion = flutterVersion, | |
| _config = config, | |
| _platform = platform; | |
| final FlutterVersion _flutterVersion; | |
| final Config _config; | |
| final Platform _platform; | |
| @override | |
| bool get isLinuxEnabled => isEnabled(flutterLinuxDesktopFeature); | |
| @override | |
| bool get isMacOSEnabled => isEnabled(flutterMacOSDesktopFeature); | |
| @override | |
| bool get isWebEnabled => isEnabled(flutterWebFeature); | |
| @override | |
| bool get isWindowsEnabled => isEnabled(flutterWindowsDesktopFeature); | |
| @override | |
| bool get isAndroidEnabled => isEnabled(flutterAndroidFeature); | |
| @override | |
| bool get isIOSEnabled => isEnabled(flutterIOSFeature); | |
| @override | |
| bool get isFuchsiaEnabled => isEnabled(flutterFuchsiaFeature); | |
| @override | |
| bool get areCustomDevicesEnabled => isEnabled(flutterCustomDevicesFeature); | |
| @override | |
| bool get isSingleWidgetReloadEnabled => isEnabled(singleWidgetReload); | |
| @override | |
| bool get isFlutterWebWasmEnabled => isEnabled(flutterWebWasm); | |
| @override | |
| bool isEnabled(Feature feature) { | |
| final String currentChannel = _flutterVersion.channel; | |
| final FeatureChannelSetting featureSetting = feature.getSettingForChannel(currentChannel); | |
| if (!featureSetting.available) { | |
| return false; | |
| } | |
| bool isEnabled = featureSetting.enabledByDefault; | |
| if (feature.configSetting != null) { | |
| final bool? configOverride = _config.getValue(feature.configSetting!) as bool?; | |
| if (configOverride != null) { | |
| isEnabled = configOverride; | |
| } | |
| } | |
| if (feature.environmentOverride != null) { | |
| if (_platform.environment[feature.environmentOverride]?.toLowerCase() == 'true') { | |
| isEnabled = true; | |
| } | |
| } | |
| return isEnabled; | |
| } | |
| } |