Flutter с нуля до профи | #7 - Работа с API, http | Библиотека dio | Курс для начинающих 2023

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 ส.ค. 2024
  • Flutter - это идеальный инструмент, чтобы начать путь в айти или перейти на него в 2023. А я как раз тот самый коуч, которого ты искал.
    В этом уроке мы научимся работать с API из Flutter приложения. Рассмотрим особенности библиотеки для работы с http - dio. Узнаем как разделять код UI и логику приложения. Познакомимся с концепцией репозиторий в Flutter приложениях.
    В ходе курса, мы вместе разберемся с тем, что такое Flutter и как на нем сделать первое приложение. Научимся программировать на dart, узнаем про основные виджеты в Flutter, как работать с сетью http dio, узнаем про основной стейт менеджемнт в Flutter - BLoC.
    Ссылки из видео:
    😎 Репозиторий с кодом из уроков: github.com/Frezyx/flutter_tut...
    🤓 Документация API CryptoCompare:
    min-api.cryptocompare.com/doc...
    ✅ Полезные ссылки:
    👨‍💻 Мой GitHub github.com/Frezyx (Куча кода на dart / Flutter)
    💬 Telegram с анонсами t.me/frezycode
    🚀 Boosty boosty.to/frezycode
    📸 Instagram / frezycode
    00:00 - 00:21 Вступление
    00:21 - 01:55 Что такое API ?
    01:55 - 02:30 Библиотеки на dart для работы с сетью - dio, http
    02:30 - 03:00 В чем отличие библиотек dio и http ?
    03:00 - 03:29 Устанавливаем библиотеку dio
    03:29 - 05:06 Какое мы будем использовать api | API CryptoCompare
    05:06 - 05:36 Нужно ли получить специальный API KEY ?
    05:36 - 06:43 Как оформлять http - запросы в flutter проекте
    06:43 - 07:16 Когда мы поговорим про разделение UI и логики ?
    07:16 - 07:41 Что такое репозиторий
    07:41 - 08:54 Создаем наш первый репозиторий
    08:54 - 09:36 Про асинхронность async await
    09:36 - 10:51 Пишем первый метод работы с сетью
    10:51 - 11:28 Что такое debugPrint ? Отличия от print
    11:28 - 13:12 Вызываем API метод из Flutter приложения
    13:12 - 14:37 Что такое response и из чего он состоит ?
    14:37 - 15:13 Что приходит в ответе от крипто API
    15:13 - 16:36 Как показывать данные из API на экране. Про модели.
    16:36 - 18:31 Создаем модель криптовалюты
    18:31 - 22:07 Парсим сложный json в нашу dart модель
    22:07 - 22:53 Финализируем логику парсинга в голове
    22:53 - 27:05 Показываем данные из API на экране
    27:05 - 27:34 Любуемся результатом загрузки данных
    27:34 - 28:44 Передаем полученные данные в виджет
    28:44 - 34:17 Меняем метод API, чтобы получить все данные о криптовалютах
    34:17 - 35:37 Добавляем иконку криптовалюты из апи
    35:37 - 36:42 Немного правим дизайн, убираем elevation у AppBar
    36:42 - 37:32 Добавляем виджет загрузки в приложение
    37:32 - 38:25 Автоматическая загрузка при заходе на экран
    38:25 - 39:53 Добавляем в список больше криптовалют
    39:53 - 40:15 Подведение итогов урока
    40:15 - 40:43 Что будет в следующем уроке ?
    #войтивайти #программирование #flutter

