Account state now survives reload before redirecting to login #40

Closed
protuberanets wants to merge 3 commits from SEND003 into main
Collaborator
No description provided.
protuberanets added 1 commit 2025-12-08 16:51:34 +00:00
protuberanets requested review from tech 2025-12-08 16:51:34 +00:00
Owner

@protuberanets , А для чего понадобилось сохранение состояния, если оно существует внутри ссылки? Если ты перешел на чистое использование go_router'а, то зачем сохранять/поднимать состояние на уровне провайдера?

@protuberanets , А для чего понадобилось сохранение состояния, если оно существует внутри ссылки? Если ты перешел на чистое использование go_router'а, то зачем сохранять/поднимать состояние на уровне провайдера?
Author
Collaborator

@protuberanets , А для чего понадобилось сохранение состояния, если оно существует внутри ссылки? Если ты перешел на чистое использование go_router'а, то зачем сохранять/поднимать состояние на уровне провайдера?

go_router ведь у нас может держать только состояние навигации, а не самого акаунта пользователя. При перезагрузке приложения дерево провайдеров создаётся с нуля (AccountProvider будет пуст)

> @protuberanets , А для чего понадобилось сохранение состояния, если оно существует внутри ссылки? Если ты перешел на чистое использование go_router'а, то зачем сохранять/поднимать состояние на уровне провайдера? go_router ведь у нас может держать только состояние навигации, а не самого акаунта пользователя. При перезагрузке приложения дерево провайдеров создаётся с нуля (AccountProvider будет пуст)
Owner

@protuberanets , а, точно, загрузчик хорошо зарисован. А вот это:

  Future restoreIfPossible() async {
   
   
   
   
   
   
   
   
   
   
   

По-прежнему не ясно:

  • зачем галка "пытались / не пытались"? По идее ошибка в resotre должна приводить к переходу к логину на уровне загрузчика. То есть ловить и обрабатывать ошибки - это в первую очередь задача вызвающего кода
  • зачем ручное управление ресурсом за пределами login/logout/restore?
  • почему попытка restore завернута в пустой try / catch? И иногда, вероятно, ошибки подавлять надо, но даже если они подавляются, их легировать надо. А просто зажимать ошибки - зачем? Опять же, ответственность за реакцию на ошибки должен нести вызывающий код, задача вызванного только сказать: "у меня не получилось" выбросом исключения или возвратом кода ошибки.
@protuberanets , а, точно, загрузчик хорошо зарисован. А вот это: <!DOCTYPE html>   | Future<void> restoreIfPossible() async { -- | --   |   | if (_restoreAttempted) return;   |   | _restoreAttempted = true;   |   | final hasAuth = await AuthorizationService.isAuthorizationStored();   |   | if (!hasAuth) {   |   | _setResource(Resource(data: null, isLoading: false, error: null));   |   | return;   |   | }   |   | try {   |   | await restore();   |   | } catch (_) {}   |   | } По-прежнему не ясно: - зачем галка "пытались / не пытались"? По идее ошибка в resotre должна приводить к переходу к логину на уровне загрузчика. То есть ловить и обрабатывать ошибки - это в первую очередь задача вызвающего кода - зачем ручное управление ресурсом за пределами login/logout/restore? - почему попытка restore завернута в пустой try / catch? И иногда, вероятно, ошибки подавлять надо, но даже если они подавляются, их легировать надо. А просто зажимать ошибки - зачем? Опять же, ответственность за реакцию на ошибки должен нести вызывающий код, задача вызванного только сказать: "у меня не получилось" выбросом исключения или возвратом кода ошибки.
protuberanets added 1 commit 2025-12-09 18:10:40 +00:00
protuberanets added 1 commit 2025-12-09 18:16:35 +00:00
protuberanets reviewed 2025-12-10 00:03:00 +00:00
protuberanets reviewed 2025-12-10 00:05:01 +00:00
protuberanets reviewed 2025-12-10 00:20:00 +00:00
protuberanets reviewed 2025-12-10 00:20:40 +00:00
protuberanets reviewed 2025-12-10 00:22:16 +00:00
@@ -17,15 +17,34 @@ class AccountLoader extends StatelessWidget {
@override
Widget build(BuildContext context) => Consumer<AccountProvider>(builder: (context, provider, _) {
if (provider.isLoading) return const Center(child: CircularProgressIndicator());
Author
Collaborator

ТЕСТ

ТЕСТ
tech reviewed 2025-12-10 13:50:59 +00:00
tech left a comment
Owner

nb

nb
@@ -27,1 +20,3 @@
navigateAndReplace(context, Pages.login);
if (provider.account != null) {
WidgetsBinding.instance.addPostFrameCallback((_) {
});
Owner

а зачем тут пустой вызов?

а зачем тут пустой вызов?
protuberanets closed this pull request 2025-12-12 16:43:04 +00:00

Pull request closed

Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tech/sendico#40