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 [])

Другие вопросы по тегам