flutter - 如何从另一个小部件中的某个按钮调用 StatefulWidget 中的函数?

标签 flutter dart

如何调用movePage(page) Widget1中的函数来自 MaterialButton在小部件树中深深嵌套在下面?

请引用下面的示例代码:

class Widget1 extends StatefulWidget {
  @override
  _Widget1State createState() => _Widget1State();
}

class _Widget1State extends State<Widget1> {

  int _selectedIndex = 0;

  void movePage(page) {
    setState(() {
      _selectedIndex = page;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

///Somewhere nested down below within another widget in the widget tree
class Widget12 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialButton(onPressed: () => {});
  }
}

最佳答案

您可以将其传递给构造函数。试试这个 DartPad .

class Widget1 extends StatefulWidget {
  @override
  _Widget1State createState() => _Widget1State();
}

class _Widget1State extends State<Widget1> {
  int _selectedIndex = 0;

  void movePage(int page) => setState(() => _selectedIndex += page);

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('$_selectedIndex'),
        Widget2(func: movePage),
      ],
    );
  }
}

class Widget2 extends StatelessWidget {
  final void Function(int) func;

  const Widget2({Key key, @required this.func}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialButton(
      /// Try with any number.
      onPressed: () => func(2),
      child: Text('button'),
    );
  }
}

关于flutter - 如何从另一个小部件中的某个按钮调用 StatefulWidget 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59808717/

相关文章:

flutter - 如何以编程方式在 flutter 中使用后退选项

flutter - 如何初始化flutter Multi Provider所有providers数据?

flutter - Flutter TextFormField装饰

initState 方法中的 Flutter showDialog(context)

json - 从 Flutter 中的 Json 错误解析日期时间

dart - 与最高 child 一样高并允许其他 child CrossAxisAlignment.stretch 的行

flutter - 如何通过 Dart 解码波纹管类型的json

flutter - 在 flutter 中实现像香奈儿应用程序一样的自定义滚动?

firebase - "The operator ' [] ' isn' t defined"在flutter firestore 中使用.data[] 时出现错误

flutter - 使用 onPressed 切换到另一个屏幕无法正常工作