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