fa
Feedback
Дневник Flutter-разработчика

Дневник Flutter-разработчика

رفتن به کانال در Telegram

Описание моего пути мобильного разработчика с нуля до junior, middle, senior

نمایش بیشتر
2 903
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-67 روز
-2330 روز
آرشیو پست ها
12/9/2022 💻Работа: Занимаюсь задачей по qr-кодам 🧑‍💻Что изучаю/сложности/интересное: Сегодня разбирался с гетит. Основные пробелы - кратко рассказать о пакете и зачем он, отличия в регистрации. GetIt - это сервис локатор, который решает проблему с отделением бизнес логики от ui. Это тот же провайдер или инхеритед виджет. Он позволяет иметь доступ к объектам из любого места в приложении. Регистрация - всего три варианта: Factory: основная фишка - каждый раз при новом запросе создается новый объект. Создается тогда, когда к нему обращаешься Singleton: сам шаблон означает, что есть всего один экземпляр объекта. Создается сразу при регистрации, ему все равно, было обращение или нет LazySingleton: создается при первом вызове. После этого вы всегда будете получать один и тот же экземпляр, возвращаемый 📚Английский язык: Сегодня было первое занятие в Яндекс.практикум. Вначале на русском обговорили план на занятия, дальше говорили на англ. Обычное знакомство с кучей вопросов) Говорит, что словарный запас хороший, нужно только больше говорить. Просмотр сериалов на англ. - это отлично. Есть пробелы в грамматике, которые будем закрывать 💪Баланс работа-остальные сферы: ✅ - читаю Чистый код дядюшки Боба. + 26 м. (всего - 8,47ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 30 дней) ✅ - зарядка утром +1 (всего - 32 дня) ✅ - силовая тренировка через день +1 (всего - 10 дней) ✅ - прогулки на свежем воздухе. 2800 шагов ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 15 дней) ❌ - холодный душ утром. +1 (всего - 3 дня)

Приглашаем на онлайн-воркшоп по Flutter Посмотрим, как Flutter отрисовывает нативные вьюшки на Android, а также разберем поле
Приглашаем на онлайн-воркшоп по Flutter Посмотрим, как Flutter отрисовывает нативные вьюшки на Android, а также разберем полезные библиотеки и тулзы для создания интересных списков в ваших приложениях. В программе 2 доклада 👀 🔹 Алёна Немчинова расскажет о Flutter PlatformView на Android: для чего они могут понадобится, особенности реализации и какие сюрпризы подготовил здесь Flutter 3. 🔹 Вместе с Сергеем Лавиновым рассмотрим, как работает скролл во Flutter, что такое Sliver, а также посмотрим примеры использования. Ивент пройдет онлайн 15 сентября, 19:00 по МСК. Для участия нужно зарегистрироваться: https://mercdev.timepad.ru/event/2160217/ Ссылку на трансляцию пришлем перед воркшопом.

9/9/2022 💻Работа: Занимался двумя небольшими задачами. Завершил одну и почти доделал вторую 🧑‍💻Что изучаю/сложности/интересное: Обратил внимание на интересный момент. Была задача с небольшим несоответствием в верстке. По макету отступ кнопки(от текста до края кнопки) должен быть 16 px. По факту в проекте это выглядит, как пикселя 2) Смотрю код - стоит padding: (horizontal: 16). Правлю, ставлю 25. Выглядит точно как по макету. Кто-нибудь знает, откуда такие расхождения?) 📚Английский язык: + 0, 32 ч. сериал Shameless на англ. В понедельник первое занятие в Яндекс.практикум Интересный момент: они предупредили, что занятие с преподавателем записывается для улучшения качества. Говорят, что записи смотрит всего пара человек. От записи сразу отказался. Все мы помним об утечках данных компании) 💪Баланс работа-остальные сферы: ✅ - читаю Чистый код дядюшки Боба. + 37 м. (всего - 8,21ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 29 дней) ✅ - зарядка утром +1 (всего - 31 день) ❌ - силовая тренировка через день. Перенес на завтра. (всего - 9 дней) ✅ - прогулки на свежем воздухе. 4500 шагов ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 14 дней) ❌ - холодный душ утром. +1 (всего - 3 дня). Забыл утром)

