有没有办法访问该文件Dart应用程序中pubspec.yaml文件中列出的一些属性?
特别是,在版本信息对话框中看到版本和描述属性非常有用,或者在使用控制台应用程序时甚至是"--version".我无法在API中找到访问方式.我不确定Mirrors是否有任何合适的东西,但如果一个Web应用程序被编译为JS,那么我在输出JS的任何地方都看不到描述.
谢谢.
编辑
功能请求:https://code.google.com/p/dart/issues/detail?id = 18769
Jaw*_*ngh 25
仅适用于颤振
请使用来自 flutter 社区的这个新包package_info_plus。
import 'package:package_info_plus/package_info_plus.dart';
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;
Run Code Online (Sandbox Code Playgroud)
我知道 OP 想要阅读,YAML但对于 Flutter 开发者,你们可以使用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;
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 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']);
});
}
Run Code Online (Sandbox Code Playgroud)
输出看起来类似于:
test_cli
A sample command-line application
0.0.1
Robert Hartung
URL
{dart_config: any}
Run Code Online (Sandbox Code Playgroud)
编辑
您可以使用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']);
});
}
Run Code Online (Sandbox Code Playgroud)
关心罗伯特
小智 10
以上答案都不适合我,但这是Flutter应用程序的有效解决方案:
在您的 pubspec.yaml 中,将“pubspec.yaml”添加到资产中:
assets:
- assets/
- pubspec.yaml
Run Code Online (Sandbox Code Playgroud)
如果您有一个小部件,您需要像这样显示应用程序版本:
...
Container(
child: Text('Version: 1.0.0+1'),
),
...
Run Code Online (Sandbox Code Playgroud)
像这样用 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'
),
);
}),
...
Run Code Online (Sandbox Code Playgroud)
services rootBundle属性包含应用程序构建时打包的资源。
如果要显示没有内部版本号的版本,可以像这样拆分字符串:
'Version: ${version.split("+")[0]}'
Run Code Online (Sandbox Code Playgroud)
更新:正如@wildsurfer 所提到的,这种方法在 Web 开发中存在潜在的安全风险,因为 pubspec.yaml 与浏览器共享!
您可以使用Dart 团队的pubspec.yaml官方包访问属性。pubspec_parse
dart pub add pubspec_parse
Run Code Online (Sandbox Code Playgroud)
dart pub add pubspec_parse
Run Code Online (Sandbox Code Playgroud)
然后您可以访问parsed对象的类型化属性。
您可以在此处找到支持的属性:https ://pub.dev/documentation/pubspec_parse/latest/pubspec_parse/Pubspec-class.html 。
因此,假设这是针对 dart cli 应用程序,那么 @Robert 建议将不起作用。
dart_config 不适用于 dart 2.x 并且您的 pubspec.yaml 不会与您的 cwd 相关,除非您处于开发环境中
因此,您需要获取与库可执行路径相关的 pubspec.yaml。
此示例使用 'paths' 包,但不是必需的。
这可以通过以下方式获得:
import 'package:path/path.dart';
String pathToYaml = join(dirname(Platform.script.toFilePath()), '../pubspec.yaml');
Run Code Online (Sandbox Code Playgroud)
您现在可以阅读 yaml:
import 'package:path/path.dart';
import 'package:yaml/yaml.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']);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1803 次 |
| 最近记录: |