Как реализовать логаут?
Пишу приложение на Flutter используя Provider для хранения состояния и DI, но столкнулся с такой проблемой как логаут. У меня больше десяти экранов, но не могу придумать простого механизма для очистки состояний всех экранов. В нативной разработке это было доволи просто, если не было оговорена другое, то после основных действий я перезапускал приложение, тут же нет такой возможности. Даже если это реализовать это на уровне нативной, то вот для iOSтакое не реализуемо.
Может я что-то не дочитался в документации Provider или есть какие-то другие решения.
P.S. Видел пару плагинов для этих целей, но:
- не совсем понял принцип их реализации;
- не хотелось бы тянуть в проект плагин ради таких целей.
Ответы (1 шт):
Provider хороший инструмент для DI, но не является полноценным стейт менеджером (на одну из причин вы как раз и попали).
Способ через GlobalKey (hard-reset с сохранением поддерева):
Widget build(BuildContext context) {
return Provider(
key: ObjectKey(someIdentifier),
builder: (_) => Foo(),
child: SomeSubtree(
key: GlobalObjectKey(context),
),
);
}
Через общий интерфейс (добавить интерфейс и метод очистки, вызывать вручную для каждого сейта) + отдельный отдельный Provider для управления:
abstract class ProviderInterface with ChangeNotifier {
void clean();
}
class ProviderImplementation with ChangeNotifier implements ProviderInterface {
@override
void clean(){...}
}