Size: a a a

Flutter Developers — русскоговорящее сообщество

2020 September 29

PV

Pavel Varchenko in Flutter Developers — русскоговорящее сообщество
🅵🅾️🆇
Могу научить покрасивше)
всегда только за)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Pavel Varchenko
всегда только за)
Создай у себя файл таких констант
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И запускай таким образом
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Бонусом получаешь константы, которые можешь использовать как душе угодно
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Несколько мейнов советую использовать для других целей
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Используй общую точку входа, а дальше уже кондишен импортами определяй дальнейшее поведение.
источник

PV

Pavel Varchenko in Flutter Developers — русскоговорящее сообщество
а если хочется конфиг для разных окружений пошарить для других разработчиков?
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Ну пошарьте)
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Вам же им просто флаги запуска надо сказать
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
Или сказать где лежит файл ваших констант с их описанием
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И они сами уже выберут какие из них включать, какие отключать
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
А не будут на каждый запрос создавать по новой точке входа)
источник

PV

Pavel Varchenko in Flutter Developers — русскоговорящее сообщество
а, ну да, спасибо!
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
причем есть не только bool, но и String.fromEnvironment
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
И в CI опять же, можете создавать с определенными флагами и передавать какиенить секреты репозитория при сборке
источник

🅵

🅵🅾️🆇 in Flutter Developers — русскоговорящее сообщество
В общем дерзайте)
источник

D

Den in Flutter Developers — русскоговорящее сообщество
Pavel Varchenko
собственно нужно держать в уме, что токен может протухать, и его нужно рефрешить без сайдэффекта для пользователя
Привет
Может подскажешь как раз по теме
Есть приложение под redux
В middleware приходит action  и в Middleware вызывается через веб клиент запрос
Так вот как правильнее организовать обработку рефрешинга токена с последующим сохранением нового токена в стейте?

Пример, получаю список каких-то товаров и клиент возвращает ошибку, что нужно рефрешнуть токен. Далее делаю рефрешинга и с новым токеном повторяю этот запрос.
Получается что ловить данную ошибку нужно в middleware, но тогда получается что этот код обработки придется скопипасть в каждый метод. Не вписывается в принцип DRY
Как-то может можно создать базовый класс и внести все делать? Или дженерик функцию или может ещё что?
источник

PV

Pavel Varchenko in Flutter Developers — русскоговорящее сообщество
Den
Привет
Может подскажешь как раз по теме
Есть приложение под redux
В middleware приходит action  и в Middleware вызывается через веб клиент запрос
Так вот как правильнее организовать обработку рефрешинга токена с последующим сохранением нового токена в стейте?

Пример, получаю список каких-то товаров и клиент возвращает ошибку, что нужно рефрешнуть токен. Далее делаю рефрешинга и с новым токеном повторяю этот запрос.
Получается что ловить данную ошибку нужно в middleware, но тогда получается что этот код обработки придется скопипасть в каждый метод. Не вписывается в принцип DRY
Как-то может можно создать базовый класс и внести все делать? Или дженерик функцию или может ещё что?
Я сделал обертку для post/get/put методов. То есть сама логика рефреша уже тут зашита. ну и чтобы избежать зацикливания есть флаг needRefreshTokenIfUnauthorized.
Я отмечу, что у меня со стейтменеджментом пока все скудно - есть только changeNotifier.
 Future<http.Response> postRequest(String path,
     {Map body, bool needRefreshTokenIfUnauthorized = true}) {
   final url = _apiBaseUrl + path;
   return http.post(Uri.encodeFull(url), body: json.encode(body), headers: {
     'Content-Type': 'application/json; charset=UTF-8',
     'Authorization': 'Bearer ' + _authTokenApi.authentication
   }).then((http.Response response) async {
     final statusCode = response.statusCode;
     if (statusCode == 401) {
       if (needRefreshTokenIfUnauthorized == true) {
         await _authTokenApi.refreshAuthentication();
         return postRequest(path,
             body: body, needRefreshTokenIfUnauthorized: false);
       }
       throw new UnauthorizedException('Unauthorized');
     } else if (statusCode < 200 || statusCode >= 400) {
       throw new Exception('Error while fetching data');
     }
     return response;
   });
 }
источник

D

Den in Flutter Developers — русскоговорящее сообщество
Pavel Varchenko
Я сделал обертку для post/get/put методов. То есть сама логика рефреша уже тут зашита. ну и чтобы избежать зацикливания есть флаг needRefreshTokenIfUnauthorized.
Я отмечу, что у меня со стейтменеджментом пока все скудно - есть только changeNotifier.
 Future<http.Response> postRequest(String path,
     {Map body, bool needRefreshTokenIfUnauthorized = true}) {
   final url = _apiBaseUrl + path;
   return http.post(Uri.encodeFull(url), body: json.encode(body), headers: {
     'Content-Type': 'application/json; charset=UTF-8',
     'Authorization': 'Bearer ' + _authTokenApi.authentication
   }).then((http.Response response) async {
     final statusCode = response.statusCode;
     if (statusCode == 401) {
       if (needRefreshTokenIfUnauthorized == true) {
         await _authTokenApi.refreshAuthentication();
         return postRequest(path,
             body: body, needRefreshTokenIfUnauthorized: false);
       }
       throw new UnauthorizedException('Unauthorized');
     } else if (statusCode < 200 || statusCode >= 400) {
       throw new Exception('Error while fetching data');
     }
     return response;
   });
 }
Понял)
источник

D

Den in Flutter Developers — русскоговорящее сообщество
Den
Привет
Может подскажешь как раз по теме
Есть приложение под redux
В middleware приходит action  и в Middleware вызывается через веб клиент запрос
Так вот как правильнее организовать обработку рефрешинга токена с последующим сохранением нового токена в стейте?

Пример, получаю список каких-то товаров и клиент возвращает ошибку, что нужно рефрешнуть токен. Далее делаю рефрешинга и с новым токеном повторяю этот запрос.
Получается что ловить данную ошибку нужно в middleware, но тогда получается что этот код обработки придется скопипасть в каждый метод. Не вписывается в принцип DRY
Как-то может можно создать базовый класс и внести все делать? Или дженерик функцию или может ещё что?
Аль можт @PlugFox шо подскажет фэншуйное?
источник