[英]How to inject dataProvider in repository using bloc pattern
As follow the bloc official repository pattern, it suggest the repository with multi-dataProvider, but how should I inject the dataProvider in the repository?按照 bloc 官方存储库模式,它建议使用多 dataProvider 的存储库,但是我应该如何将 dataProvider 注入存储库?
class Repository {
final DataProviderA dataProviderA; // What's the way to init the DataProviderA in the repository.
final DataProviderB dataProviderB;
Future<Data> getAllDataThatMeetsRequirements() async {
final RawDataA dataSetA = await dataProviderA.readData();
final RawDataB dataSetB = await dataProviderB.readData();
final Data filteredData = _filterData(dataSetA, dataSetB);
return filteredData;
}
}
You can follow official Weather example https://bloclibrary.dev/#/flutterweathertutorial?id=repository您可以按照官方天气示例https://bloclibrary.dev/#/flutterweathertutorial?id=repository
You can in main()
init Repository
and inject dataProviderA
and dataProviderB
您可以在
main()
初始化Repository
并注入dataProviderA
和dataProviderB
code snippet代码片段
class Repository {
final DataProviderA dataProviderA;
final DataProviderB dataProviderB;
Repository({@required this.dataProviderA, @required this.dataProviderB})
: assert(dataProviderA != null && dataProviderB != null);
Future<Data> getAllDataThatMeetsRequirements() async {
final RawDataA dataSetA = await dataProviderA.readData();
final RawDataB dataSetB = await dataProviderB.readData();
final Data filteredData = _filterData(dataSetA, dataSetB);
return filteredData;
}
}
void main() {
Bloc.observer = SimpleBlocObserver();
final Repository repository = Repository(
dataProviderA: DataProviderA(),
dataProviderB: DataProviderB(),
);
runApp(App(repository: repository));
}
class App extends StatelessWidget {
final Repository repository;
App({Key key, @required this.repository})
: assert(repository != null),
super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Weather',
home: BlocProvider(
create: (context) => YourBloc(repository: repository),
child: YourMainEntry(),
),
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.