| // 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 'package:meta/meta.dart'; |
| |
| import 'base/platform.dart'; |
| import 'features.dart'; |
| import 'flutter_features_config.dart'; |
| import 'version.dart'; |
| |
| @visibleForTesting |
| mixin FlutterFeatureFlagsIsEnabled implements FeatureFlags { |
| @protected |
| Platform get 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 isCliAnimationEnabled { |
| if (platform.environment['TERM'] == 'dumb') { |
| return false; |
| } |
| return isEnabled(cliAnimation); |
| } |
| |
| @override |
| bool get isNativeAssetsEnabled => isEnabled(nativeAssets); |
| |
| @override |
| bool get isDartDataAssetsEnabled => isEnabled(dartDataAssets); |
| |
| @override |
| bool get isSwiftPackageManagerEnabled => isEnabled(swiftPackageManager); |
| |
| @override |
| bool get isOmitLegacyVersionFileEnabled => isEnabled(omitLegacyVersionFile); |
| |
| @override |
| bool get isWindowingEnabled => isEnabled(windowingFeature); |
| |
| @override |
| bool get isLLDBDebuggingEnabled => isEnabled(lldbDebugging); |
| } |
| |
| interface class FlutterFeatureFlags extends FeatureFlags with FlutterFeatureFlagsIsEnabled { |
| FlutterFeatureFlags({ |
| required FlutterVersion flutterVersion, |
| required FlutterFeaturesConfig featuresConfig, |
| required this.platform, |
| }) : _flutterVersion = flutterVersion, |
| _featuresConfig = featuresConfig; |
| |
| final FlutterVersion _flutterVersion; |
| final FlutterFeaturesConfig _featuresConfig; |
| |
| @override |
| @protected |
| final Platform platform; |
| |
| @override |
| bool isEnabled(Feature feature) { |
| final String currentChannel = _flutterVersion.channel; |
| final FeatureChannelSetting featureSetting = feature.getSettingForChannel(currentChannel); |
| |
| // If unavailable, then no setting can enable this feature. |
| if (!featureSetting.available) { |
| return false; |
| } |
| |
| // Otherwise, read it from environment variable > project manifest > global config |
| return _featuresConfig.isEnabled(feature) ?? featureSetting.enabledByDefault; |
| } |
| } |