mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
105 lines
2.9 KiB
Dart
105 lines
2.9 KiB
Dart
// 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:yaml/yaml.dart';
|
|
|
|
import 'base/file_system.dart';
|
|
import 'base/logger.dart';
|
|
import 'base/utils.dart';
|
|
|
|
enum FlutterProjectType {
|
|
/// This is the default project with the user-managed host code.
|
|
/// It is different than the "module" template in that it exposes and doesn't
|
|
/// manage the platform code.
|
|
app,
|
|
/// The is a project that has managed platform host code. It is an application with
|
|
/// ephemeral .ios and .android directories that can be updated automatically.
|
|
module,
|
|
/// This is a Flutter Dart package project. It doesn't have any native
|
|
/// components, only Dart.
|
|
package,
|
|
/// This is a native plugin project.
|
|
plugin,
|
|
}
|
|
|
|
String flutterProjectTypeToString(FlutterProjectType type) {
|
|
return getEnumName(type);
|
|
}
|
|
|
|
FlutterProjectType? stringToProjectType(String value) {
|
|
FlutterProjectType? result;
|
|
for (final FlutterProjectType type in FlutterProjectType.values) {
|
|
if (value == flutterProjectTypeToString(type)) {
|
|
result = type;
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// A wrapper around the `.metadata` file.
|
|
class FlutterProjectMetadata {
|
|
FlutterProjectMetadata(
|
|
File metadataFile,
|
|
Logger logger,
|
|
) : _metadataFile = metadataFile,
|
|
_logger = logger;
|
|
|
|
final File _metadataFile;
|
|
final Logger _logger;
|
|
|
|
String? get versionChannel => _versionValue('channel');
|
|
String? get versionRevision => _versionValue('revision');
|
|
|
|
FlutterProjectType? get projectType {
|
|
final dynamic projectTypeYaml = _metadataValue('project_type');
|
|
if (projectTypeYaml is String) {
|
|
return stringToProjectType(projectTypeYaml);
|
|
} else {
|
|
_logger.printTrace('.metadata project_type version is malformed.');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
YamlMap? _versionYaml;
|
|
String? _versionValue(String key) {
|
|
if (_versionYaml == null) {
|
|
final dynamic versionYaml = _metadataValue('version');
|
|
if (versionYaml is YamlMap) {
|
|
_versionYaml = versionYaml;
|
|
} else {
|
|
_logger.printTrace('.metadata version is malformed.');
|
|
return null;
|
|
}
|
|
}
|
|
if (_versionYaml != null && _versionYaml!.containsKey(key) && _versionYaml![key] is String) {
|
|
return _versionYaml![key] as String;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
YamlMap? _metadataYaml;
|
|
dynamic _metadataValue(String key) {
|
|
if (_metadataYaml == null) {
|
|
if (!_metadataFile.existsSync()) {
|
|
return null;
|
|
}
|
|
dynamic metadataYaml;
|
|
try {
|
|
metadataYaml = loadYaml(_metadataFile.readAsStringSync());
|
|
} on YamlException {
|
|
// Handled in return below.
|
|
}
|
|
if (metadataYaml is YamlMap) {
|
|
_metadataYaml = metadataYaml;
|
|
} else {
|
|
_logger.printTrace('.metadata is malformed.');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return _metadataYaml![key];
|
|
}
|
|
}
|