android - 如何使用异步返回字符串

标签 android ios flutter dart

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

这是我的实用程序类:

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;
  }

}

这是我的UI,我在其中调用getVersion方法:
class abc extends StatelessWidget {

  Utilities _utilities = new Utilities();

  @override
  Widget build(BuildContext context) {
  ...
  Text(_utilities.getVersion()),
  ...

}

我总是在Text()小部件上收到空值错误。

我究竟做错了什么?

最佳答案

您将返回正常的String,而应将其包装在Future中:

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

然后Text小部件变为:
FutureBuilder<String>(
                    future: getVersion(),
                    builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
                     if(snapshot.connectionState==ConnectionState.waiting)
                       return CircularProgressIndicator();
                     else if(snapshot.connectionState==ConnectionState.done && snapshot.hasData)
                       return Text(snapshot.data);
                     //handle other connection statuses
                    }
                ),

关于android - 如何使用异步返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373114/

相关文章:

ios - 带有 UIPanGestureRecognizer 的 UIView 动画速度太快(不减速)

ios - 设置 UITableView 的框架以匹配其内容大小

ios - 带有投影的 UISplitViewController 可能吗?

android - 以编程方式重启应用程序?

android - 运行我的第一个 android 程序时出现问题

flutter - 如何在文本字段中添加图标

使用 easy_localization 和大翻译 json 文件进行 Flutter 测试

listview - Flutter:使用 ListView 实现对来自 StreamBuilder 的数据的搜索功能

android - 如何检测 TileOverlay 何时完成下载瓦片?

android - 如何检查一个 Activity 是否是应用程序 Activity 堆栈中的最后一个 Activity ?