【问题标题】: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 { ...

【问题讨论】:

    标签: flutter dart flutter-layout flutter-dependencies dart-pub


    【解决方案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,非常感谢,不需要在堆栈中有副本
    猜你喜欢
    • 2021-04-18
    • 2021-04-19
    • 1970-01-01
    • 2021-07-30
    • 2021-09-22
    • 2019-11-02
    • 2021-03-03
    • 2021-11-20
    • 2021-06-09
    相关资源
    最近更新 更多