Путевые заметки программиста
16
подписчиков
Зовут меня Дмитрий. Здесь выкладываю статьи и видео о проблемах и вызовах с которыми сталкиваюсь.…
Null-Aware операторы в Dart / Flutter (??, ??=, ?., ?[], ...?, ?..)
Хочу рассказать про операторы проверки на null в Dart, а точнее про не очевидные операторы проверки на null, которые открывают интересные возможности или просто упрощают написание кода. Ну или если вы видели два вопроса в коде ?? и не понимаете что это означает, то вам сюда. Проверка на null Какой самый простой вариант проверки на null в Dart? Правильно! Просто проверить его на равенство с null в блоке if: А как на счет более частого варианты использования? Чаще мы стараемся уйти от использования переменных которые могут быть null...
Flutter: Как сделать Singleton
Что такое Singleton и зачем он нужен? Singleton - это шаблон проектирования. Представляет собой класс, у которого будет гарантированно только один экземпляр и доступ к этому экземпляру из любого места в коде. С помощью сингельтона делают, например, логгирование или репозитарии с данными - это когда вам требуется общее хранилище данных для нескольких экранов (нескольких bloc'ов). Настройки приложения очень удобно так хранить. Во Flutter пример сингельтона - это WidgetsBinding.instance. В общем это удобный шаблон, которым без затей пользуются программисты всего мира и мы с вами тоже начнём...
Flutter: Делаем Swipe Detector
Для своего проекта G2048 мне потребовалось сделать чтобы плитки двигались по свайпам. И я очень удивился когда не нашел такой штуки в GestureDetector... Это что свайпы никому не нужны что ли? Единственная более или менее подходящий виджет это Dismissible, но в нём есть свайпы только по горизонтали, а мне надо еще и по вертикали. На стековерфлоу рекомендуют делать своё, через velocity... Кстати, какой-то странный параметр - скорость движения пальца. На pub.dev на тот момент я нашел всего один пакет,...
Flutter package - пакет с нуля до публикации в pub.dev с максимальными pub points
Здравствуй, дорогой коллега! Сейчас я расскажу как сделать и опубликовать пакет для флаттера. Пройдем с тобой путь от создания до публикации. Я опишу все нюансы, всё то где я в своё время застрял. Погнали! Создаем Package и в нём проект example В Android студии выбираем File - New - New Flutter progect
В "Project type" ставим "Package" название я поставил "my_package" После создания проекта давай сразу создадим example. Это проект в котором мы будем подключать наш пакет для тестирования и "горячей" разработки...
FireFox на Mac OS: Убираем выход из полноэкранного режима по Esc
Развернул я значит FireFox на весь экран, кайфую, привычным нажатием на клавишу Esc хочу закрыть всплывашку и... Вместо закрытия всплывашки окно браузера скукожывается... Это что такое? Какой маргарин был у человека в голове, который это придумал? Как это отключить? Открываем новую вкладку и...
WStore - основная концепция построения приложения
Концепция которая положена в основу построения приложения с помощью WStore - это отделение состояния экрана (его логики) от виджетов (его представления, того что выводится пользователю - грубо говоря вёрстки экрана). *Здесь и далее идет речь только о presentation слое приложения (про разделение слоёв как нить напишу отдельно). В идеале виджеты должны только реактивно отображать данные из сторы, которая в свою очередь уже сама занимается обработкой, всей логикой, всем приведением данных к нужному виду и тому подобными вещами...
Flutter на android - убрать зеленую рамку
Запускаем приложение на android и видим зелёную рамку? Почему? Что делать? Что это за фигня? Это рамка фокуса - появляется в том случае если приложение мониторит ввод с клавиатуры. Например, автофокус у Вас где-то стоит в приложении. Так ведёт себя тема у приложений по умолчанию. Как это убрать? Открываем файл ./android/app/src/main/res/values/styles...
WStore - зачем нужна ещё одна Flutter библиотека для State-менеджмента?
Привет! Занимаюсь разработкой библиотеки WStore - это Flutter библиотека для управлением состоянием виджетов. Зачем она понадобилась? Есть же Bloc, Redux, GetX... В чём проблема? Проблема 1: Нужно писать очень много кода для простых вещей Нужно эммитить события, делать их обработчики, оборачивать всё в стримы за которыми потом следить - подписываться, отписываться... Мне нужно просто цифру на экране обновить!!! Вы чего? Проблема 2: Нужно погружаться в абстракции на которых это работает Есть эммитер, есть консьюмер, есть редьюсер, актионс...
Flutter Локализация приложения с помощью пакета easy_localization
В этой статье я расскажу как добавить локализацию в Ваше Flutter приложение. Для примера будут русский и английский языки. И переводить будем стандартное демонстрационное приложение. Погнали! Добавляем пакет easy_localization в pabspec.yaml и прописываем assets - папка где будут лежать наши переводы: Создаем в каталоге assets/translations/ файлы с нашими будущими переводами en‑US.json и ru.json: Инициализируем EasyLocalization внутри main() - делаем его async, оборачиваем MyApp виджетом EasyLocalization,...
"Uncaught (in promise) TypeError: dir is undefined" В моем случае это были прописаны не все directives в компоненте
VS Code: Запускаем Prettier перед ESLint --fix автоматом при сохранении файла
Бился я над следующей проблемой - после форматирования кода Prettier вылазит куча ошибок ESLint из-за прописанных там правил. В частности в html Prettier тэги загрывает, например img, и никак это не настроить (потому что видите ли у автора Prettier такая философия - меньше настроек) Я вошёл уже в готовый проект с готовыми правилами и пропихивать туда правки, чтобы то что наформатировал Prettier не считалось ошибками, тухленький вариант. Но и от Prettier отказываться неохота.....
eslint: убираем не нужные скрытые плагины в extends (отключаем все правила не нужного плагина)
Отключаем все правила ненужного плагина на примере плагина vuejs-accessibility: По шагам, что тут происходит Хочу я использовать правила линта @vue/airbnb, но он внутри себя импортирует vuejs-accessibility, что мне совсем не нужно (ну вот такой я человеконенавистник). Как тут быть? Как вариант каждое правило прописывать как off... Поскольку вы тут - это не наш метод :)...