简体   繁体   English

如何使用 bloc 模式在存储库中注入 dataProvider

[英]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并注入dataProviderAdataProviderB
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM