flutter 使用继承的小部件是否会在不使用SetState的情况下重建它的子组件

fslejnso  于 2023-06-30  发布在  Flutter
关注(0)|答案(1)|浏览(152)
class InheritedRepo extends InheritedWidget {
  InheritedRepo({
    super.key,
    required super.child,
    required this.name,

  });
  String name 
  ;
  shouldDoSome() {}

  static InheritedRepo of(BuildContext context) =>
      context.dependOnInheritedWidgetOfExactType<InheritedRepo>()!;

  @override
  bool updateShouldNotify(covariant InheritedRepo oldWidget) {
    print("name:$name");
    print("oldWidget.name:${oldWidget.name}");

 
    return true;
  }
}
ElevatedButton(
      onPressed: () {
       Navigator.of(context).push(
       MaterialPageRoute(
       builder: (context) =>
        InheritedRepo(
        name: 'some name',
        child: const FilePickerScreen()),
         ),
       );
      },
       child: const Text("Filepicker Screen"),
     ),

我创建了一个继承的小部件,但当我试图修改name变量的值时,子部件没有重建,即使updateShouldNotify没有调用,print语句也没有执行

0kjbasz6

0kjbasz61#

我不认为InheritedWidget会在属性发生变化时自动触发其子widget的重建,InheritedWidget是将状态共享给其他后代widget的另一种方式,它没有重建widget的功能。并且还用于updateShouldNotify方法,以确定是否应将更改通知小部件的后代。但不会直接触发重建因此,您需要添加setState来重绘widget并重建UI。h以下文档可能会有所帮助:https://api.flutter.dev/flutter/widgets/State/setState.html

相关问题