几周前,我读到了flutter hooks的内容,现在想在我的新项目中实现它。我的“基础”窗口小部件是一种有状态的窗口小部件,由于某些项目原因,其混合RouteAware
是引起问题的原因。此外,每个都有一个提供BehaviourSubject
的团体。组件必须由Widget处置,这就是RouteAware
及其StatefulWidget
的原因和原因。我在这里没有详细介绍,但是该区块具有很多依赖关系,并且像MyWidget(bloc://在这里解析区块)这样传递。
有人可以在这里帮助我将其转换为HookWidget
以及如何添加useAware
挂钩吗?
class MyBloc{
void dispose(){}
void didPopNext(){}
void didPush(){}
}
class MyWidget extends StatefulWidget{
final MyBloc bloc;
MyWidget({key, this.bloc}) : super(key: key);
@override
MyWidgetState createState() => MyWidgetState();
}
class MyWidgetState extends State<MyWidget> with RouteAware{
@override
void didChangeDependencies() {
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
routeObserver.unsubscribe(this);
widget.bloc.dispose();
super.dispose();
}
@override
void didPush() {
// Route was pushed onto navigator and is now topmost route.
widget.bloc.didPush();
}
@override
void didPopNext() {
// Covering route was popped off the navigator.
widget.bloc.didPopNext();
}
@override
Widget build(BuildContext context) => StreamBuilder(stream: widget.bloc.myStream, initialValue: widget.bloc.myStream.value, builder: (context, snapshot){
//work with snapshot
});
}
答案 0 :(得分:1)
要使用钩子调用 dispose 方法,您可以使用 useEffect
钩子,其中函数的返回是您要用于处置的方法
useEffect((){
return bloc.dispose
}, const [])