8/9/2022 💻Работа: Отдебажил задачу, пофиксил. Это заняло уйму времени, в конце я пришел к тому же выводу, к которому пришел в первые 5 минут дебагинга😁 Сделал небольшую задачу по фиксу верстки 🧑‍💻Что изучаю/сложности/интересное: 📚Английский язык: Был созвон с преподавателем Яндекс.практикум. Созвон в зуме на пол часа. Общие вопросы на русском - как изучал/изучаю язык, какой опыт, как оцениваю свой уровень, какие цели на изучение языка. Дальше пошли вопросы на английском - как тебя зовут, откуда ты, чем занимаешься, какая погода за окном, сколько градусов. Углублялась в вопросы) Мой уровень определили, как Pre-intermediate. Сказала, что словарный запас серьезный, но так как нет практики, слова находятся в пассиве и из-за этого говорю простыми предложениями. Предложила курс за 10900, поапаться по ступеням. За год могу апнуть до b2 Я хотел сразу начать с разговорного, но мне предложили начать с комплексного подхода, так как "вам позвонит Моника из Калифорнии и вы пострессуете😁" 3 разговорных занятия с преподавателем в неделю(девушка из Вирджинии), домашние задания, раз в месяц большой созвон с иностранцем, отдельный чат для прокачивания письменного английского Моя цель на английский, о котором я сразу сказал на созвоне - валютная удаленка/иммиграция через год. Поэтому мне предложили такой план и апнуть в течение года мой уровень до b2:) 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 28 дней) ✅ - зарядка утром +1 (всего - 30 дней) ✅ - силовая тренировка через день. +1 (отдых) (всего - 9 дней) ❌ - прогулки на свежем воздухе. ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 13 дней) ✅ - холодный душ утром. +1 (всего - 3 дня). Уже больше 15 секунду, как в первый раз😁

7/9/2022 💻Работа: Разбирался со вчерашней задачей по дебагингу фичи 🧑‍💻Что изучаю/сложности/интересное: Начал пользоваться Stack Trace. Здорово помогает👍 Совсем забыл про него. По дебагингу пока еще не понял зачем debugger() и inspect P.S. Кто-нибудь состоит в Вастрик клубе? Оплата не проходит с ру карты 📚Английский язык: Завтра созвон с преподавателем Яндекс. практикум для определения моего уровня англ. языка и подбора курса:) 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 27 дней) ✅ - зарядка утром +1 (всего - 29 дней) ✅ - силовая тренировка через день. +1 (всего - 8 дней) ❌ - прогулки на свежем воздухе. ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 12 дней) ✅ - холодный душ утром. +1 (всего - 2 дня)

Крупнейшая конференция по кроссплатформенной разработке и трендам IT @crossconf уже на этой неделе! 📆9-10 сентября. 📍Иннопо
Крупнейшая конференция по кроссплатформенной разработке и трендам IT @crossconf уже на этой неделе! 📆9-10 сентября. 📍Иннополис (Казань), Технопарк им. А.С. Попова, Технопарк им. Н.И. Лобачевского. 🚀В программе конференции выделен отдельный поток по Flutter. Приходите, чтобы познакомится с командой разработчиков Яндекс Go и послушать панельную дискуссию по использованию фреймворка! Что будет на CrossConf? ⭐️ 2 дня новых знаний и нетворкинга ⭐️ более 80 топовых спикеров и докладов ⭐️ 8 тематических потоков 🔥afterparty с живой музыкой и эксклюзивным IT-квизом от знатока «Что? Где? Когда?» Бориса Белозерова. ❗️Для всех подписчиков действует специальный промокод FlutterDev на скидку 15%

6/9/2022 💻Работа: Вчера дебажил задачу по фиксу бага. Нужно было разобраться в логике и понять проблему. Это заняло уйму времени, а решение было в добавлении пары символов. Брейкпоинты - наше все) Сегодня занимался дебагингом другой задаче. Нужно так же понять логику и почему не отрабатывает нужное условие. 🧑‍💻Что изучаю/сложности/интересное: Сегодняшняя задача усложнилась тем, что баг только на реальном устройстве. На моем redmi 11 этот функционал приложения вообще не отрабатывает(видимо я нашел еще один баг😊). Пришлось идти брать другой телефон для тестов 📚Английский язык: + 1, 09 ч. сериал Shameless на англ. Готов брать курс Яндекс.практикум по английскому. Наверное завтра:) 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 26 дней) ✅ - зарядка утром +1 (всего - 28 дней) ✅ - силовая тренировка через день. +1 (отдых) (всего -7 дней) ✅ - прогулки на свежем воздухе. 6000 шагов ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 11 дней) ✅ - холодный душ утром. +1 (всего - 1 день). То еще челлендж😁 Так из зоны комфорта я еще никогда не выходил)

