flutter 跟踪不同微件的微件更新

sqserrrh  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(121)

每当嵌套到小部件的小部件更新时,我需要更新该小部件。假设小部件A嵌套在小部件B中,顺便说一下,我们可以使用小部件A的GlobalKey(如果它可以帮助检测小部件A是否被更新的话)这里,每当小部件A被更新时,我需要更新小部件B,并且为了做到这一点,我需要检查小部件A是否被更新,如果是,那么我也将更新小部件B。

w6lpcovy

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覆盖,您将只会看到“点击的按钮”打印。

相关问题