【问题标题】:Initializing bloc in provider constructor vs initializing inline declaration of the bloc instance variable在提供者构造函数中初始化 bloc 与初始化 bloc 实例变量的内联声明
【发布时间】:2019-10-16 11:19:52
【问题描述】:

创建一个扩展InheritedWidget的Bloc Provider类后,在Provider构造函数中初始化bloc实例变量和在声明变量时初始化有什么区别?

class CommentsProvider extends InheritedWidget {

  final CommentsBloc bloc;

  CommentsProvider({Key key, Widget child})
    : bloc = CommentsBloc(),
      super(key: key, child: child);
}

class CommentsProvider extends InheritedWidget {

  final CommentsBloc bloc = CommentsBloc();

  CommentsProvider({Key key, Widget child})
    : super(key: key, child: child);
}

【问题讨论】:

    标签: flutter dart bloc


    【解决方案1】:

    这两个是严格等价的,但是两个选项都不好。

    您应该Inheritedwidget中创建变异数据。您很容易失去您的状态,这被认为是不好的做法。

    请考虑将您的 Inheritedwidge 包装到 StatefulWidget 中,或使用诸如 provider 之类的包。

    使用provider,您不再需要制作这样的课程。相反,您可以直接这样做:

    Provider(
      builder: (_) => CommentsBloc(),
      dispose: (_, bloc) => bloc.dispose(),
      child: Whatever(),
    ) 
    

    【讨论】:

      猜你喜欢
      • 2015-04-28
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      相关资源
      最近更新 更多