Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Dart应用程序访问pubspec.yaml属性(版本)_Dart - Fatal编程技术网

从Dart应用程序访问pubspec.yaml属性(版本)

从Dart应用程序访问pubspec.yaml属性(版本),dart,Dart,是否有任何方法可以访问该文件Dart应用程序中pubspec.yaml文件中列出的某些属性 特别是,版本和描述属性可能非常有用,可以在版本信息对话框中查看,甚至在使用控制台应用程序时在“--version”中查看。我还没有找到在API中访问的方法。我不确定镜像是否有合适的内容,但是如果一个web应用被编译成JS,那么我在输出JS中的任何地方都看不到描述 谢谢 编辑 功能请求:您可以安装“dart\u config”软件包,并使用此代码解析pubspec.yaml文件: import'packag

是否有任何方法可以访问该文件Dart应用程序中pubspec.yaml文件中列出的某些属性

特别是,版本和描述属性可能非常有用,可以在版本信息对话框中查看,甚至在使用控制台应用程序时在“--version”中查看。我还没有找到在API中访问的方法。我不确定镜像是否有合适的内容,但是如果一个web应用被编译成JS,那么我在输出JS中的任何地方都看不到描述

谢谢

编辑
功能请求:

您可以安装“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文件将由浏览器获取。这是一个潜在的安全风险。谢谢,它做得很好