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