在Flutter BLoC类中的BuildContext

5
简而言之,context是否应该属于BLoC类,如果不是,那么正确的做法是什么?
我正在使用一个Provider作为Firebase数据库和UI之间的抽象层。 最近,我们进一步抽象以使用BLoC模式,以便小部件不直接操作Provider中的数据。 一切都进行得很顺利,但由于我们同时使用提供程序和BLoC,我不确定如何正确使用BuildContext,因为上下文与小部件/ UI更相关,而不是业务逻辑。
以下是一个示例:
class SomeWidget extends StatelessWidget {
  final SomeWidgetBloc bloc;
  
  SomeWidget({Key key, this.bloc});
  
  @override
  Widget build(BuildContext context) => StreamBuilder(stream: bloc.getSomeData, 
     builder: (context, snapshot) {
        return Text(snapshot.data ?? "Empty");
     }
}

class SomeWidgetBloc {
  BuildContext context; // should it be here? Currently, it's needed for the Provider
  
  SomeWidgetBloc(BuildContext context);
  
  Stream<String> get getSomeData {
     return Provider.of<SomeFirebaseProvider>(context).fetchSomeData();
  } 
}

保留上下文块类是一个非常糟糕的想法。 - user14631430
1
这是提供程序的糟糕部分,您需要上下文来理解一切,您的“presenter”或bloc不应包含视图的上下文。这就是为什么git_It是服务定位器的更好选择。 - Luiz Filipe Medeira
使用 https://pub.dev/packages/injectable/ 是 DI 的最佳选择之一,请勿使用普通的 get_it。 - Ilya Maximencko
可注入性过于复杂和冗余,只需使用普通的getit即可。 - user14631430
1个回答

0

在创建时,您应该将SomeFirebaseProvider实例传递给SomeWidgetBloc构造函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接