Repost from Product Friendly
Google представил Flutter 3.3 🎉 В обновлении: ✔️повышена производительность при обработке текста ✔️добавлены новые обновлени
Google представил Flutter 3.3 🎉 В обновлении: ✔️повышена производительность при обработке текста ✔️добавлены новые обновления для пакета go_router, DevTools и кое-что еще. По традиции наша Flutter-команда Friflex сделала первый перевод официального релиза фреймворка. Уже на VC. Как вам обновление? Уже перешли на Flutter 3.3? Делитесь в комментариях 👇🏻

2/9/2022 💻Работа: + 8, 45 ч. Завершил вчерашнюю задачу, сделал Pull Request. Повозился с hover для выбранной ячейки и шириной PopupMenuItem. С шириной вопрос пока так и не закрыт. Она там почти не контролируется 🧑‍💻Что изучаю/сложности/интересное: Как закрыл вчерашние вопросы с PopupMenuItem: 1. При тапе на нужный пункт - выделить другим цветом ячейку PopupMenuItem Решение: Сделал кастомный PopupMenuItem. В super добавил color. Теперь ячейка выделяется при нажатии в нужный цвет 2. Данные в PopupMenuItem я беру с массива, по которому прохожу через .map Структура такая
itemBuilder: (_) => myList
          .map(
            (e) => PopupMenuItem(
              child: Row(
               children:  [
                 Text('$e'),
                 Icon

Я бы хотел поменять значения в 'e'. Например, мне приходит Екб, а я хочу выводить Екатеринбург. Решение: Добавил мапу, куда в key кладу приходящие значения с листа myMap = {myList[0] : Екатеринбург, и тд} Получаю так:
itemBuilder: (_) => myList
          .map(
            (e) => CustomPopupMenuItem(
              child: Row(
               children:  [
                 Text('${localeMap[e]}'),
                 Icon

Не думал о таком решении, спасибо, ребят👍 📚Английский язык: + 0, 28 ч. сериал Shameless на англ. 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 25 дней) ✅ - зарядка утром +1 (всего - 27 дней) ❌ - силовая тренировка через день. Перенесу на завтра (всего - 6 дней) ✅ - прогулки на свежем воздухе. 3500 шагов ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 10 дней)

1/9/2022 💻Работа: Почти завершил небольшую задачу. Думал, что будет быстрее) Уперся в пару подводных камней, о них ниже 🧑‍�
1/9/2022 💻Работа: Почти завершил небольшую задачу. Думал, что будет быстрее) Уперся в пару подводных камней, о них ниже 🧑‍💻Что изучаю/сложности/интересное: Столкнулся с двумя проблемами в PopupMenuButton: 1. При наведении на нужный пункт - выделить другим цветом(скрин не мой, но суть отражает). Пока не нашел решение. Оборачивал в Theme, в Container, Inkwell с нужными параметрами. Inkwell вообще не отрабатывает почему-то 2. Данные в PopupMenuItem я беру с массива, по которому прохожу через .map Структура такая
itemBuilder: (_) => myList
          .map(
            (e) => PopupMenuItem(
              child: Row(
               children:  [
                 Text('$e'),
                 Icon

Я бы хотел поменять значения в 'e'. Например, мне приходит Екб, а я хочу выводить Екатеринбург. Была основная идея - сделать через мапу ключ-значение. Но
PopupMenuItem
не обернуть для метода с мапой. Пока тоже не нашел решение) 📚Английский язык: + 0, 40 ч. сериал Shameless на англ. 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 24 дня) ✅ - зарядка утром +1 (всего - 26 дней) ✅ - силовая тренировка через день +1(отдых - пресс) (всего - 6 дней) ❌ - прогулки на свежем воздухе. Сегодня дождь:) ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 9 дней)

31/8/2022 💻Работа: Занимался правками ревью и анализом двух задач. Одну пока так и не понял как дебажить, так как баг появляется только на реальном устройстве 🧑‍💻Что изучаю/сложности/интересное: Сегодня мне подсказали интересный кейс: У меня была такая структура:
Row(
 children: [
   ...[ ].map((e) =>
  )
 ]
)

Через spread-оператор я добавлял список в список. Если в списке только один spread-оператор и больше ничего, это лишняя операция копирования. Вариант достаточно запутанный, так как другой разработчик при чтении кода будет думать, что там еще что-то есть, пока не дойдет до конца списка Решение:
final Iterable<String> yourList = [ ];
Row(
 children: 
   yourList.map((e) =>
 ).toList()
)

У children убирается список, в конце приводим к .toList() Заодно и массив лучше вынести отдельно:) 📚Английский язык: + 0, 38 ч. сериал Shameless на англ. 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 23 дня) ✅ - зарядка утром +1 (всего - 25 дней) ✅ - силовая тренировка через день +1 (всего - 5 дней) ✅ - прогулки на свежем воздухе. 4000 шагов. Гуляю в лесу:) ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 8 дней)

