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

Sim*_*pps 1 flutter

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

Ham*_*med 5

您只需向子小部件添加一个字段,然后在父小部件中更改该字段的值并调用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);
}
Run Code Online (Sandbox Code Playgroud)