【问题标题】:flutter StreamBuilder and AnimatedWidget颤振 StreamBuilder 和 AnimatedWidget
【发布时间】:2021-05-11 04:35:25
【问题描述】:

我正在努力解决以下问题:

我使用 StreamBuilder 构建了一个小部件列表(并使其可搜索)。小部件是卡片,用户可以在其中做出选择,然后按下按钮。 一切都(曾经)工作得很好。

然后我想添加一个小动画,并使与按钮关联的图标成为动画图标。 现在一团糟,StreamBuilder 处于无限循环中,而且我的清单上也有一些问题。如果我注释掉动画图标并再次放入以前的图标...一切都开始正常工作了。

...
                child: FloatingActionButton(
                  onPressed: (){
                    addFood();
                    mealListState.getAcontroller(id).forward();
                  },
                  child:
//                    MyAddIcon(id),  //--> my animated Icon. It does not work
                  Icon(Icons.add),    //--> it works
....

我读到问题在于在流中添加状态管理 (Unnecessary Widget Rebuilds While Using Selector (Provider) inside StreamBuilder) 会使事情变得混乱,并且您必须使构建流的小部件有状态并在 initState 中设置流。 我尝试按照这种方式进行操作,但我需要上下文来构建我的卡列表,所以我可以按照上面的提示从 db (firestore) 中读取数据......这还不够

有人能给我指出正确的方向吗,或者我必须放弃这个想法并继续前进?

谢谢

【问题讨论】:

    标签: flutter stream-builder


    【解决方案1】:

    如果需要上下文,可以尝试在 State 类的 didChangeDependencies 方法中监听流。 使用stream.listen 返回的Streamsubscription 取消订阅,这样可以避免订阅两次甚至更多次:

    @override
    didChangeDependencies() {
        final stream = Provider.of<MyStream>(context); // context available here.
        if (this.streamsubscription != null) {
            this.streamsubscription.cancel();
        }
        this.streamsubscription = stream.listen((value) {
        // your callback code here
        });
        super.didChangeDependencies(); // important
    }
    

    【讨论】:

    • 感谢 Tobias,它没有用 :( 我放弃了……至少现在 :)
    猜你喜欢
    • 2019-03-13
    • 2020-12-26
    • 1970-01-01
    • 2021-11-13
    • 2019-11-05
    • 2022-06-28
    • 2020-03-01
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多