前言
在实际开发过程中,经常会遇到父子组件传值的情况,通常来说会有三种方式:
- 构造函数传值:父组件将子组件需要的对象通过构造函数传递给子组件;
- 单例对象:构建单例对象,使得父子组件使用的是同一个对象;
- 容器:将对象存入容器中,父子组件使用的时候直接从容器中获取。
第一种方式的缺陷是如果组件嵌套很深,传递数据对象需要层层传递,将导致代码很难维护。第二种方式需要自己构建单例类,而实际上要传递的对象可能存在很多个实例。第三种和单例类似,如果往容器存储不定数量的实例对象是不合适的。flutter_bloc 提供了一种基于组件的依赖注入方式解决这类问题,通过使用 RepositoryProvider
,可以为组件树的子组件提供共享对象,这个共享对象只限在组件树中使用,可以通过 Provider
的方式访问该对象。
RepositoryProvider定义
Repository
实际上是 Provider
的一个子类,通过注册单例的方式实现组件树对象共享,因此其注册的对象会随着 Provider
的注销而销毁,而且这个对象无需是 Bloc
子类。因此在无法使用 Bloc
传输共享对象的时候,可以使用 RepositoryProvider
来完成。RepositoryProvider有两种方式创建对象共享,create
和 value
方式,其中