从Dart应用程序访问pubspec.yaml属性(版本)
是否有任何方法可以访问该文件Dart应用程序中pubspec.yaml文件中列出的某些属性 特别是,版本和描述属性可能非常有用,可以在版本信息对话框中查看,甚至在使用控制台应用程序时在“--version”中查看。我还没有找到在API中访问的方法。我不确定镜像是否有合适的内容,但是如果一个web应用被编译成JS,那么我在输出JS中的任何地方都看不到描述 谢谢 编辑从Dart应用程序访问pubspec.yaml属性(版本),dart,Dart,是否有任何方法可以访问该文件Dart应用程序中pubspec.yaml文件中列出的某些属性 特别是,版本和描述属性可能非常有用,可以在版本信息对话框中查看,甚至在使用控制台应用程序时在“--version”中查看。我还没有找到在API中访问的方法。我不确定镜像是否有合适的内容,但是如果一个web应用被编译成JS,那么我在输出JS中的任何地方都看不到描述 谢谢 编辑 功能请求:您可以安装“dart\u config”软件包,并使用此代码解析pubspec.yaml文件: import'packag
功能请求:您可以安装“dart\u config”软件包,并使用此代码解析pubspec.yaml文件:
import'package:dart_config/default_server.dart';
导入“dart:async”;
void main(){
Future conf=loadConfig(“../pubspec.yaml”);
conf.then((映射配置){
打印(配置['name']);
打印(配置['description']);
打印(配置[版本]);
打印(配置['author']);
打印(配置[主页]);
打印(配置['dependencies']);
});
}
输出与此类似:
test_cli
A sample command-line application
0.0.1
Robert Hartung
URL
{dart_config: any}
编辑
您可以使用Yaml软件包本身执行此操作:
*注意:这在颤振腹板上不起作用
import'包:yaml/yaml.dart';
导入“dart:io”;//**注***这在颤振腹板上不起作用
void main(){
文件f=新文件(“../pubspec.yaml”);
f、 readAsString()。然后((字符串文本){
Map yaml=loadYaml(文本);
印刷品(yaml['name']);
印刷品(yaml[“说明]);
印刷品(yaml[版本]);
印刷品(yaml[“作者]);
印刷(yaml[“主页]);
打印(yaml[“依赖项]);
});
}
只为颤振向罗伯特致意 我知道OP想要阅读
YAML
,但是对于Flatter dev,你们可以使用它来阅读应用程序的版本和其他信息
这是从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;
因此,假设这是针对dart cli应用程序的,@Robert建议将不起作用 dart_配置不适用于dart 2.x,并且您的pubspec.yaml不会与您的cwd相关,除非您在开发环境中 因此,需要获取相对于库可执行路径的pubspec.yaml 此示例使用“路径”包,但不是必需的 这可通过以下方式获得:
import'package:path/path.dart';
字符串pathtoyml=join(dirname(Platform.script.toFilePath()),“../pubspec.yaml”);
您现在可以阅读yaml:
import'package:path/path.dart';
进口“包装:yaml/yaml.dart”;
字符串pathtoyml=join(dirname(Platform.script.toFilePath()),“../pubspec.yaml”);
文件f=新文件(路径YAML);
字符串yamlText=f.readAsStringSync();
Map yaml=loadYaml(yamlText);
印刷品(yaml['name']);
印刷品(yaml[“说明]);
印刷品(yaml[版本]);
印刷品(yaml[“作者]);
印刷(yaml[“主页]);
打印(yaml[“依赖项]);
});
以上答案对我都不起作用,但这里有一个颤振应用程序的有效解决方案:
在pubspec.yaml中,将“pubspec.yaml”添加到资产:
assets:
- assets/
- pubspec.yaml
如果您有一个小部件,需要在其中显示应用程序版本,如下所示:
...
Container(
child: Text('Version: 1.0.0+1'),
),
...
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'
),
);
}),
...
用FutureBuilder包装您的小部件,如下所示:
...
Container(
child: Text('Version: 1.0.0+1'),
),
...
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'
),
);
}),
...
services属性包含构建应用程序时随应用程序打包的资源
如果要显示不带内部版本号的版本,可以按如下方式拆分字符串:
'Version: ${version.split("+")[0]}'
更新:正如@wildsurfer所提到的,这种方法在web开发中存在潜在的安全风险,因为pubspec.yaml是与浏览器共享的 仅适用于颤振(Web
、Android
和IOS
)。。。自2020年10月起
如果你想让你的应用程序在
Web
上运行,Android
和IOS
可以使用“”。我还没有看到类似的东西。我建议您在dartbug.com上提出功能请求。我觉得这是一个很有趣的主意。我会的。谢谢,甘特。你需要向弗利特,而不是飞镖提出建议。飞镖配置解决方案应该很有效。非常感谢您的提醒,Robert。@Robert有什么好方法可以对这两种解决方案进行单元测试吗?但是,您能在与主题完全无关的颤振应用程序中使用此方法阅读pubspec.yaml吗?我同意您的看法。但是,我已经给出了免责声明,这是为颤栗,开发人员阅读版本和其他信息。别误会我。我确实遵循StackOverflow的指导原则:)很抱歉我投了反对票,但我同意@AndreCytryn的观点。问题是关于阅读pubspec.yaml属性,而不是获取软件包信息。如果你想让你的应用程序在Web上运行,Android和IOS使用“软件包信息”\u plus@AlexCorreia请将您的评论作为答案发布,以便进行投票。其他需要访问该文件的解决方案对web无效。您的建议非常好。一种更简单的方法,无需使用第三方软件包:)请注意,当您在Flatter web应用程序中使用这种方法时,您的pubspec.yml文件将由浏览器获取。这是一个潜在的安全风险。谢谢,它做得很好