我正在努力从异步方法返回字符串值。
这是我的实用程序类:
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/