如何从子小部件调用父小部件中的函数 |扑

Posted

技术标签:

【中文标题】如何从子小部件调用父小部件中的函数 |扑【英文标题】:How to Call a function in parent widget from child widget | Flutter 【发布时间】:2021-12-30 01:55:52 【问题描述】:

我有一个父子小部件。父小部件具有功能。我想从我的子小部件中调用该函数(myParentFunction)。这是父小部件,

class ParentWidget extends StatelessWidget 

  void myParentFunction() 
    print("This is print from parent");
  

  @override
  Widget build(BuildContext context) 
    return Center(
      child: MyCustomButton(),
    );
  


这是子部件

class MyCustomButton extends StatelessWidget 

  void myChildFunction() 
    print("This is print from child");
    //Here i want to call the myParentFunction()
  

  @override
  Widget build(BuildContext context) 
    return ElevatedButton(
      child: Text('Press'),
      onPressed: () 
        newFunction();
      ,
    );
  

这里的预期结果是当我按下“按下”按钮时,我希望输出为This is print from child This is print from parent。我如何重写此代码以获得该功能。

【问题讨论】:

【参考方案1】:

使用回调函数


class ParentWidget extends StatelessWidget 
  void myParentFunction() 
    print("This is print from parent");
  

  @override
  Widget build(BuildContext context) 
    return Center(
      child: MyCustomButton(
        callback: () 
          myParentFunction();
        ,
      ),
    );
  


class MyCustomButton extends StatelessWidget 
  final VoidCallback callback;
  MyCustomButton(
    Key? key,
    required this.callback,
  ) : super(key: key);
  void myChildFunction() 
    print("This is print from child");
    //Here i want to call the myParentFunction()
  

  @override
  Widget build(BuildContext context) 
    return ElevatedButton(
      child: Text('Press'),
       onPressed: () 
        callback();
      ,
    );
  

【讨论】:

【参考方案2】:

您应该传递函数并在子窗口小部件中调用

class ParentWidget extends StatelessWidget 

  void myParentFunction() 
    print("This is print from parent");
  

  @override
  Widget build(BuildContext context) 
    return Center(
      child: MyCustomButton(myParentFunction),
    );
  


class MyCustomButton extends StatelessWidget 

final Function onTap;

MyCustomButton(this.onTap);
  @override
  Widget build(BuildContext context) 
    return ElevatedButton(
      child: Text('Press'),
      onPressed: onTap,
    );
  


【讨论】:

以上是关于如何从子小部件调用父小部件中的函数 |扑的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 QEvent 传播到 Qt/PyQt 中的父小部件

Flutter - 无法从父小部件更改子状态

从dijit内部调用父小部件函数复选框更改函数在dgrid内部lopcated

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

Flutter:在 Navigation.pop 上刷新父小部件

如何布局 GridView.count 以便小部件从 Flutter 中的父小部件顶部开始构建?