На четыре дня телеграм-канал Мерка @merkteam превратился в трибуну Flutter-разработчика из их команды. Такой же формат, как в
На четыре дня телеграм-канал Мерка @merkteam превратился в трибуну Flutter-разработчика из их команды. Такой же формат, как в коллективном твиттере, только в телеграмме: − Сергей пишет с чего начинал; − почему сбежал от React Native; − какие по его мнению есть справедливые и не очень претензии у нативных разработчиков к флаттеру. Ивент уже идет, приходите читать и участвовать в дискуссии: https://t.me/merkteam

30/8/2022 💻Работа: Меня можно поздравить с ачивкой - впервые одна из моих задач не прошла тестирование😅 Иконки не подгрузились на стейдж сборке. Массив был через lowercase, а нужен uppercase 🧑‍💻Что изучаю/сложности/интересное: Сегодня было собеседование внутри компании. Цель - понять пробелы в знаниях, выявить слабые стороны:) Из фидбека, что буду изучать(не теорию прочитать, а изучить:)) в ближайшее время: - отличие create от value в BlocProvider - как работают BlocBuilder, BlocConsumer, BlocListener - императивная, декларативная навигация - как работают методы push, pop, replace в Navigator - разобраться с регистрацией в getIt. singleton vs injectable vs singleton и тд. Чем отличается регистрация Буду делиться информацией по ходу изучения P.S. Хорошо рассказал чистую архитектуру:) 📚Английский язык: + 0, 53 ч. сериал Shameless на англ. Если вы хотели начать изучать английский по сериалам/фильмам, то в puzzle-movies сейчас неплохие скидки: https://puzzle-movies.com/prices?code=pm1Sep22d50Jh Основные плюсы площадки, которые я заметил: - можно получить перевод слова или фразы при наведении на англ субтитры - незнакомые слова можно сохранять в словарь и выгружать на телефон в приложения для запоминания - приложение на телефоне и сервис на пк. Можно изучать в перерывы/обед-ужин 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 22 дня) ✅ - зарядка утром +1 (всего - 24 дня) ✅ - силовая тренировка через день +1(отдых - просто пресс) (всего - 4 дня) ❌ - прогулки на свежем воздухе. Было несколько часовых созвонов. Не выбрался на улицу) ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 7 дней)

29/8/2022 💻Работа: Пофиксил ревью текущих задач, сделал одну небольшую задачу по фиксу бага и почти завершил еще одну Задачу по фиксу бага сам завел. Когда занимался другой задачей, заметил баг по неправильному отображению. Написал лиду, завел задачу:) Завтра собеседование внутри компании😁 🧑‍💻Что изучаю/сложности/интересное: Интересное из ревью - FutureBuilder должен быть максимально близко к тому месту, где используется У меня он был немного выше P.S. В выходные отдыхал от пк:) 📚Английский язык: + 1, 36 ч. сериал Shameless на англ. 💪Баланс работа-остальные сферы: ✅ - читаю Чистый код дядюшки Боба. + 44 м. (всего - 7,44ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 21 день) ✅ - зарядка утром +1 (всего - 23 дня) ✅ - силовая тренировка через день +1 (всего - 3 дня) ❌ - прогулки на свежем воздухе. Сегодня был дождь:) ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 6 дней)

Если хотите сделать свой пет проект для резюме, но нет макета и тз, ловите:) Макет: https://www.figma.com/file/KqZcU5m3GMxAHwgFkvCONz/ECOMMERCE?node-id=2%3A845 Тз: https://docs.google.com/document/d/1VedkRcsN6yukGO2uWES4RuIM8KMtESZ8p7zD7nGySMs/edit?usp=sharing

