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())说它只能用于异步函数