Forwarded from Flutter. Много
Hola, Amigos!
На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Мы продолжаем изучать концепции и полезные функции в rxdart.
В прошлый раз мы забыли про троттлинг. Он похож на debounce, но возвращает не последнее, а первое значение, что полезно при обработке различных случаев, например, отправки форм. Для него можно использовать методы throttle и throttleTime.
Еще давайте затронем фильтрацию данных внутри стримов, так как это часто необходимо. Да, в Dart есть метод where, но его может не хватать или он будет слишком большим в коде. Поэтому в rxdart есть расширение whereType, которое позволяет фильтровать по типу без применения cast, и его дополнение - whereNotNull, которое убирает все нулевые значения из потока данных.
Еще одно полезное расширение - distinctUnique. Оно позволяет нам сохранять в стриме только уникальные значения. Очень похоже на применение toSet().toList() для списков.
И самое главное, что добавляет rxdart - это новые StreamController, которые здесь называются Subjects. Их 2 - BehaviorSubject и ReplaySubject. Давайте посмотрим на каждый из них.
BehaviorSubject - контроллер, который при добавлении слушателя сразу же передает ему последнее значение, которое попало в стрим. Также ему можно задать изначальное значение при помощи конструктора BehaviorSubject.seeded.
ReplaySubject - контроллер, который при добавлении слушателя сразу же передаст все значения, которые в него попадали. Но если нам нужно возвращать последние N значений, то мы можем применить в его конструкторе параметр maxSize.
Делитесь в чате, как часто вы используете стримы на своих проектах?
На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga. Мы продолжаем изучать концепции и полезные функции в rxdart.
В прошлый раз мы забыли про троттлинг. Он похож на debounce, но возвращает не последнее, а первое значение, что полезно при обработке различных случаев, например, отправки форм. Для него можно использовать методы throttle и throttleTime.
Еще давайте затронем фильтрацию данных внутри стримов, так как это часто необходимо. Да, в Dart есть метод where, но его может не хватать или он будет слишком большим в коде. Поэтому в rxdart есть расширение whereType, которое позволяет фильтровать по типу без применения cast, и его дополнение - whereNotNull, которое убирает все нулевые значения из потока данных.
Еще одно полезное расширение - distinctUnique. Оно позволяет нам сохранять в стриме только уникальные значения. Очень похоже на применение toSet().toList() для списков.
И самое главное, что добавляет rxdart - это новые StreamController, которые здесь называются Subjects. Их 2 - BehaviorSubject и ReplaySubject. Давайте посмотрим на каждый из них.
BehaviorSubject - контроллер, который при добавлении слушателя сразу же передает ему последнее значение, которое попало в стрим. Также ему можно задать изначальное значение при помощи конструктора BehaviorSubject.seeded.
ReplaySubject - контроллер, который при добавлении слушателя сразу же передаст все значения, которые в него попадали. Но если нам нужно возвращать последние N значений, то мы можем применить в его конструкторе параметр maxSize.
Делитесь в чате, как часто вы используете стримы на своих проектах?
Forwarded from Mobile AppSec World (Yury Shabalin)
Как обеспечить безопасность flutter-приложений
Статья, которая не как все, рассказывает о применении reFlutter для анализа таких приложений, а наоборот, объясняет как их можно защитить от угроз, описанных в OWASP Mobile.
В статье описаны, на самом деле, базовые техники и общие рекомендации, иногда с примерами кода и советами по используемым плагинам.
Иногда я бы не стал им сильно доверять, например, совету с использованием Flutter-secure-storage, но все равно, отправная точка есть.
Да, пусть статья и не самая подробная и имеет только общие рекомендации, но все равно такого материала часто сильно не хватает. И я очень рекомендую ее пролистать и отправить почитать разработчикам кроссплатформенных приложений.
Хороших выходных!
#flutter #secure #owasp
Статья, которая не как все, рассказывает о применении reFlutter для анализа таких приложений, а наоборот, объясняет как их можно защитить от угроз, описанных в OWASP Mobile.
В статье описаны, на самом деле, базовые техники и общие рекомендации, иногда с примерами кода и советами по используемым плагинам.
Иногда я бы не стал им сильно доверять, например, совету с использованием Flutter-secure-storage, но все равно, отправная точка есть.
Да, пусть статья и не самая подробная и имеет только общие рекомендации, но все равно такого материала часто сильно не хватает. И я очень рекомендую ее пролистать и отправить почитать разработчикам кроссплатформенных приложений.
Хороших выходных!
#flutter #secure #owasp
Forwarded from Код и Капуста
Tolgee - опенсорсная платформа для локализации. Написана на #kotlin.
Это же моя идея стартапа!
Ссылка на сайт https://tolgee.io/
И на репу https://github.com/tolgee/tolgee-platform
Это же моя идея стартапа!
Ссылка на сайт https://tolgee.io/
И на репу https://github.com/tolgee/tolgee-platform
Forwarded from Код и Капуста
Наткнулся на статью про серверный UI для #flutter
Интересно почитать про подход. И есть адаптер для Go
Статья https://habr.com/ru/articles/858636/
Забавно, что изначально задача была сделать интерактивные рекламные баннеры
Пакет для Flutter https://github.com/Duit-Foundation/flutter_duit
Адаптер для Go https://github.com/Duit-Foundation/duit_go
Интересно почитать про подход. И есть адаптер для Go
Статья https://habr.com/ru/articles/858636/
Забавно, что изначально задача была сделать интерактивные рекламные баннеры
Пакет для Flutter https://github.com/Duit-Foundation/flutter_duit
Адаптер для Go https://github.com/Duit-Foundation/duit_go
Forwarded from Surf Flutter Team
Пишем Unit-тесты в Dart 🙌
Часто программист работает с уже существующим кодом. Так появляется риск, что код будет работать не так, как должен. В таком случае разработчик может вручную проверить работу кода.
Но можно этого избежать, если код покрыт unit-тестами.
Что такое unit-тесты? Это тесты, направленные на проверку работы одного компонента программы, например, класса или метода.
➡️ Их цель — убедиться, что компонент работает так, как ожидается, независимо от других частей программы. После внесения правок разработчик может запустить тесты и понять, а не сломалось ли что-то.
Ещё тесты полезны тем, что программист заранее обдумывает возможное поведение программы и ещё на этом этапе может выявить баги.
Го в карточки, расскажем как писать unit-тесты в Dart 🤫
🔗Ссылки на пакеты:
Первый
Второй
🔗Репозиторий с примером
Часто программист работает с уже существующим кодом. Так появляется риск, что код будет работать не так, как должен. В таком случае разработчик может вручную проверить работу кода.
Но можно этого избежать, если код покрыт unit-тестами.
Что такое unit-тесты? Это тесты, направленные на проверку работы одного компонента программы, например, класса или метода.
Ещё тесты полезны тем, что программист заранее обдумывает возможное поведение программы и ещё на этом этапе может выявить баги.
Го в карточки, расскажем как писать unit-тесты в Dart 🤫
🔗Ссылки на пакеты:
Первый
Второй
🔗Репозиторий с примером
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Попалось полезное
На больших проектах вместо того, чтобы выносить часто используемые файлы в
От автора React SFC
#vscode
VS Code расширениеНа больших проектах вместо того, чтобы выносить часто используемые файлы в
Favorites, можно прятать редко используемые в Hide filesОт автора React SFC
#vscode
Visualstudio
Hide files - Visual Studio Marketplace
Extension for Visual Studio Code - Exclude files that are occasionally used from being displayed in the explorer
Forwarded from Flutter Tech-Lead Notes | Павел Гершевич
А вот и статья, которая должна была выйти на прошлой неделе - https://habr.com/ru/articles/869208/
Хабр
Делаем кастомный трансформер для BLoC
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead агентства продуктовой разработки Amiga и соавтор телеграм-канала Flutter.Много . Как известно, BLoC — один из самых популярных способов для...
Forwarded from Код на салфетке
Git на два фронта: пушим в несколько репозиториев
Наверняка многие из вас используют хостинги репозиториев, такие как GitHub, GitLab или, возможно, даже GitVerse для хранения своих проектов. Однако что вы будете делать, если в ответственный момент хранилище проекта станет недоступным, а локальная копия окажется устаревшей?
Признаться, я бы сначала немного запаниковал, а потом вспомнил: с проектами всё как с бэкапами — чем больше копий, тем лучше! Но как делать резервные копии проектов, чтобы сохранить корректную версионность?
Ответ прост: используйте несколько разных хостингов репозиториев для одного проекта!
1. Создаём репозитории на двух разных платформах.
2. В локальном Git прописываем оба репозитория. Один из них будет основным (
3. Настраиваем Git так, чтобы изменения отправлялись в оба репозитория.
4. Пишем код, пушим — и видим, что изменения отправляются одновременно на обе платформы!
Как это сделать?
1. Добавляем первичный репозиторий:
2. Добавляем вторичный репозиторий:
3. Настраиваем push для обоих репозиториев:
4. Проверяем настройки:
Готово! Теперь изменения будут отправляться сразу в два (или больше, если нужно) репозитория. Просто, удобно и надежно.
Наверняка многие из вас используют хостинги репозиториев, такие как GitHub, GitLab или, возможно, даже GitVerse для хранения своих проектов. Однако что вы будете делать, если в ответственный момент хранилище проекта станет недоступным, а локальная копия окажется устаревшей?
Признаться, я бы сначала немного запаниковал, а потом вспомнил: с проектами всё как с бэкапами — чем больше копий, тем лучше! Но как делать резервные копии проектов, чтобы сохранить корректную версионность?
Ответ прост: используйте несколько разных хостингов репозиториев для одного проекта!
1. Создаём репозитории на двух разных платформах.
2. В локальном Git прописываем оба репозитория. Один из них будет основным (
origin), а второй — вспомогательным (secondary).3. Настраиваем Git так, чтобы изменения отправлялись в оба репозитория.
4. Пишем код, пушим — и видим, что изменения отправляются одновременно на обе платформы!
Как это сделать?
1. Добавляем первичный репозиторий:
git remote add origin https://github.com/proDreams/lkeep.git
2. Добавляем вторичный репозиторий:
git remote add secondary https://git.pressanybutton.ru/proDream/lkeep.git
3. Настраиваем push для обоих репозиториев:
git remote set-url --add --push origin https://github.com/proDreams/lkeep.git
git remote set-url --add --push origin https://git.pressanybutton.ru/proDream/lkeep.git
4. Проверяем настройки:
git remote show origin
Готово! Теперь изменения будут отправляться сразу в два (или больше, если нужно) репозитория. Просто, удобно и надежно.
Аналитика в мобильном приложении на Flutter. Часть 1. Yandex AppMetrica
https://habr.com/ru/articles/873920/comments/
https://habr.com/ru/articles/873920/comments/
Хабр