Flutter - преобразование StatefulWidget в HookWidget с помощью одноразового блока
Я читал о флаттер-хуках несколько недель назад и хотел реализовать это сейчас в моем новом проекте. Мой вид "базового" виджета - это виджет с отслеживанием состояния, который имеет миксинRouteAware
причина некоторых проектных причин. Кроме того, у каждого есть блок, который обеспечиваетBehaviourSubject
. Блок должен быть удален виджетом, поэтому, а также причинаRouteAware
это StatefulWidget
. Я не вдавался в подробности здесь, но блок построен с множеством зависимостей и передается как этот MyWidget(здесь bloc: //resolve 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
});
}
1 ответ
Чтобы вызвать метод удаления с помощью хуков, вы можете использовать
useEffect
ловушка, где возврат функции — это метод, который вы хотите использовать для удаления
useEffect((){
return bloc.dispose
}, const [])