Flutter:将传递的参数更改为“StatefulWidget”

Posted

技术标签:

【中文标题】Flutter:将传递的参数更改为“StatefulWidget”【英文标题】:Flutter: Change the parameter passed to a "StatefulWidget" 【发布时间】:2019-10-08 06:38:48 【问题描述】:

我有一个名为BounceContainerStatefulWidget。这个类包含一个参数child,就像一个典型的 Flutter 小部件。基本上,只要用户点击它,它就会反弹child。我现在传递 child 参数的方式如下:

class BounceContainer extends StatefulWidget 
    final Widget child;                 // Declaring "child"
    BounceContainer(this.child);      // Initializing "child"

    // Passing "child" to State

    @override
    _BounceContainerState createState() => _BounceContainerState(this.child);


class _BounceContainerState extends State<BounceContainer> 
    Widget child;
    _BounceContainerState(this.child);  // Receiving "child"

    @override 
    Widget build(BuildContext context) 
        ...
    

在这种情况下,问题是即使child 参数发生变化,child 本身也不会更新。

例如,如果我有一个按钮,其颜色从灰色变为基于AnimationController 的任意随机颜色,并且我将此按钮作为child 参数传递给BounceContainer 类,则该按钮仍保持灰色并调用@987654330 @ (来自主程序或BounceContainer 类)也不会强制更新 child 小部件。

解决此问题的正确方法(也是有效方法)是什么?

【问题讨论】:

您不需要将所有参数传递给 State 类。您可以通过widget.child访问。 @siega 谢谢这对我有用! ✌ @siega 是好习惯吗?我经常使用它,但不知道它的副作用 我觉得这里最大的好处就是减少了代码。否则,如果您有 10 个参数,则需要在 State 中创建 10 个属性,并通过构造函数传递所有这些值。 @dubace 【参考方案1】:

您不需要将所有参数传递给 State 类。您可以通过widget.child 访问它们

【讨论】:

以上是关于Flutter:将传递的参数更改为“StatefulWidget”的主要内容,如果未能解决你的问题,请参考以下文章

无法将flutter现有项目更改为flutter web

Flutter 响应式设计:如果屏幕更大,动态将 Column 更改为 Row

如何在 KivyMD 屏幕之间传递参数?

如何将 api_token 参数更改为一些自定义参数,如 api_key 或 key

如何将 Flutter 标签栏指示器更改为与 google play store 完全相同

springboot 参数可以是数组吗