ความคิดเห็น • 88

  • @user-lm1sm2ek3h
    @user-lm1sm2ek3h 5 หลายเดือนก่อน +11

    Не ожидал, что Том Холланд устанет от роли Человека-паука и станет снимать обучающие видео по Flutter... Спасибо тебе огромное! Все доступно и понятно.

    • @frezycode
      @frezycode  5 หลายเดือนก่อน

      Спасибо большое! Да я пока с Гоблином разобрался, остальных паучков по домам отправил и сижу думаю, делать нечего - изучу професиию будущего

    • @Kamong1r
      @Kamong1r 2 หลายเดือนก่อน

      @@frezycode кринге

  • @Polite_person_
    @Polite_person_ ปีที่แล้ว +12

    Прикольно. Небольшая просьба на будущее => сделать шрифт крупнее и разрешение 1080, а то 720 мылит

  • @user-cn1ix2us2b
    @user-cn1ix2us2b ปีที่แล้ว

    Спасибо за урок!

  • @Fenomentiy_
    @Fenomentiy_ ปีที่แล้ว +1

    очень круто!

  • @rus_dos
    @rus_dos ปีที่แล้ว +2

    Молодец! Все очень четко!

  • @andrewkunderenko8826
    @andrewkunderenko8826 ปีที่แล้ว +1

    Отличные уроки, большое тебе человеческое спасибо!

  • @erlanoff_
    @erlanoff_ ปีที่แล้ว +2

    Братан, харош! Давай-давай, вперед! Контент в кайф! Можно еще? Ваще красавчик! Можно вот этого вот почаще?

  • @TraubenfeldGANG
    @TraubenfeldGANG ปีที่แล้ว +2

    Хорошая речь. Понятно излагаешь. Спасибо

  • @darul-asar381
    @darul-asar381 ปีที่แล้ว +4

    34:30 Стас, огромное тебе спасибо за уроки! Пожалуйста, можешь показать, как ты находишь решения в документации? Самостоятельное чтение документации - это очень важный навык для новичков.

  • @IT_MobileDev
    @IT_MobileDev 10 หลายเดือนก่อน

    Спасибо очень полезные информаци много чего узнал а теперь надо самостоятельно потыкать

  • @konstantin-svahuman8630
    @konstantin-svahuman8630 ปีที่แล้ว +1

    супер

  • @user-xs2vp5tv2m
    @user-xs2vp5tv2m 9 หลายเดือนก่อน

    Автору респект

  • @doringavrilita6694
    @doringavrilita6694 5 หลายเดือนก่อน +1

    You are the BEST!!!
    I like your videos. The presentation of the material is excellent!
    Thank you🔥

    • @frezycode
      @frezycode  5 หลายเดือนก่อน

      Thanks man 🤝

  • @romanbutler156
    @romanbutler156 ปีที่แล้ว +2

    Стас, спасибо тебе огромное. Мне кажется что у тебя самое простое и нативно понятное объяснение в твоих роликах. Не забрасывай плиз

    • @frezycode
      @frezycode  ปีที่แล้ว

      Огромное спасибо за такой приятный фидбек 🙏

  • @TemhaN_UwU
    @TemhaN_UwU 3 หลายเดือนก่อน

    Огромное спасибо, делал админ панель на laravel, с api, базой данных и тд.
    А теперь благодаря твоим урокам использую свое же api
    Желаю тебе удачи ❤

  • @yakut54
    @yakut54 11 หลายเดือนก่อน +1

    Под конец видео всё же разобрался с хитросплетениями приложения )
    Видео получилось очень полезным.
    Стас, спасибо за науку. Поехали дальше....

    • @frezycode
      @frezycode  11 หลายเดือนก่อน

      Спасибо огромное! Рад что все получилось 👍

  • @TheILOVEYOUXD
    @TheILOVEYOUXD ปีที่แล้ว +5

    Опа, сижу такой думаю, почему бы флаттер не пощупать и нахожу твой канал😮
    Все супер объясняешь продолжай в том же духе!
    А мы тебя лайками подержим❤

    • @frezycode
      @frezycode  ปีที่แล้ว

      Огромное спасибо за такой теплый фидбек 🙏

    • @Kfilmos
      @Kfilmos ปีที่แล้ว

      Полностью согласен. Самая лучшая подача информации из тех которые видел до сих пор

  • @skyonavelight2221
    @skyonavelight2221 ปีที่แล้ว +4

    По чаще бы видео и по подробней о компоновке виджетов и рефакторинге

    • @frezycode
      @frezycode  ปีที่แล้ว +1

      Спасибо, услышал. Думаю про это сделаю полноценный ролик не в рамках курса 👌

  • @user-tj9qz5ec1f
    @user-tj9qz5ec1f ปีที่แล้ว +2

    Большое спасибо за курс!!! Надеюсь ты вырастишь до канала миллионика))

    • @frezycode
      @frezycode  ปีที่แล้ว

      Огромное спасибо! Постараемся 🚀

  • @JevLogin
    @JevLogin 3 หลายเดือนก่อน +1

    ETH: Object
    USD: 3169.58
    вот знать бы это год назад )

  • @zailoodin
    @zailoodin ปีที่แล้ว +1

    КРУТО ОЧЕНЬ ПОНЯТЕНЬ ТЫ ОЧЕНЬ ХОРОШО ОБЯСНЯЕШЬ

    • @frezycode
      @frezycode  ปีที่แล้ว

      Огромное спасибо за фидбек 🙏

  • @user-lr5ez4pq7h
    @user-lr5ez4pq7h ปีที่แล้ว +2

    обработку ошибок хотелось бы увидеть

  • @partavshcole175
    @partavshcole175 ปีที่แล้ว

    Подскажи пожалуйста, какие расширения для Vs Code ты используешь для генерации конструкторов и сереализации? Да и в общем и целом думаю будет очень полезно узнать о твоих любимых расширениях)

  • @victorsokoluik4573
    @victorsokoluik4573 8 หลายเดือนก่อน

    Была бы возможность повторно ставить лайки ставил бы) Успехов каналу! А у меня новый вопрос: Стас ты не подскажешь приходилось ли тебе работать с таким зверем как Strapi? Если да, можешь поделиться опытом или даже видос запилить на эту тему.

  • @vipe7639
    @vipe7639 ปีที่แล้ว +1

    Не думал что человек паук, или же сам Том Холланд будет обучать меня флаттеру!

    • @frezycode
      @frezycode  ปีที่แล้ว

      Аххххпрззз, да не похож я 😅😅😅

  • @vosirandr
    @vosirandr 16 วันที่ผ่านมา

    А в репозитории входит логика взаимодействия с файловой системой компьютера?

  • @Hande_hoch
    @Hande_hoch 2 หลายเดือนก่อน +1

    - you know how they pronounce "API" in Russian?
    - how?
    - "AH PEE"
    😄😄

    • @frezycode
      @frezycode  2 หลายเดือนก่อน

      😂😂😂 That's really how we pronounce API. Also SDK on Russian sounds like ESDEKA

  • @jackwolf5663
    @jackwolf5663 ปีที่แล้ว +1

    Привет , очень нравится твой контент , но возникла проблема , Invalid Internet address , по возможности пытался найти ошибку самостоятельно , но пока нет результата , подскажи с какой стороны можно зайти )

  • @amirk7991
    @amirk7991 ปีที่แล้ว

    Стас где тебе можно написать вопрос с картинкой?

  • @sultankasymov9907
    @sultankasymov9907 2 หลายเดือนก่อน

    CryotoCoinTıle откуда у нас?)

  • @user-lt4nw7cz8l
    @user-lt4nw7cz8l ปีที่แล้ว

    В эмуляторе все верно работает, но когда запускаю apk на телефоне, то вижу только CircularProgressIndicator, список валют не отображается. С чем может быть связано?

  • @dicce7082
    @dicce7082 ปีที่แล้ว

    cпасибо огромное за урок Стас
    Уменя почему то проблемы с АPI выдает ( throw createError(response, "Failed host lookup: '$host'");

    • @frezycode
      @frezycode  ปีที่แล้ว

      Не может достучаться до апи, возможно проблемы с интернетом, либо можно попробовать включить впн.

  • @flutterkg
    @flutterkg ปีที่แล้ว

    Привет Стас. Заранее большое спасибо за пополнение наших знаний. Мой вопрос заключается в следующем: В этом видео priceInUSD:{e.value as Map} было понятна, но какова цель ['USD'] с ним?

    • @frezycode
      @frezycode  ปีที่แล้ว

      Привет 👋
      В словаре который приходит с бекенда может быть эквивалент в нескольких валютах. И USD здесь - идентификатор этой валюты

  • @uniorblade817
    @uniorblade817 6 หลายเดือนก่อน

    Не могу понять, почему в мою мапу которую я возвращаю из репозитория данные записываются несколько раз. Т.е по апи я получаю данные, потом на моменте
    final dataList = data.entries.map((e) => ... ) получается, что dataList хранит в себе мапу повторенную несколько раз. Получается массив массивов. Как сделать так, чтобы оно не итерировало больше 1го раза ?

  • @zailoodin
    @zailoodin ปีที่แล้ว +1

    ДО ЭТОГО ВИДЕО НАДО СДЕЛАТЬ САМ СМОГУ ЛИ НЕ ЗНАЮ ТОЧНО😃

  • @user-bz9lg1cw1h
    @user-bz9lg1cw1h ปีที่แล้ว +2

    Сделай урок по Json Flutter , не смог найти нормального обучения на youtube 🙏😊

    • @frezycode
      @frezycode  ปีที่แล้ว

      Имеешь ввиду про json annotation ?

    • @user-go2pr5ri5q
      @user-go2pr5ri5q ปีที่แล้ว

      @@frezycode да, посмотри по блогу Феликса и verygood ventures. Они сделали генерацию всего проекта, репозитортев как пакетов отдельных... Было бы неплохо по этому записать обзор, для популяризации данного слоёного подхода.

    • @user-bz9lg1cw1h
      @user-bz9lg1cw1h ปีที่แล้ว

      @@frezycode Стас , добрый день , хочется все же базовые знания ручной сериализации Json в Flutter . Понимаю, все пишут что тема простая , но для меня оказалась трудней всего )))🤷‍♂

  • @JevLogin
    @JevLogin 3 หลายเดือนก่อน

    говоришь "папка models создается на уровне репозитория..." а сам сделал внутри внутренней папки... так спецом задумано? или ошибка?

  • @pelsadorjknigm1004
    @pelsadorjknigm1004 3 หลายเดือนก่อน

    Привет, не знаю уже и к кому обратиться. Я новичок в flutter. Хочу установить socket соединение. Использую телефон для дебага. Connection refused, errno 111. И все, вообще никак не хочет подключаться

  • @user-xs2vp5tv2m
    @user-xs2vp5tv2m 9 หลายเดือนก่อน

    Всем привет, у всех показывает на все валюти биткоина, ато у меня что то больше трёх не показывает

  • @user-xr6zo2qf7y
    @user-xr6zo2qf7y ปีที่แล้ว +1

    спасибо за урок
    после джавы парсинг выглядит очень страшным
    нельзя ли типа через аннотации в классе модели?

    • @frezycode
      @frezycode  ปีที่แล้ว

      В flutter к сожалению или к счастью запрещена рефлексия. Поэтому только кодогенерация (

  • @tmteam-official
    @tmteam-official ปีที่แล้ว

    12:57
    Здравствуйте, все прикольно и хорошо объяснили, но у меня вопрос. Когда вы создали floatingButton и нажали на кнопку, у вас функция как-то отработала, хотя вы не сделали OnPressed асинхронной и не вызвали метод с помощью await. У меня вопрос, как? Я смотрел по гуглу и узнал, что при использовании `OnPressed: () => ... ` await не нужен, но у вас получилось в `OnPressed: (){...}` тоже. Если я что-то не понял или там свои Flutter штучки, можете, пожалуйста, написать их здесь, просто очень интересно.

    • @yakut54
      @yakut54 11 หลายเดือนก่อน

      я ваще вот так сделал:
      onPressed: () {
      CryptoCoinsRepository()
      .getCoinsList()
      .then((cryptoList) {
      setState(() => _CryptoCoinsList = cryptoList);
      },
      );
      },

  • @wolvie8119
    @wolvie8119 ปีที่แล้ว +1

    А как же retrofit?(

  • @Yhwach-mv9cu
    @Yhwach-mv9cu ปีที่แล้ว

    А подскажи пожалуйста, почему у меня отображаются коины на экране только тогда, когда я в VSCode ctrl + s нажимаю? Допустим я кликнул в приложении на кнопку, ничего не отобразилось, а когда нажал ктрл + с , то все отобразилось

    • @frezycode
      @frezycode  ปีที่แล้ว

      Что-то очень странное происходит, как-будто экран не обновляется в нужный момент. Лучше перейди по ссылке прикрепленной к видео и посмотри как там код написан.
      Сверься, может что-то пропустил 🤷‍♂️

  • @лолкек
    @лолкек 9 หลายเดือนก่อน +1

    а вы тоже хотите войти в айти через флатер?

  • @yakut54
    @yakut54 11 หลายเดือนก่อน

    окончательно мозг сломал 😵‍💫😆
    UPD: Хотя по сути все app фреймворки плюс минус похожи. Модульность, state manager и всё такое.

    • @frezycode
      @frezycode  11 หลายเดือนก่อน

      А чем конкретно я так мозг сломал ?)
      Действительно интересно, что может казаться странным и непонятным.

    • @yakut54
      @yakut54 11 หลายเดือนก่อน

      @@frezycode первое приближение к коду, языку... после js/ts код глаза режет. Но ничего, к концу ролика разобрался что к чему. Даже на телефоне запустил. Ты же мне в телеге про пермишн писал. Завтра думаю продолжить. Времени совершенно нет на учёбу 🙁

  • @MeynSpain
    @MeynSpain 7 หลายเดือนก่อน

    Я не знаю подскажет мне кто нибудь или нет, но все же. Я пытаюсь сделать post запрос к OpenAI, чтобы мне ответил ChatGPT, api ключ у меня есть. Попробовал через postman, все получилось, но почему то когда пытаюсь это сделать из кода, то получаю ошибку 403. Пробовал и сам код писать, и у этого самого chat gpt спрашивать, и брал код, который предлагает postman. Но все равно получаю ошибку 403.

  • @SeregaIzhutkin
    @SeregaIzhutkin 3 หลายเดือนก่อน

    сейчас биткоин по 63

  • @vitek12321
    @vitek12321 ปีที่แล้ว +1

    Спасибо огромное за такой насыщений урок! На курсах программирования до АПИ добираются через 3-4 месяца, не раньше)) А тут бах! На 7 уроке уже иконки асинхронно получаем))
    Как более корректно обрабатывать "!" при обработке "_cryptoCoinList!" ?
    Я так понимаю, это forced unwrapping, как в Swift. Верно?

    • @frezycode
      @frezycode  ปีที่แล้ว +1

      Спасибо большое за отзыв)
      Да да, это как force unwrapping. Посмотрела сейчас как это в свисте делается. Один в один.
      Лучше всего вообще не использовать этот механизм. Нужно всегда делать проверку на null. Анализатор при правильной проверке не даст совершить ошибку и получить выстрел из null в ноги)

    • @vitek12321
      @vitek12321 ปีที่แล้ว

      @@frezycode В Swift безопасная конструкция с опционалами делается так:
      let myString: String? = funcReturnsOptionalString()
      if let wrappedStr = myString { //если myString != nil, то записать значение в wrappedStr
      print(wrappedStr) // используем wrappedStr, как String != nil
      }
      В Flutter (Dart) так можно сделать?

  • @bakekz663
    @bakekz663 ปีที่แล้ว

    почему у меня ошибка выходит Dio

    • @frezycode
      @frezycode  ปีที่แล้ว

      Напиши лучше в телеграм

  • @user-zz4uj1mr5f
    @user-zz4uj1mr5f 8 หลายเดือนก่อน

    Зачем нужно объявлять каждую переменную как final?
    Зачем нужно нижнее подчеркивание в названии метода? это особенность синтаксиса языка?

    • @kutyshevdev3626
      @kutyshevdev3626 4 หลายเดือนก่อน +1

      _ - это инкапсуляция

    • @user-zz4uj1mr5f
      @user-zz4uj1mr5f 4 หลายเดือนก่อน

      а. ясно.@@kutyshevdev3626

  • @user-id1gi7ed7e
    @user-id1gi7ed7e 4 หลายเดือนก่อน

    Ребята, убедитесь, что на вашем телефоне или эмуляторе есть подключение к wife

  • @danikpro8587
    @danikpro8587 11 หลายเดือนก่อน

    Библиотека ди.. стоп ЧТО?! ДИО!!

    • @frezycode
      @frezycode  11 หลายเดือนก่อน

      А что не так?)

    • @danikpro8587
      @danikpro8587 11 หลายเดือนก่อน

      @@frezycode отсылка на джоджо

  • @serghell6053
    @serghell6053 3 หลายเดือนก่อน

    Парсинг канеш жестокий!

  • @flipygmd
    @flipygmd 9 หลายเดือนก่อน +1

    Спасибо тебе за уроки! Прохожу вот твой курс и я на 21:42 столкнулся с проблемой. При дебагинге приложения нажимаю на кнопку в нижнем правом углу для загрузки данных, после чего в crypto_coins_repository.dart программа останавливается на 13 строчке (priceInUSD: (e.value as Map)['USD'],) и выдаёт следующее сообщение: "Произошло исключение. _TypeError (type 'double' is not a subtype of type 'Map' in type cast)". На форумах искал решение, не нашёл(

    • @user-zz4uj1mr5f
      @user-zz4uj1mr5f 8 หลายเดือนก่อน

      вот и у меня тоже самое

    • @user-zz4uj1mr5f
      @user-zz4uj1mr5f 8 หลายเดือนก่อน

      попробуй проверить ссылку на точность. Я переписал ее с видео все стало работать.