Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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
Android 如何使用async返回字符串_Android_Ios_Flutter_Dart - Fatal编程技术网

Android 如何使用async返回字符串

Android 如何使用async返回字符串,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我正在努力从异步方法返回字符串值 这是我的实用程序类: class Utilities { Future<PackageInfo> getPackageInfo() async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); return packageInfo; } String getVersion() { String version; getPackag

我正在努力从异步方法返回字符串值

这是我的实用程序类:

class Utilities {

  Future<PackageInfo> getPackageInfo() async {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    return packageInfo;
  }

  String getVersion() {
    String version;
    getPackageInfo().then((PackageInfo pi) {
      version = pi.version;
    });
    return version;
  }

}
我总是在Text()小部件中遇到空值错误


我做错了什么

您正在返回正常的
字符串
,而您应该在
将来将其包装起来

Future<String> getVersion() async => getPackageInfo().then((PackageInfo pi) => pi.version);

您正在返回正常的
字符串
,而您应该在
将来将其包装起来

Future<String> getVersion() async => getPackageInfo().then((PackageInfo pi) => pi.version);

getVersion方法中的代码异步执行。表示函数将在调用/执行then子句之前返回way,因此它返回空值并导致空值错误

如果您的UI依赖于将来的使用。用以下代码替换文本小部件:

FutureBuilder<String>(
    future: getVersion(),
    builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
      if (snapshot.hasData) {
        return Text(snapshot.data);
      } else if (snapshot.hasError) {
        return Text('Oh no!!!');
      } else {
        return CircularProgressIndicator()
      },
   },
),
FutureBuilder(
future:getVersion(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
返回文本(snapshot.data);
}else if(snapshot.hasrerror){
返回文本(“哦,不!!!”);
}否则{
返回循环ProgressIndicator()
},
},
),
并更改getVersion方法,如:

Future<String> getVersion() async {
  PackageInfo pi = await getPackageInfo();
  return pi.version;
}
Future getVersion()异步{
PackageInfo pi=等待getPackageInfo();
返回pi.version;
}

getVersion方法中的代码异步执行。表示函数将在调用/执行then子句之前返回way,因此它返回空值并导致空值错误

如果您的UI依赖于将来的使用。用以下代码替换文本小部件:

FutureBuilder<String>(
    future: getVersion(),
    builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
      if (snapshot.hasData) {
        return Text(snapshot.data);
      } else if (snapshot.hasError) {
        return Text('Oh no!!!');
      } else {
        return CircularProgressIndicator()
      },
   },
),
FutureBuilder(
future:getVersion(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
返回文本(snapshot.data);
}else if(snapshot.hasrerror){
返回文本(“哦,不!!!”);
}否则{
返回循环ProgressIndicator()
},
},
),
并更改getVersion方法,如:

Future<String> getVersion() async {
  PackageInfo pi = await getPackageInfo();
  return pi.version;
}
Future getVersion()异步{
PackageInfo pi=等待getPackageInfo();
返回pi.version;
}

那么我如何在UI中调用getVersion()方法?请使用future builder,注意:您的名字符合刚才发生的情况,在编辑我的答案之前,我必须三思:)文本(wait _utilities.getVersion())说它只能在异步函数中使用,那么我如何在UI中调用getVersion()方法?使用future builder,另外:你的名字和刚才发生的事情很吻合,在编辑我的答案之前我必须三思:)Text(wait_utilities.getVersion())说它只能用于异步函数