Unverified Commit 96a4dcb2 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] split features into 2 libraries, migrate to null safety (#79603)

parent 8743f94f
......@@ -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;
}
......
// 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';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment