flutter - 当子小部件更改 Flutter 时,更改父变量并重建父小部件

标签 flutter dart state-management

我有一个屏幕小部件和一个自定义小部件。我想在按下自定义小部件的按钮时更改屏幕小部件的值。只是为了展示一个例子;

这是 MyScreen 小部件,它使用 CustomWidget 作为子项:

import './widgets/my_custom_widget.dart';
class MyScreen extends StatefulWidget {

  @override
  _MyScreen createState() => _MyScreenState();
}

class _MyScreen extends State<MyScreen> {
 bool isChildButtonPressed = false;
  @override
  Widget build(BuildContext context) {
    return Container(
         child:MyCustomWidget());
    }
}

这是 MyCustomWidget
class MyCustomWidget extends StatefulWidget {

  @override
  _MyCustomWidget createState() => _MyCustomWidget();
}

class _MyCustomWidget extends State<MyCustomWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
        width:200,
        height:200,
         child: Row(children:[
                  FlatButton(child:Text("I am child button"),onPressed:(){
                     //what should I do here to change MyScreen isChildButtonPressed to true? 

                       }),
                  ]
             )
        );
    }
}


上面的代码只是我想要实现的一个例子,但在我的应用程序中,我有一个很长的子小部件多个按钮,我想将小部件存储在一个单独的文件中,但我想在子部件的按钮被按下。

我能做的是将父变量声明为全局变量,然后使用 ValueNotifier 但我认为这不是解决这个问题的好方法,因为我只需要一个屏幕中的这些变量,而不是我的整个应用程序。

我不认为我可以使用 Provider 包,因为它只重建子小部件而不是父小部件。

所以你有什么建议?

谢谢

最佳答案

您可以在您的 中创建一个文件。自定义小部件 onFlatButtonPressed .该字段将是回调函数或 VoidCallBack 然后在您的 中按下平面按钮时调用该函数自定义小部件 并在您的 **MyScreen* 中定义函数

像这样

class MyScreen extends StatefulWidget {
  @override
  _MyScreenState createState() => _MyScreenState();
}

class _MyScreenState extends State<MyScreen> {
  bool isChildButtonPressed = false;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: MyCustomWidget(
        onFlatButtonPressed: (){
          setState(() {
            //Write what you want to do here
          });
        },
      ),
    );
  }
}

class MyCustomWidget extends StatefulWidget {
  final VoidCallback onFlatButtonPressed;

  MyCustomWidget({@required this.onFlatButtonPressed});

  @override
  _MyCustomWidget createState() => _MyCustomWidget();
}

class _MyCustomWidget extends State<MyCustomWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 200,
      height: 200,
      child: Row(
        children: [
          FlatButton(child: Text("I am child button"), onPressed: widget.onFlatButtonPressed),
        ],
      ),
    );
  }
}

关于flutter - 当子小部件更改 Flutter 时,更改父变量并重建父小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011385/

相关文章:

javascript - react-query:仅在状态变量更改时重新获取查询

Flutter:文本 fontSize 不缩放

flutter - Flutter应用程序无法渲染,出现错误 “Bottom overflowed by infinite pixels”

flutter - 如何模糊一列中的多个图像?

dart - 如何在 flutter 中绘制一个扇区?

flutter - 如何在父/根窗口小部件中初始化数据模型错误:只能在初始化程序中访问静态成员

c# - 如何通过回发保存数据?

android - 文本小部件中数字数据的百分比波动

list - 如何在保留顺序的同时删除列表中的重复元素?

asp.net - ASP.NET 服务器如何知道 session 何时终止?