如何从父窗口小部件调用子窗口小部件的setState?

时间:2020-03-24 11:48:00

标签: flutter

每当用户单击设备的后退按钮时,我需要在子窗口小部件内更改一个变量值,然后调用setState()。问题是,当我单击后退按钮时,将调用父窗口小部件的onWillPopScope()而不是子窗口小部件的onWillPopScope()。因此,我需要从父级更改子窗口小部件状态的变量值,并在子窗口小部件内调用setstate()。或者,如果有一种方法可以调用子窗口小部件的onWillPopScope,它也可以解决我的问题。我有什么可以做的吗?

1 个答案:

答案 0 :(得分:2)

您只需要向子窗口小部件添加一个字段,然后在父窗口小部件中更改该字段的值并调用setState()

import 'package:flutter/material.dart';

class Parent extends StatefulWidget {
  @override
  _ParentState createState() => _ParentState();
}

class _ParentState extends State<Parent> {
  String _text;

  @override
  Widget build(BuildContext context) => Column(
        children: <Widget>[
          Child(param: _text),
          RaisedButton(
            child: const Text('CHANGE VALUE'),
            onPressed: () => _updateChild('NEW VALUE'),
          )
        ],
      );

  void _updateChild(String value) {
    _text = value;

    setState(() {});
  }
}

class Child extends StatefulWidget {
  final String param;

  const Child({this.param});

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

class _ChildState extends State<Child> {
  @override
  Widget build(BuildContext context) => Text(widget.param);
}