每当嵌套到小部件的小部件更新时,我需要更新该小部件。假设小部件A嵌套在小部件B中,顺便说一下,我们可以使用小部件A的GlobalKey(如果它可以帮助检测小部件A是否被更新的话)这里,每当小部件A被更新时,我需要更新小部件B,并且为了做到这一点,我需要检查小部件A是否被更新,如果是,那么我也将更新小部件B。
w6lpcovy1#
例如,您可以这样做:
import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: B())); } class B extends StatefulWidget { const B({super.key}); @override State<B> createState() => BState(); } class BState extends State<B> { @override Widget build(BuildContext context) { print('B updates'); return Scaffold( body: Column( children: [A(updater: update)], )); } void update() { setState(() { }); } } class A extends StatefulWidget { final Function? updater; const A({Key? key, this.updater}) : super(key: key); @override State<A> createState() => _AState(); } class _AState extends State<A> { @override void setState(VoidCallback fn) { if (widget.updater != null) widget.updater!(); super.setState(fn); } @override Widget build(BuildContext context) { return TextButton( onPressed: () { setState(() { print('clicked button'); }); }, child: const Text('click')); } }
每当点击按钮时,它会将两个“点击的按钮”打印为“B更新”。因此,每次点击时B都会重建。如果您在A中忽略setState覆盖,您将只会看到“点击的按钮”打印。
A
setState
1条答案
按热度按时间w6lpcovy1#
例如,您可以这样做:
每当点击按钮时,它会将两个“点击的按钮”打印为“B更新”。因此,每次点击时B都会重建。如果您在
A
中忽略setState
覆盖,您将只会看到“点击的按钮”打印。