关于Bloc
Closed this issue · 1 comments
cuixm commented
最近看了一些获取祖先元素的文档,获取Bloc的方法做了小改如下:
abstract class BlocBase {
Future getData({String labelId, int page});
Future onRefresh({String labelId});
Future onLoadMore({String labelId});
void dispose();
}
class BlocProvider<T extends BlocBase> extends StatefulWidget {
BlocProvider({
Key key,
@required this.child,
@required this.bloc,
this.userDispose: true,
}) : super(key: key);
final T bloc;
final Widget child;
final bool userDispose;
@override
_BlocProviderState<T> createState() => _BlocProviderState<T>();
/*static T of<T extends BlocBase>(BuildContext context) {
final type = _typeOf<BlocProvider<T>>();
BlocProvider<T> provider = context.ancestorWidgetOfExactType(type);
return provider.bloc;
}*/
static T of<T extends BlocBase>(BuildContext context){
final type = _typeOf<_BlocProviderInherited<T>>();
_BlocProviderInherited<T> provider = context.ancestorInheritedElementForWidgetOfExactType(type)?.widget;
return provider?.bloc;
}
static Type _typeOf<T>() => T;
}
class _BlocProviderInherited<T> extends InheritedWidget {
_BlocProviderInherited({
Key key,
@required Widget child,
@required this.bloc,
}) : super(key: key, child: child);
final T bloc;
@override
bool updateShouldNotify(_BlocProviderInherited oldWidget) => false;
}
class _BlocProviderState<T extends BlocBase> extends State<BlocProvider<BlocBase>> {
@override
void dispose() {
if (widget.userDispose) widget.bloc.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return new _BlocProviderInherited<T>(
bloc: widget.bloc,
child: widget.child,
);
}
}
把原来的一级一级找的方法,改成Inherited模式,
uddsoft commented
项目的bloc看的不是很明白。方便出个简单的教程或者Demo吗。