是刷新小部件的方法,它是颤动的关键

Posted

技术标签:

【中文标题】是刷新小部件的方法,它是颤动的关键【英文标题】:Is the way to refresh widget with it's key in flutter 【发布时间】:2020-07-27 10:53:39 【问题描述】:

这是我使用它作为刷新我的小部件的功能的小部件(它通常是一个具有 onpressed 功能的浮动按钮),所以我想在这里使用我的小部件的键来刷新我的小部件

Widget floatingButton(int index)
    if(index == 0)
        return FloatingActionButton(
            backgroundColor: Color.fromRGBO(29, 142, 41,1),
            disabledElevation: 12,
            child: Icon(Icons.refresh),
            onPressed: ()  
                prefix0.Dashboard k = new prefix0.Dashboard();
                k.createState().reassemble();
            );
        
    else return null;

这是我想要刷新的小部件,它的键 "refresh" 在未来的构建器中

FutureBuilder(
    key: refrKey,
    future: model.tData(),
    builder: (context, snapshot) 
        if (snapshot.connectionState == ConnectionState.done) 
            if (snapshot.data == null) 
                return Center(
                    child: Column(children: [
                        SizedBox(
                            height: MediaQuery.of(context).size.height / 6,),
                        Text('no data')
                     ]));
             else  ...

【问题讨论】:

【参考方案1】:

setState() 方法将启动重新渲染状态实际所属的 UI 小部件。 setState() 方法不会像@Omi 所说的那样启动重新渲染整个 UI。可以参考Adding interactivity to your app的官方文章。如果您已正确管理状态,它应该会在调用 setState() 时自动反映在 UI 中。

【讨论】:

nop,setstate() 反应不佳,因为我打算检查下面的解决方案是否适合我【参考方案2】:

我已经得到了答案; `

 onPressed: ()  
        Navigator.push(    context, new MaterialPageRoute(
                                        builder: (context) => this.build(context)));
   ,

` 而不是使用 setState() 这不是我想要的,我通过再次调用自身来重建整个小部件并使其刷新

【讨论】:

我看到您正在将页面推送到导航器堆栈上,因此一旦您点击后退按钮或弹出屏幕,您将返回到同一页面,因为堆栈上有两个页面副本.如果这对您有帮助,那么使用 pushReplacement 应该可以工作 是的@ShubhamGupta,非常感谢,不需要在堆栈中有副本

以上是关于是刷新小部件的方法,它是颤动的关键的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中从父小部件调用子小部件的initState()方法

如何在颤动中截取屏幕之外的小部件屏幕截图?

如何在颤动中加载主小部件之前显示加载小部件?

为啥小部件的状态在颤动时没有改变?

创建一个在颤动中创建小部件的按钮[关闭]

我们如何在颤动中拖动小部件时实现定位线?