26/8/2022 💻Работа: + 9, 36 ч. Закрыл основную задачу и почти завершил еще одну небольшую:) Во вторник у меня собеседование внутри компании. Не знаю, какие будут вопросы и в чем цель) В любом случае опыт классный 🧑‍💻Что изучаю/сложности: Решение вчерашних 2 проблем: 1. Вначале избавился от BlocBuilder, заменив его на Builder. Сверху у меня был Provider, от которого и нужен был контекст(Builder дает доступ к контексту родителя). Дальше мне сказали, что и провайдер не нужен😁 Тогда я прокинул context.read() в параметры и все:) 2. Проблема, где нужно было по новому передавать значение на кнопку. Сделал через ValueChanged<T>, добавив в параметры:) Поймал себя на том, что не понимаю, как работают некоторые вещи. Изучаю, как что работает. Начал больше углубляться - появилась уйма вопросов:) 📚Английский язык: + 0, 40 ч. сериал Shameless на англ. 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +-1(поздно лег) (всего - 20 дней) ✅ - зарядка утром +1 (всего - 22 дня) ❌ - силовая тренировка через день +1 (всего - 2 дня) ❌ - прогулки на свежем воздухе ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 5 дней)

25/8/2022 💻Работа: + 9, 36 ч. В основном занимался фиксом ревью и сделал две небольшие задачки Была интересная задача, где нужно было внутри квадрата показывать прямоугольник(абстрактно). Размер должен меняться пропорционально родителю при масштабировании. Уйму всего перепробовал и остановился на FractionallySizedBox() Размеры остаются пропорционально, ничего никуда не съезжает) 🧑‍💻Что изучаю/сложности: Столкнулся с 2 проблемами: 1. По ревью нужно избавиться от BlocBuilder. Но в таком случае теряется доступ к контексту и падает ошибка. Пробовал через getIt и provider, всё не то:) 2. Сложно описать, но нужно по тапу на кнопку выделять ячейку и менять по значению. Делал это через стейт StatefulWidget. По ревью нужно вынести метод, сделать static. Сделал, потерял доступ к стейту) Нужно сделать через VoidCallback? 📚Английский язык: + 1, 10 ч. сериал Shameless на англ. 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 20 дней) ✅ - зарядка утром +1 (всего - 21 день) ❌ - силовая тренировка через день +1 (всего - 2 дня) ❌ - прогулки на свежем воздухе ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 4 дня)

Успешно прошел испытательный🥳 Почти дословная цитата: "Всем довольны. Здорово вырос с прихода в компанию. Есть мотивация и стремление развиваться." :) Завершаю текущие задачи и будет большая, чтоб посмотреть, где пробелы и что нужно подтянуть:)

22/8/2022 💻Работа: + 9, 44 ч. Завтра должен быть долгожданный фидбек по завершению моего испытательного:) В основном занимался фиксом ревью двух задач. Одну пока так и не дофиксил) Наполовину сделал задачку по фиксу бага. Планирую завершить завтра до дейлика 🧑‍💻Свой проект: + 0 ч. Пока так же не выходит уделять время) 📚Английский язык: + 1, 20 ч. 50 м. - сериал Shameless на англ. 30 м. - Duolingo 💪Баланс работа-остальные сферы: ❌ - читаю Чистый код дядюшки Боба. + 0 м. (всего - 7ч.) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 19 дней) ✅ - зарядка утром +1 (всего - 20 дней) ✅ - силовая тренировка через день +1(отдых) (всего - 2 дня) ❌ - прогулки на свежем воздухе ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 3 дня)

21/8/2022 По большей части отдыхал от пк Вечером занялся рабочей таской. Еще в пятницу очень хотел дофиксить ревью, но там есть серьезные моменты, нужно переписать) 📚Английский язык: + часов 8 смотрел сериал Shameless на англ. 💪Баланс работа-остальные сферы: ✅- читаю Чистый код дядюшки Боба. + 40 м. (всего - 7ч.) Интересное из книги: - Функции должны быть компактными - Функция должна выполнять только одну операцию - Один уровень абстракции на функцию - Название функции должно описывать, что она делает(глагол в начале - writeField, checkPassword и тд.) - Длинное содержательное имя лучше короткого невразумительного - Желательно, чтоб у функции было как можно меньше аргументов(сложно тестировать и это всё усложняет) - Блоки try/catch рекомендуется выделять в отдельные функции - Дублирование кода иногда считается корнем всего зла в программировании. 1. Увеличивает объем кода. 2. При изменении, придется вносить изменения во всех дубликатах 3. Вероятность ошибки возрастает (умножать на количество дублирования) ✅ - встаю в 5 утра, ложусь к 10 вечера +1 (всего - 18 дней) ✅ - зарядка утром +1 (всего - 19 дней) ✅ - силовая тренировка через день +1 (всего - 1 день) ✅ - прогулки на свежем воздухе - 4000 шагов ✅ - отказ от сахара, мучного и фастфуда +1 (всего - 2 дня)