有没有办法访问该文件Dart应用程序中pubspec.yaml文件中列出的某些属性?
特别是,在版本信息对话框中看到版本和描述属性可能非常有用,或者在使用控制台应用程序时甚至是“--version”。我无法在API中找到访问方式。我不确定Mirrors是否有任何合适的东西,但如果一个Web应用程序被编译为JS,那么我在输出JS的任何地方都看不到描述。
感谢。
修改
功能请求:https://code.google.com/p/dart/issues/detail?id=18769
答案 0 :(得分:12)
您可以安装“dart_config”包并使用此代码解析pubspec.yaml文件:
import 'package:dart_config/default_server.dart';
import 'dart:async';
void main() {
Future<Map> conf = loadConfig("../pubspec.yaml");
conf.then((Map config) {
print(config['name']);
print(config['description']);
print(config['version']);
print(config['author']);
print(config['homepage']);
print(config['dependencies']);
});
}
输出类似于:
test_cli
A sample command-line application
0.0.1
Robert Hartung
URL
{dart_config: any}
修改强>
您可以使用Yaml包本身:
import 'package:yaml/yaml.dart';
import 'dart:io';
void main() {
File f = new File("../pubspec.yaml");
f.readAsString().then((String text) {
Map yaml = loadYaml(text);
print(yaml['name']);
print(yaml['description']);
print(yaml['version']);
print(yaml['author']);
print(yaml['homepage']);
print(yaml['dependencies']);
});
}
关心罗伯特
答案 1 :(得分:5)
以上答案均不适合我,但这是 Flutter 应用的有效解决方案:
在您的pubspec.yaml中,将“ pubspec.yaml”添加到资产:
assets:
- assets/
- pubspec.yaml
如果您有一个小部件,需要在其中显示如下应用程序版本:
...
Container(
child: Text('Version: 1.0.0+1'),
),
...
用这样的FutureBuilder包装小部件:
import 'package:flutter/services.dart';
import 'package:yaml/yaml.dart';
...
FutureBuilder(
future: rootBundle.loadString("pubspec.yaml"),
builder: (context, snapshot) {
String version = "Unknown";
if (snapshot.hasData) {
var yaml = loadYaml(snapshot.data);
version = yaml["version"];
}
return Container(
child: Text(
'Version: $version'
),
);
}),
...
服务rootBundle属性包含构建应用程序时与应用程序打包的资源。
如果要显示不带内部版本号的版本,可以像这样拆分字符串:
'Version: ${version.split("+")[0]}'
答案 2 :(得分:2)
仅适用于 Flutter(Web
、Android
和 IOS
)...自 2020 年 10 月起
如果您希望您的应用在 Web
上运行,Android
和 IOS
使用“Package info_plus”代替。
答案 3 :(得分:1)
我知道OP希望阅读YAML
,但对于开发者来说,您可以使用package_info阅读应用程序的版本和其他信息。
这是从Android / iOS应用程序获取详细信息的示例。
import 'package:package_info/package_info.dart';
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;
答案 4 :(得分:0)
因此,假设这是针对dart cli应用程序的,则@Robert建议将不起作用。
dart_config不适用于dart 2.x,除非您处于开发环境中,否则您的pubspec.yaml不会与cwd相关。
因此,您需要获取相对于库可执行文件路径的pubspec.yaml。
此示例使用“路径”包,但这不是必需的。
这可以通过以下方式获得:
import 'package:path/path.dart';
String pathToYaml = join(dirname(Platform.script.toFilePath()), '../pubspec.yaml'));
您现在可以阅读Yaml:
import 'package:path/path.dart';
String pathToYaml = join(dirname(Platform.script.toFilePath()), '../pubspec.yaml'));
File f = new File(pathToYaml);
String yamlText = f.readAsStringSync();
Map yaml = loadYaml(yamlText);
print(yaml['name']);
print(yaml['description']);
print(yaml['version']);
print(yaml['author']);
print(yaml['homepage']);
print(yaml['dependencies']);
});