如何将变量移出构建?

How to move a variable outside build?

如何将使用上下文的变量移动到构建方法之外,以便只创建一次?

class _EventListState extends State<EventList> {
  @override
  Widget build(BuildContext context) {
    final eventNotifier = EventInherited.of(context).eventNotifier;
    ...

制作

eventNotifier

class 变量并将其连接到 getter 函数。

class _EventListState extends State<EventList> {
 var? eventNotifier;
@override
  Widget build(BuildContext context) {
    eventNotifier = EventInherited.of(context).eventNotifier;
}

Dynamic get getEventNotifier => this.eventNotifier;

您可以使用 late 修饰符。

class _EventListState extends State<EventList> {
  late final eventNotifier = EventInherited.of(context).eventNotifier;
  @override
  Widget build(BuildContext context) {
    ...

您可以使用 didChangeDependencies() 方法。此时上下文可用。

@override
void didChangeDependencies(){
    super.didChangeDependencies();
    final eventNotifier = EventInherited.of(context).eventNotifier;
}

该方法在特定场景下会被再次调用,请谨慎初始化。

这个线程有更多关于何时召回的信息,但通常用于初始化侦听器是可以的。