Flutter 异步接收完成后如何更新小部件?
异步接收完成后如何更新文本小部件Flutter 异步接收完成后如何更新小部件?,flutter,Flutter,异步接收完成后如何更新文本小部件 //it is a stateless widget @override Widget build(BuildContext context) { String appName = ''; PackageInfo.fromPlatform().then((PackageInfo packageInfo) { appName = packageInfo.appName; print('$appName');
//it is a stateless widget
@override
Widget build(BuildContext context) {
String appName = '';
PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
appName = packageInfo.appName;
print('$appName');
});
return Column(
children: <Widget>[
Text('$appName'), //how to update this widget?
//它是一个无状态小部件
@凌驾
小部件构建(构建上下文){
字符串appName='';
PackageInfo.fromPlatform().then((PackageInfo-PackageInfo){
appName=packageInfo.appName;
打印(“$appName”);
});
返回列(
儿童:[
Text(“$appName”),//如何更新此小部件?
使用有状态小部件并设置如下状态
PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
setState(() {
appName = packageInfo.appName;
});
print('$appName');
});
您只需使用
FutureBuilder
只需包装您的文本
,然后检查快照值
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FutureBuilder<PackageInfo>(
future: PackageInfo.fromPlatform(),
builder: (context, snapshot) {
return Text(snapshot.hasData ? snapshot.data.appName : "");
}
),
),
);
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:中(
孩子:未来建设者(
future:PackageInfo.fromPlatform(),
生成器:(上下文,快照){
返回文本(snapshot.hasData?snapshot.data.appName:);
}
),
),
);
}
通过statefulwidget调用setstate我猜您的widget必须是Stateful,然后使用setstate更改值对于简单的将来有更好的解决方案,您可以使用FutureBuilder!对于简单的将来和文本,建议使用FutureBuilder而不是更改为statefulwidget