[flutter_tools] split features into 2 libraries, migrate to null safety (#79603)
This commit is contained in:
parent
8743f94f49
commit
96a4dcb2b5
@ -40,6 +40,7 @@ import 'emulator.dart';
|
||||
import 'features.dart';
|
||||
import 'flutter_application_package.dart';
|
||||
import 'flutter_device_manager.dart';
|
||||
import 'flutter_features.dart';
|
||||
import 'fuchsia/fuchsia_device.dart' show FuchsiaDeviceTools;
|
||||
import 'fuchsia/fuchsia_sdk.dart' show FuchsiaSdk, FuchsiaArtifacts;
|
||||
import 'fuchsia/fuchsia_workflow.dart' show FuchsiaWorkflow, fuchsiaWorkflow;
|
||||
|
@ -2,19 +2,12 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import 'base/config.dart';
|
||||
import 'base/context.dart';
|
||||
import 'base/platform.dart';
|
||||
import 'version.dart';
|
||||
|
||||
/// The current [FeatureFlags] implementation.
|
||||
///
|
||||
/// If not injected, a default implementation is provided.
|
||||
FeatureFlags get featureFlags => context.get<FeatureFlags>();
|
||||
FeatureFlags get featureFlags => context.get<FeatureFlags>()!;
|
||||
|
||||
/// The interface used to determine if a particular [Feature] is enabled.
|
||||
///
|
||||
@ -66,75 +59,6 @@ abstract class FeatureFlags {
|
||||
bool isEnabled(Feature feature) => false;
|
||||
}
|
||||
|
||||
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 isExperimentalInvalidationStrategyEnabled => isEnabled(experimentalInvalidationStrategy);
|
||||
|
||||
@override
|
||||
bool get isWindowsUwpEnabled => isEnabled(windowsUwpEmbedding);
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
/// All current Flutter feature flags.
|
||||
const List<Feature> allFeatures = <Feature>[
|
||||
flutterWebFeature,
|
||||
@ -393,7 +317,7 @@ const Feature windowsUwpEmbedding = Feature(
|
||||
class Feature {
|
||||
/// Creates a [Feature].
|
||||
const Feature({
|
||||
@required this.name,
|
||||
required this.name,
|
||||
this.environmentOverride,
|
||||
this.configSetting,
|
||||
this.extraHelpText,
|
||||
@ -425,20 +349,20 @@ class Feature {
|
||||
/// a feature.
|
||||
///
|
||||
/// If not provided, defaults to `null` meaning there is no override.
|
||||
final String environmentOverride;
|
||||
final String? environmentOverride;
|
||||
|
||||
/// The name of a setting that can be used to enable this feature.
|
||||
///
|
||||
/// If not provided, defaults to `null` meaning there is no config setting.
|
||||
final String configSetting;
|
||||
final String? configSetting;
|
||||
|
||||
/// Additional text to add to the end of the help message.
|
||||
///
|
||||
/// If not provided, defaults to `null` meaning there is no additional text.
|
||||
final String extraHelpText;
|
||||
final String? extraHelpText;
|
||||
|
||||
/// A help message for the `flutter config` command, or null if unsupported.
|
||||
String generateHelpMessage() {
|
||||
String? generateHelpMessage() {
|
||||
if (configSetting == null) {
|
||||
return null;
|
||||
}
|
||||
|
81
packages/flutter_tools/lib/src/flutter_features.dart
Normal file
81
packages/flutter_tools/lib/src/flutter_features.dart
Normal file
@ -0,0 +1,81 @@
|
||||
// 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.
|
||||
|
||||
// @dart = 2.8
|
||||
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
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 isExperimentalInvalidationStrategyEnabled => isEnabled(experimentalInvalidationStrategy);
|
||||
|
||||
@override
|
||||
bool get isWindowsUwpEnabled => isEnabled(windowsUwpEmbedding);
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@
|
||||
import 'package:flutter_tools/src/base/config.dart';
|
||||
import 'package:flutter_tools/src/base/platform.dart';
|
||||
import 'package:flutter_tools/src/features.dart';
|
||||
import 'package:flutter_tools/src/flutter_features.dart';
|
||||
|
||||
import '../src/common.dart';
|
||||
import '../src/fakes.dart';
|
||||
|
Loading…
x
Reference in New Issue
Block a user