background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "04. Dart Event Loop — Илья Вирник"

input logo icon
Теги видео
|

Теги видео

04
dart
event
loop
илья
вирник
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:10
давайте начинать еще всем привет привет
00:00:13
всем кто кто в зуме я вас не вижу но
00:00:16
верю что вы есть у меня зовут илья я
00:00:20
занимаюсь разработкой приложений yandex
00:00:21
про в приложение для водителей курьеров
00:00:23
не только в яндекс такси вот и пишем и
00:00:27
от приложение на флаттере
00:00:29
что вы были на позапрошлом занятие то я
00:00:32
там рассказывал немножечко про рендеринг
00:00:34
builder и виджеты и всякие такие
00:00:36
интересные штуки хотели мы поговорим про
00:00:41
менее относящуюся
00:00:43
первая часть экватору тему и более
00:00:45
относящуюся непосредственно к flat run о
00:00:47
тоже достаточно техническую тему про
00:00:49
иван клуб и что это такое как вообще
00:00:52
дарт работает с асинхронным кодом
00:00:54
синхронным как устроена в нем нога по .
00:00:57
есть ли она вообще
00:00:59
затем мы перейдем ко второй теме
00:01:02
поговорим про play from china вы
00:01:05
для начала эти остановимся antal опять
00:01:07
же зачем нам это все зачем это нужно
00:01:09
проговаривать прежде всего из начинать
00:01:12
там цемент лупа совсем коронки
00:01:13
многопоточные вот этого всего зачем это
00:01:15
все учить но кажется очевидной наверное
00:01:17
ответ зачем но проговорим воли лишний
00:01:20
раз в дар те вообще в принципе
00:01:22
синхрон к им нога по . устроены опять же
00:01:26
как как и рендеринг в флаттере так рио
00:01:28
синхрон ковдор те устроена радикально
00:01:29
иначе чем в сетей кофе они просто совсем
00:01:33
другие и там на первых порах у тех кто
00:01:36
работает асинхронным кодом для
00:01:40
круглых глаз остановится и не понимают
00:01:42
почему так и а когда горит что это все
00:01:44
еще и в одном потоке то полностью
00:01:46
ломается весь шаблон и не понятно как
00:01:48
это вообще работает почему она не лагает
00:01:50
ну а для того чтобы в принципе какие-то
00:01:52
полноценные программы писать работать с
00:01:54
этим необходимо уметь и необходимо
00:01:55
понимать как это устроено иисус на
00:01:57
почему так
00:01:58
если говорить про платформенные каналы
00:02:01
это наша вторая тема на потому что
00:02:03
другой платформенный канал спали ртов
00:02:05
платформенный канал это механизм вызова
00:02:09
платформенного кода то моё снова android
00:02:11
потом свифта купленная вот этого всего
00:02:13
из флаттера и что здесь интересно ну
00:02:17
глобальном флаттер сам по себе
00:02:19
юар framework и заточен он сугубо в
00:02:22
общем-то под создания интерфейсов
00:02:24
разработку в общем-то мобильных
00:02:25
приложений с точки зрения интерфейс
00:02:27
новой части но вместе с тем она борту
00:02:29
несет такую замечательную штуку как
00:02:31
florange на которую общий принцип
00:02:33
позволяет этому всему работать и
00:02:35
механизм взаимодействия с этим самым
00:02:38
платформе нам кодом потому что из
00:02:39
платформы никуда я все равно всегда
00:02:40
придется но флотар приложение работать с
00:02:44
нативной я сам с андроидом так или иначе
00:02:47
обращаться каким-то платформы
00:02:48
специфичным вещам камере и знак вспышки
00:02:52
клавиатуре к чему угодно и
00:02:54
флотар это все может более того может
00:02:58
достаточно интересным и приятным виде
00:03:00
это было о чем мы сегодня поговорим мы
00:03:02
поговорим там прежде всего про то как
00:03:04
вообще в дар те устроены включим и в
00:03:06
принципе с вещами уже знакомы там по
00:03:07
первому по
00:03:09
по первому по второму занятиям но
00:03:12
взглянем на то как они вообще устроен и
00:03:14
как они исполняются как устроен готовый
00:03:16
ван клуб и как он процессе задачки как
00:03:20
вообще выполняется готовый клад
00:03:21
синхронный и асинхронный
00:03:23
дальше немножко отдохнем и перейдём ко
00:03:26
второй части поговорим про plate for
00:03:28
channel и что такое вы уже спойлер
00:03:30
слышали но взгляни на это более детально
00:03:32
и посмотрим какие вообще бывают как они
00:03:34
работают начнём мы с ключей и и что с
00:03:38
ними вообще особенно
00:03:40
глобально что вообще такое фьють-фьють
00:03:42
и некий класс вы его наверняка уже
00:03:45
видели
00:03:46
фактически является такой generic
00:03:48
оберткой над
00:03:49
результатом выполнения какого-то
00:03:51
асинхронного кода какой-то асинхронной
00:03:53
операции у нас есть некая операция поход
00:03:56
там в сеть за ответами сервера она будет
00:03:59
выполнена там когда-то в неопределённом
00:04:01
будущем нам этот результат нужно во
00:04:02
что-то обернуть для того чтобы когда он
00:04:04
появится мы могли с ним работать
00:04:05
уф-лучи есть в целом общем-то три
00:04:08
состояния 1 танк up lean комплит от
00:04:11
когда она только создается на находится
00:04:14
в незавершенном состоянии операция либо
00:04:16
еще не запущена либо процессе цам этом
00:04:18
ждем ответа ждем кого-то вычисления и
00:04:21
не понятно что из этого выйдет конфликт
00:04:24
в из резалт это операция завершена
00:04:27
успешно все прошло хорошо гладенько
00:04:29
ответ получили можно работать
00:04:31
результатом и соответственно комплит от
00:04:33
with error с ошибкой если у нас сервер
00:04:38
пересадку или еще что-то пошло не так в
00:04:41
ходе выполнения нашей операции мы ловим
00:04:44
во всей ошибку можем обработать можем на
00:04:47
пони и даже с этим как-то
00:04:48
взаимодействовать
00:04:49
далее и как вообще глобально устроен дар
00:04:53
твой клуб и что это такое
00:04:55
концептуально вообще в целом дарт язык
00:04:57
однопоточный как как живу скрипта
00:05:01
главный поток за арте он же главный
00:05:04
изолят это поток на котором фактически
00:05:07
выполняется там все задачи синхронный и
00:05:10
асинхронный абсолютно любые весь код
00:05:11
который вы пишете выполняется в
00:05:13
одном-единственном
00:05:14
бортовым залезем который спавнится
00:05:17
вместе с созданием программ и создаете
00:05:20
из шаблона флотар приложения в нем
00:05:23
появляется функция main в нее кладем там
00:05:25
какой-нибудь виджет получаем уже
00:05:26
какой-то экранчик вот вместе со всем
00:05:28
этим делом у нас заспавнился
00:05:29
один-единственный изолят в котором
00:05:31
дальше будет выполняться весь код и
00:05:32
относящийся к ю а ю и не относящейся к
00:05:35
ею тоже
00:05:45
кликер не кликает ладно
00:05:51
окей перейдем так
00:05:54
что если вообще представляет изолят в
00:05:57
каждом и залить и flash потоки есть
00:06:00
фан-клуб его собственник иван клуб и это
00:06:02
такой некий вечный цикл который
00:06:04
выполняет все поступающие в этот взгляд
00:06:06
задач ну вообще концепт в принципе
00:06:08
понятной для многих других языков там
00:06:11
джаве лупер fifty а там разлук у нас
00:06:14
есть вечный цикл в него падают задачки
00:06:15
он крутится и выполняет их пока не есть
00:06:17
когда их нет они соответственно немного
00:06:20
естественно ждёт пока придёт следующая в
00:06:22
and лопе есть
00:06:23
две очереди задач обычные задачи и так
00:06:28
называемые микро тоски обе очереди fast
00:06:31
in the stout кто первым прилетел тот
00:06:34
первым из нее и вылетит
00:06:36
очередь обычную задачу а нам-то и обычно
00:06:38
это просто все подряд задачу очередь
00:06:40
микро task-ов
00:06:42
чуть-чуть отличается от обычной прежде
00:06:44
отличается тем что она имеет при
00:06:45
приоритет над обычную очередью задач
00:06:47
микро тоски то особенный вид задачу и
00:06:50
антропе они выполняются они имеют
00:06:52
приоритет над выполнением обычных задач
00:06:54
пояса раньше на каждой итерации вон зато
00:06:56
у нас сначала опустошается в очередь
00:06:58
микро task-ов после этого выполняются
00:06:59
уже обычные задачи и
00:07:03
соответственно обычная очередь начинает
00:07:06
выполнять попавшую сдачу же после микро
00:07:08
task-ов мы посмотрим в чем это
00:07:10
выражается то на некотором примере чуть
00:07:12
чуть дальше
00:07:13
чуть чуть рисунков как вообще глобальная
00:07:17
вон клуб устроено у нас есть нам
00:07:19
некоторые в antutu он обрабатывает катя
00:07:21
сказала вообще все вообще все это прям
00:07:23
совсем все это любые жесты любой user
00:07:24
input это вот символов запуске таймеров
00:07:28
обращения на сервер куда угодно
00:07:30
в очереди у нас когда есть какие-то
00:07:32
события а не по одному поступают в and
00:07:35
look он их выполняет ожидает завершении
00:07:37
выполнения первая задача
00:07:39
берёт вторую выполняет вторую берет
00:07:42
третью ну и собственно тут дальше
00:07:44
никакой магии каждая задача
00:07:46
последовательно вывод лупи летит как в
00:07:48
любом обычном другом цикле когда иван
00:07:50
капуста и он продолжает крутиться
00:07:52
провожает ждать пока поступят новый очки
00:07:55
как здесь работают фичи возможный
00:07:57
резонный вопрос свечи у нас асинхронный
00:07:59
и получается если мы последовательно
00:08:01
выполняем одну задачу за другой то любая
00:08:04
сохранной операция у нас должна
00:08:06
поставить на паузу нашем топ в ожидании
00:08:09
пока
00:08:11
сейчас резолвится пока появится какой-то
00:08:13
результат
00:08:15
фактических вещи работают немножко иначе
00:08:17
чем обычные синхронные сеточки фичи
00:08:21
будучи такой оберткой поступают наивен
00:08:24
клуб звонкам привет с третьим и
00:08:29
регистрирует callback который вызывается
00:08:33
на ивент лупи после того как свеча
00:08:36
резолвится пища у нас резолвится либо с
00:08:38
успешно либо с ошибкой и
00:08:41
call back который при поступлении ключи
00:08:43
в изолят этой самой асинхронные операции
00:08:46
клуба который регистрируется при
00:08:48
поступлении то значный vin код
00:08:50
выполняется на этом же event log и уже
00:08:52
после того как вы чай резолвится на
00:08:54
каждой итерации иван зуб грубо говоря
00:08:56
проверяет
00:08:58
есть ли в очереди задача которая была
00:09:02
зарегистрирована как call back этой
00:09:04
фичей на обработку этого результата и
00:09:06
попадает в него же тут никакой магии
00:09:08
тоже нет здесь есть на слайде некоторый
00:09:10
qr-код по нему его можно сканировать и
00:09:12
открыть у себя
00:09:14
желательно на компьютере карпат и мы
00:09:18
чуть-чуть дайте посмотрим на то как у
00:09:20
нас вообще выполняются
00:09:24
асинхронные и синхронные
00:09:27
задачу
00:09:29
ты только я пойму как
00:09:33
закрыть
00:09:41
слайд
00:09:44
проходим по ссылке тут у нас дтп от мы
00:09:47
не будем нажимать покажи ту кнопочку рам
00:09:49
кто нажал это большой спойлер потому что
00:09:52
будет происходить дальше вот у нас есть
00:09:55
некоторая функция
00:09:57
асинхронная помеченная ключевым словам
00:10:00
осин и
00:10:01
далее вызов четырех методов
00:10:05
что они у нас делают у нас есть метод а
00:10:08
все что он делает он просто синхронно
00:10:09
принцип а если этот б он принцип он
00:10:13
возвращает фича воет то есть в обертку
00:10:17
фактически на твой дом очень и
00:10:18
возвращает он тоже sync ronin принесет
00:10:20
синхронно бастард затем и выйдет
00:10:23
выполнение метода c и после этого
00:10:26
синхронно же принцип б.н. у нас есть
00:10:30
метод c который принимает параметр
00:10:31
откуда он был вызван то есть в случае с
00:10:33
моим функции мы
00:10:35
придаем main в случае с б мы передаем b
00:10:38
и у нас есть метод c
00:10:42
который принимает откуда он был вызван
00:10:44
синхронно принят принцип c старт здесь у
00:10:47
нас есть a weight фича
00:10:49
которая в качестве операции принимает
00:10:53
некий c running и в блоке d
00:10:56
рассказывает общем-то о том что
00:10:59
операция была выполнена и собственно c
00:11:02
закончила выполнение далее у нас идет
00:11:04
еще и микро тоска сверху всего этого
00:11:06
замечательного и мы принцип о том что c
00:11:09
завершилась и также в меня у нас есть
00:11:12
метод д который тоже не делает ничего
00:11:14
интересного синхронно принципе вопрос
00:11:17
как вы думаете в каком порядке это добро
00:11:21
будет выполняться
00:11:24
спойлер давайте сразу проговорим важную
00:11:26
вещь осинка weight если вы не знакомы
00:11:29
еще с тем что это такое ясенка weight
00:11:30
этого что ключевые слова которые
00:11:32
помещают функцию или метод как
00:11:34
асинхронную это совместно обязывает ее
00:11:36
возвращать именно фьюче мы не можем
00:11:38
вернуть из нее нефтью чем начать что
00:11:41
выполняться эта функция или метод бурито
00:11:43
синхронно и
00:11:44
пометка функции или метода отключим сама
00:11:47
7 позволяет нам в теле использовать
00:11:49
ключевые слова и weight что делает и
00:11:51
weight weight позволяет писать нам
00:11:53
асинхронный код так как если бы это был
00:11:56
кот синхронный то есть это означает что
00:11:59
мы выполним print б старт на 13 строке
00:12:03
наткнемся на weight метода c и останемся
00:12:07
ждать пока метод c будет выполнен и
00:12:10
только после того как у нас метод c
00:12:12
вернет свой результат в нашем случае это
00:12:15
фича вольт у нас за придется б осинка
00:12:19
weight работает в рамках текущего skype
00:12:22
то есть
00:12:24
вызывая метод допустим б с а в этом мы
00:12:29
блокируем скоб функции main и мы
00:12:32
натыкаемся на третьей строчке новый
00:12:34
метод б и не идем дальше при этом все
00:12:36
остальные вызовы внутри например метода
00:12:39
б no scope метода б не влияют
00:12:43
попробуем порассуждать что здесь
00:12:45
вообще будет происходить с учетом того
00:12:46
что мы знаем у кого есть предположение в
00:12:50
каком порядке что у нас будет вызываться
00:12:51
и почему у
00:12:54
тебя микрофончик и стеночку
00:13:00
ну метода явно первым будет так метод а
00:13:03
будет первым все правильно а
00:13:08
дальше
00:13:13
методы наверно последним так логично
00:13:17
методы будет последним мы будем в этом
00:13:19
сколки ждать пока у нас выполнится b и c
00:13:22
самое интересное начинается в методе б
00:13:25
мы распечатали а все правильно все так и
00:13:28
будет
00:13:29
дошли до b начал выполняться б на 12
00:13:33
строке что у нас произойдет
00:13:37
быстро рт best art ok
00:13:40
дальше дальше мы натыкаемся на и вейп
00:13:47
cc100 разгром бы то акция start from бы
00:13:51
отлично а
00:13:56
вот теперь совсем сложно стало ну что то
00:13:59
мне подсказывает что 27 вы сначала
00:14:01
помнят
00:14:02
что-то подсказывает что будет
00:14:04
выполняться 27 ok 27 строчка она на
00:14:07
самом деле самая путаюсь путаюсь а
00:14:09
потому что 27 строчка у нас создаёт
00:14:11
микро task микро таз как на говорили это
00:14:14
все еще операция асинхронная то есть мы
00:14:17
здесь вспомним фичу она регистрирует
00:14:20
микро тасс которая синхронно выполняется
00:14:22
асинхронно он выполняется приоритет на
00:14:25
остальных в приоритете относительно
00:14:27
остальных задач раньше чем все остальные
00:14:29
но
00:14:30
может ли асинхронная задача которую мы
00:14:33
не выйдем быть выполнено до того как мы
00:14:37
выполним задачу синхронными нам двадцать
00:14:39
девятой строчке напечатаем c and
00:14:44
we're не может
00:14:50
если она очень быстрая
00:14:53
справедливое замечание ok давайте
00:14:56
посмотрим
00:14:58
что вообще получится если мы все это
00:15:00
добро запущу запущен запустим и
00:15:03
так
00:15:05
метод а печатается первым тут никаких
00:15:07
сюрпризов он действительно печатается
00:15:09
первым потому что это обычная синхронная
00:15:11
задача не происходит никакой магии мы
00:15:12
натыкаемся на фсб и печатаем б старт тут
00:15:16
снова никакой магии натыкаемся на яйце и
00:15:19
печатаем с старт и
00:15:22
снова никакой магии а вот дальше
00:15:25
начинает происходить некоторое магия
00:15:27
дальше мы натыкаемся на и вейп включена
00:15:29
21 статьи строке и она начинает
00:15:32
выполняться почему потому что в первую
00:15:35
очередь на третьей строке мы
00:15:37
грубо говоря за фризе ля остановили
00:15:40
выполнение в скупе main функции и упали
00:15:43
vb vb мы остановили выполнение в скупе
00:15:46
метода b и провалились в c в c мы
00:15:49
споткнулись о бы weight двадцать первой
00:15:52
строки и тут начинает собственно
00:15:54
работать все то что происходит в самом в
00:15:56
общем глубоко вложенном скорбь и в
00:15:58
методе c у нас ожидается выполнение call
00:16:02
back a который мы передали вовсю чуна
00:16:03
двадцать второй строчке у нас печатается
00:16:06
c running еще from б так как мы его его
00:16:08
этим у нас отрабатывает блок один такой
00:16:12
блок 1 blockchain это в общем то
00:16:15
обыкновенный call back который
00:16:16
регистрируется в чай на выполнение после
00:16:18
того как она будет зарисовываем ну как
00:16:20
is keeping функции в swift я например в
00:16:24
код линии я тут смущаюсь сказать что там
00:16:27
есть место и скрябин функций но полагаю
00:16:28
есть примерно тоже самое но заполняется
00:16:30
call back c сразу после б именно потому
00:16:33
что мы его этим включу на двадцать
00:16:35
первой строчке дальше
00:16:38
мы выходим из его это метода c и
00:16:43
печатаем б
00:16:45
простите мы печатаем c and ну
00:16:48
соответственно синхронная операция с
00:16:50
микро тоска ничего не происходит
00:16:51
метро-то сказки пальцам и и не его этим
00:16:53
микро тоска пропускается она улетит в
00:16:55
следующую итерацию иван глупо потому что
00:16:57
иван тут на каждой итерации продолжает
00:16:59
проверять было ли зарезали на приду фича
00:17:01
микро тоска здесь это обычная свеча на
00:17:03
предыдущий таран итерации у нас
00:17:05
печатается следом после c and
00:17:08
куча нас печататься and from by и мы
00:17:12
возвращаем управление skype метода б у
00:17:15
нас печатается by and
00:17:17
наступает следующая эра в следующий эре
00:17:20
это следы равно следующая итерация винт
00:17:21
лупа в первую очередь
00:17:24
что у нас происходит у
00:17:28
нас прилетает и weight возвращаются
00:17:32
управление обратно в моем прилетает и
00:17:33
weight метода c&c стартует из мая на vc
00:17:37
у нас есть
00:17:42
синхронная операция все хорошо она
00:17:45
стартует из майна и выполняется все
00:17:47
замечательно а вот дальше в него
00:17:49
прилетает микро task который мы
00:17:51
зарегистрировали еще на предыдущей
00:17:53
итерации иван глупо
00:17:54
в прошлую ru но заполняется микро тасс
00:17:58
приоритетно перед всеми остальными
00:17:59
задачами несмотря на то что здесь есть
00:18:01
его их фичи микро task предыдущий у нас
00:18:04
выполнится первым отдается управление
00:18:06
нашей ключи которые мы его этим все
00:18:09
замечательно печатается синхронно д с
00:18:11
пятой строчке и снова отрабатывает микро
00:18:14
task ужин снова на новой итерации в клуб
00:18:17
а которые мы
00:18:19
регистрировали при вызове c из мая на
00:18:22
что будет если вот здесь от мы чуть-чуть
00:18:24
потянем наш код давайте так и сделаем
00:18:32
чуть чуть починим наш код и уберем
00:18:35
weight вот этой фиче
00:18:37
не буду вас пытать давайте сразу
00:18:40
посмотрим
00:18:41
фактически
00:18:43
ключа которую мы не выйдем регистрирует
00:18:46
свои call back its a running пищу from
00:18:49
source и цент фича from source в
00:18:54
снова в в очередь обработки после
00:18:56
выполнения всех задач которые на иван
00:18:58
клуб попадают текущие синхронные и после
00:19:00
микро task-ов которые были за schedule
00:19:02
in и на следующую итерацию иван глупо и
00:19:04
будут выполнены перед ней с очередь это
00:19:06
означает что у нас в первую очередь
00:19:08
отрабатывает весь синхронный код да
00:19:10
здесь мы можем немножечко опять же по
00:19:12
под упростить себе жизнь и
00:19:16
например пометить все синхронные вызовы
00:19:23
словом sing ни один не забыл ни один не
00:19:26
забыл
00:19:28
ранними туда грамм и видим что в первую
00:19:31
очередь у нас отрабатывают все симки
00:19:33
микро тоскана следующей итерации want
00:19:36
лупа из в который мы зашли 0 или вот
00:19:39
здесь вот на третьей строчке снова
00:19:41
отрабатывают симки из б start and
00:19:45
снова отрабатывает микро тоска которую
00:19:48
мы уже за schedule или вот здесь вот на
00:19:49
четвертой строчке после этого у нас
00:19:52
пролетает уже метод d и только после
00:19:55
этого на очередной операции в and лупа у
00:19:57
нас выполняется все что мы сделали для
00:19:59
все что мы передали в наше низа и вечный
00:20:03
или снов фьючерс вполне сокол б который
00:20:05
но в нее отдали и соответственно
00:20:07
результат выполнения этого клуба и конце
00:20:08
running from by and from be running from
00:20:11
me and for men почему сначала by а потом
00:20:14
main потому что сначала мы на третьей
00:20:16
строчке вызывали by и затем у нас
00:20:18
полетел csb потом после его это мы
00:20:21
выполнить c и змей и у нас уже
00:20:24
наконец-то выполнился c из моей
00:20:27
возможно есть какие-то вопросы почему
00:20:30
это работает именно так потому что ни
00:20:31
черта не понятно давайте
00:20:35
предыдущем куски кода микро tasks from
00:20:38
main
00:20:39
строка выводилось после д
00:20:43
почему оно выводится теперь-то дэннис
00:20:46
осень-весна давай смотреть смотреть на
00:20:50
предыдущем у нас отработал d и затем
00:20:54
полетела микро task is мая на из мая на
00:20:57
мы вызывали метод цех from main и
00:21:01
соответственно микро тоска у нас на
00:21:03
двадцать седьмой строчке д синхронном
00:21:05
вызывался после c что здесь происходит у
00:21:06
нас есть вызов метод цифрам main мы его
00:21:10
его этим соответственно у нас сначала
00:21:12
должен выполнится весь метод c включая
00:21:16
все вложенные в него i made a вложено и
00:21:19
white у нас здесь 1 эта фича которую мы
00:21:21
ждем на двадцать первой строчке после
00:21:24
этого так как мы не и вы этим фьюче
00:21:26
микро таск у нас выполняется синхронный
00:21:28
код в c and from main вот он и
00:21:33
управление отдается обратно в skype
00:21:35
функции main нас печатается д микро task
00:21:39
который мы за schedule или на двадцать
00:21:41
седьмой строчке мы не выйдем
00:21:43
соответственно выполняется он на
00:21:44
следующей итерации want лупа на которой
00:21:47
опустошается очередь микро task-ов ну и
00:21:49
соответственно после нее уже может быть
00:21:51
выполнишь другой если мы здесь напишем и
00:21:53
weight felice микро task to все
00:21:56
радикально поменяется мы можем отмотать
00:21:58
сразу вниз и увидеть что так как мы
00:22:01
здесь в этим метод c у нас принцесса
00:22:03
фьюче ну тут все понятно ничего
00:22:05
интересного до после этого у нас из мая
00:22:08
на
00:22:09
печатается микро tasks from main только
00:22:11
после этого мы печатаем конец в общем-то
00:22:14
me the domain последнюю задачу и вас
00:22:15
колбе и в конце концов и weight
00:22:20
отдает управление функции main и у нас
00:22:23
печатается д в самом самом самом конце
00:22:26
вся магия происходит именно благодаря
00:22:29
ключевому слову и weight который
00:22:31
регистрирует фактически вообще все дела
00:22:33
это синкавы это не делать ничего
00:22:35
интересного если работа с ключами через
00:22:38
фьючерс н я через метод дэн позволяет
00:22:42
нам
00:22:43
всего напросто
00:22:45
взять и зарегистрировать некоторый call
00:22:48
back который будет вызван после резал
00:22:49
винга этой фиче когда она за комп
00:22:51
лечиться с результатом до важно что и на
00:22:53
с результатом нас есть еще couture можем
00:22:55
здесь написать . catcher
00:22:57
например да и
00:23:00
обработать
00:23:03
ошибку
00:23:05
вот но г-н будет вызван именно
00:23:08
результате
00:23:11
успешно выполнения фичи так вот тут я
00:23:14
немножечко ушел в дебри
00:23:17
что делает осинка weight если он
00:23:19
выполняет
00:23:21
после того как она закончилась фича
00:23:23
зарезал велась то и регистрирует этот
00:23:26
кал бег который мы знаем передаем
00:23:29
который попадает как задачка в and look
00:23:31
на следующие white рации the weight
00:23:33
помечает фактически все весь код который
00:23:37
следует после него как фактически тот же
00:23:40
самый call back который выполняется
00:23:42
после того как за резолвится за и вечная
00:23:45
фича весь код который следует после него
00:23:48
будет выполнен как фактически как кал
00:23:50
бег на самом деле который мы могли бы
00:23:51
передать за
00:23:54
после этого но при этом
00:23:56
читается код намного приятнее банально
00:24:00
потому что он считается как обычный
00:24:01
синхронный код
00:24:06
boon
00:24:09
в youtube и внутрь узел может создавать
00:24:13
нет не совсем смотри пью чем фьючер как
00:24:17
таковую мы можем создавать
00:24:20
внутри любого метода что делает в
00:24:23
общем-то на самом деле в таком случае
00:24:25
тип возвращаемый метода все поменяется
00:24:27
на обычный weight на обычный вольт его
00:24:30
не использую не сможем использовать его
00:24:31
и ты внутри если мы не помещаем функцию
00:24:34
или метод включим слова sing мы не имеем
00:24:36
права внутреннего использовать и white
00:24:38
потому что
00:24:41
потому что возвращаемый тип у нас
00:24:44
обычный синхронный воет не пью человек
00:24:46
не асинхронный мы не можем использовать
00:24:49
его изнутри и все что будет выполняться
00:24:52
внутри этого метода да давайте тут
00:24:54
возьмем поправил чтобы нас не ругался
00:24:56
наш
00:25:02
тaк и убираем возитесь если мы весь код
00:25:06
напишем без использования осинка weight
00:25:08
of
00:25:09
the на самом деле у нас просто с копом
00:25:14
выполняться все синхронные операции а
00:25:17
бастард
00:25:20
c старт c and d and performing in
00:25:25
familie д ну короче у нас выполняется
00:25:26
все синхронные операции которые у нас
00:25:28
есть все синхронные принты а все ключи
00:25:30
которые мы здесь создали ну нашем случае
00:25:32
этих вещей всего лишь двери они
00:25:34
выполнены в самом конце уже на следующей
00:25:36
итерации он клуб причем что здесь опять
00:25:38
же важно микро тоски выполняются первыми
00:25:41
мы про них помним поэтому на следующей
00:25:44
итерации первый у нас опустошится
00:25:45
очередь микро task-ов у нас выполнится
00:25:47
оба микро тоска только после этого у нас
00:25:50
начнет выполняться все то что мы
00:25:51
исполнили как наших учил нас японцы
00:25:53
калмыки самих ключей то есть наш
00:25:55
асинхронной операции и обработка
00:25:57
результатов этих кубиков
00:25:59
вот мы не чувствовал sensing тоже можно
00:26:02
убрать да он на самом деле абсолютно
00:26:04
ничего здесь не делает его можно убрать
00:26:05
можно оставить можно убрать на самом
00:26:07
деле и sing единственное о чем у нас
00:26:09
обязывает
00:26:11
если бы был включен ли нтр
00:26:14
в нормальных литрах осинка обязывает
00:26:16
тебя помечать возвращаемый тип как
00:26:18
фьючер но потому что очевидно любой
00:26:20
асинхронная функция ребята должны
00:26:22
возвращать фьюче а не какой-то
00:26:25
сохранить ип
00:26:27
то есть можно в обычным синхронном коде
00:26:31
создать фич и она будет выполнена
00:26:33
отложено до она будет выполнена позже и
00:26:35
проблема здесь в том что код начинает
00:26:37
выглядеть отвратительно ну то есть
00:26:41
понять что в нем происходит резко
00:26:42
становится сильно сложнее потому что у
00:26:44
тебя идет последовательность каких то вы
00:26:47
вызовов у тебя печатается abcd и дальше
00:26:50
начались распутывать этот клад клубок в
00:26:53
котором у тебя есть callback здесь у
00:26:54
тебя есть callback здесь потом вот этот
00:26:56
метод у тебя вызывается второй раз из
00:26:58
метода быть основа есть call back один
00:27:00
клубы к другой и решительно непонятно
00:27:02
что здесь будет происходить
00:27:04
до тех пор пока ты не подключишься
00:27:07
дебаггер а мне раз ставишь брик поинты
00:27:09
не начнешь разбираться почему вообще так
00:27:11
в чем прелесть фактически rising away
00:27:14
the
00:27:16
dark под хитрый
00:27:19
если так он и такаши рует ладно в чем
00:27:23
прелесть осинка в этом
00:27:25
в том что чтение кода да ладно
00:27:31
да он за кашира волыни дает жить ладно в
00:27:35
чем прелесть и синкавы это в том что
00:27:36
чтение кода очень сильно упрощается ну в
00:27:39
общем то сейчас эта штука там уж у тебя
00:27:42
появилась да и в кофе не поручил это же
00:27:44
считаются сильно приятнее чем вызова
00:27:46
call back off автор те это было еще с
00:27:48
года с 2011 но тем ни менее
00:27:52
читать это бра сильно приятнее
00:27:56
вообще так конюшню довольно похожи на
00:27:59
код львовский крутим совсем к будет
00:28:01
безумно и похожа на
00:28:04
счету радость которая появилась в пятом
00:28:06
свифт с осинка в этом
00:28:10
так двигаемся дальше
00:28:13
давайте
00:28:16
возвращаемся к нашему
00:28:18
дарту
00:28:23
так плюс-минус разобрались выполнением
00:28:27
асинхронного кода на одном единственном
00:28:29
и залить кстати вот возможно у кого-то
00:28:31
возник вопрос а как все равно это добро
00:28:33
работает в условиях одного потока когда
00:28:37
у нас есть ю ай когда у нас есть сетевые
00:28:38
запросы когда есть какой-то проще ужас
00:28:41
который требует блокировки потоков тут
00:28:43
на самом деле нужно еще чуть-чуть
00:28:46
вернуться к нашему кодом и
00:28:50
посмотреть сюда маг магия в общем то вся
00:28:53
заключается в чем в том что благодаря
00:28:56
тому что дарт регистрирует все call by
00:28:59
kevin все вызовы
00:29:06
все исполнение кода которое следует
00:29:08
после ключевого слова и weight как call
00:29:10
бейки на следующей итерации ван цикла i
00:29:12
want you to
00:29:14
когда у нас есть какой-то ю ай скажем у
00:29:16
нас есть кое-то анимашка которая в
00:29:17
бесконечном цикле крутится на экране так
00:29:19
как каждый на самом деле кадр это
00:29:21
выполнение новые задачи нужно повернуть
00:29:23
эту крутил какой наш прогресс индикатор
00:29:26
на какой-то градус это все поток
00:29:29
бесконечный поток синхронных задач когда
00:29:32
мы вмешиваемся в это дело с какой-нибудь
00:29:35
какими у сетевым запросам результ
00:29:38
обработка результатов выполнения этого
00:29:40
сетевого запроса происходит
00:29:42
шину лица на иван глупая как задача
00:29:45
которая поступит на него когда-то в
00:29:47
будущем и попадет в него тогда когда у
00:29:50
нас появится результат выполнения этого
00:29:51
сетевого запроса то есть нас
00:29:53
регистрируется включая регистрируется и
00:29:54
и call back
00:29:55
отдается управление обратно skype тому
00:29:59
который ответственен за отрисовку uiaa
00:30:00
да там нашем случае допустим пусть bells
00:30:02
метод с виджетом каким-то но продолжает
00:30:04
рисоваться нашего и продолжает апдейте
00:30:06
со градус поворота ком-нибудь фраг раз
00:30:09
индикатора или чего-то такого и
00:30:11
обработка результатов выполнения нашего
00:30:16
нашей задачке по походу на сервер зачем
00:30:19
либо будет за schedule на куда-то на
00:30:20
будущее то есть нас вперед пропускаются
00:30:22
дальше все синхронные задачи которые
00:30:24
есть которые относятся к
00:30:27
отрисовки нашего интерфейса и на потом
00:30:30
остается в общем-то выполнение обработка
00:30:33
результатов тела запросы самого в
00:30:34
общем-то выполнения этого сетевого
00:30:35
запроса при этом надо понимать что
00:30:38
поскольку работа с асинхронным кодом в
00:30:41
дар те не является ни в коем случае не
00:30:44
какой многопоточный все происходит
00:30:45
рамках одного потока у нас нет ни
00:30:47
конкурентности не параллелизма вообще
00:30:48
ничего у нас есть только один единый
00:30:50
поток если мы внутрь ключ и засунем
00:30:53
какую-нибудь очень тяжелую операцию там
00:30:56
посчитать фибоначчи или что-нибудь в
00:30:57
этом духе то нашего я просто залипнет и
00:31:01
прекратит рисоваться почему потому что в
00:31:05
любом случае подобная операция будет
00:31:07
слишком тяжелый для того чтобы иван клуб
00:31:10
мог продолжить обрабатывать синхронные
00:31:12
задачки по отрисовке интерфейса поток у
00:31:14
нас один он встанет ровно на тампон
00:31:16
цикле в котором мы будем считать что-то
00:31:17
сложное
00:31:21
идем дальше
00:31:25
итак дарт язык однопоточный
00:31:28
знаки совсем правда и дарте язык на
00:31:30
самом деле многопоточный в dota можно
00:31:34
спавнить
00:31:36
более чем один изолят в общем случае в
00:31:38
принципе в дар те может быть несколько
00:31:40
изолятов ну столько на самом деле
00:31:42
сколько нам позволяет система что вообще
00:31:44
такое изолят изолят как мы уже знаем это
00:31:46
поток чем отличается от потоков в этом
00:31:50
код линии джаве свифти обсе и так далее
00:31:54
особенности изолятов в дар те
00:31:56
заключаются в том что у изолятов есть
00:31:58
свой свою область
00:32:01
выделенной памяти каждый изолят не шарит
00:32:05
свою память с другими изолята me у
00:32:06
каждого есть своя область у каждого
00:32:10
изолята есть собственно иван клуб
00:32:12
который процессе все задачи которые
00:32:13
относятся двух суток выполнению этих
00:32:14
задач на этом занять а
00:32:16
общение между изолята my организуется
00:32:19
через сообщение
00:32:21
что из этого следует поскольку у каждого
00:32:23
изолята есть своя выделенная область
00:32:25
памяти и они друг друга мы и не шарят
00:32:28
для того чтобы передать какие-то данные
00:32:30
из одного изолятов другой нам нужно
00:32:32
глубоко копировать каждый раз эти данные
00:32:33
и сообщением передавать из одного
00:32:36
изолята в другой исходя из этого есть 1
00:32:40
плюс 1 минус плюс у нас не бывает race
00:32:43
conditions у нас не бывает блоков у нас
00:32:46
не бывает в общем-то тех популярных
00:32:48
замечательных проблем многопоточности с
00:32:50
которыми мы иногда сталкиваемся в других
00:32:52
языках и который может быть не просто
00:32:55
полечить мы просто забываем об этом у
00:32:57
каждого изолята своя область памяти он
00:33:00
никогда не вмешается в работу другого
00:33:02
изолята минус очевидный для того чтобы
00:33:05
передать данные из одного изолята в
00:33:06
другой нужно их скопировать скопировать
00:33:09
означает что если у нас данных много то
00:33:12
мы память расходуем очень страшным
00:33:15
образом и
00:33:16
из этого общем-то вытекает то что на
00:33:19
устройствах там с малым объемом памяти
00:33:21
это может быть не очень эффективно
00:33:24
само по себе создание изолята кроме того
00:33:28
это ещё и достаточно дорогая операция
00:33:31
спавн изолята
00:33:33
занимает некоторое время тратит
00:33:35
некоторое количество ресурсов
00:33:36
естественно но там зависит от ряда
00:33:41
внешних факторов там прежде всего
00:33:42
устройство на котором
00:33:43
наша программа выполняется но глобально
00:33:47
но
00:33:48
это достаточно тяжелая операция и
00:33:51
злоупотреблять этим не стоит почему
00:33:53
потому что он в принципе на самом деле
00:33:54
все изоляты которые мы спавним они живут
00:33:58
в рамках венки которая живет в рамках
00:33:59
потоков той системы на которой в общем
00:34:04
то программа выполняется если мы говорим
00:34:05
о боец приложения у нас создаются там
00:34:08
собственно айос но и dice пачку которые
00:34:10
оперируют андроидами и эти трейды
00:34:12
являются фактически там проекции этих
00:34:14
самых изолятов если мы берем оба droid
00:34:16
приложений у нас там тоже спавнится 3d
00:34:18
на этих тредах выполняются изоляты
00:34:20
которые спавнит наполняют свой код и
00:34:22
заряд и который исполнит готовая
00:34:23
виртуальная машина
00:34:27
как вообще это добро выглядит смотрите
00:34:29
мы сегодня не будем плотно
00:34:31
останавливаться на изолятов почему
00:34:34
потому что достаточно объемная тема мы
00:34:35
посмотрим на один небольшой отрезочек на
00:34:39
самом деле флаттер кода не совсем даже
00:34:42
готового который плюс-минус нам
00:34:44
показывает то что вообще происходит
00:34:47
внутри изолята флотар предоставляет из
00:34:52
коробки замечательную функцию верхней
00:34:56
уровневую компьютер жака компьют компьют
00:34:59
что делает компьютер не компьют под
00:35:02
капотом явно создает изолята у нас есть
00:35:05
в принципе этом рамках флотар приложения
00:35:07
два способа работы с изолята me первые
00:35:11
это ну вот собственно через компьютер
00:35:14
верхний уровень у функцию которая под
00:35:16
капотом явно создает изолят помещает
00:35:19
какую-то задачу у нее сейчас посмотрим
00:35:21
какую и выполняет ее на этом и залить и
00:35:25
возвращает результат и
00:35:28
уничтожает этот изолят
00:35:30
из этого можно понять что в принципе там
00:35:32
компьют не очень эффективный способ
00:35:34
работы с и зарядами если у вас
00:35:36
последовательно нужно постоянно через
00:35:38
короткие промежутки времени выполнять
00:35:39
много задач на каждый вызов компьютер мы
00:35:41
создаем изолят выполняем убиваем создаем
00:35:44
выполняем убиваем это очень страшно
00:35:45
расходует и память и цикл
00:35:48
второй способ который мы сейчас
00:35:50
рассматривать не будем но я приложил
00:35:51
ссылочки это можно в качестве домашней
00:35:53
работы если интересно посмотреть мы
00:35:54
можем работать с изоляторами вообще
00:35:56
напрямую мы можем их спавнить через
00:35:58
изолят . spawn можем их держать у себя
00:36:01
где-то в памяти и отправлять в них
00:36:04
задачи передавать в них какие-то данные
00:36:06
для того чтобы они продолжали семья он
00:36:08
работать и таким образом держать
00:36:11
некоторый пул изолятов и себя в
00:36:13
приложений и всегда к ним обращаться
00:36:14
когда нам это нужно если у нас есть ряд
00:36:16
задач которые нам нужно последовать на
00:36:18
часто на этих взглядов выполнять
00:36:20
как таковые заняты позволяют нам в
00:36:23
общем-то
00:36:24
выполнять код параллельно или конкурента
00:36:26
ну тут уже зависит от того что система
00:36:27
нам позволит
00:36:30
что делает компьютер глобально в нашем
00:36:33
примере у нас есть все тот же
00:36:34
асинхронный моим в котором синхронно
00:36:37
делается принцесс понятно что он
00:36:39
выполнится первом а дальше мы его этим
00:36:40
ду компьютере шиндо компьютере шин нашем
00:36:42
случае это асинхронный метод который
00:36:44
возвращает результат выполнения функции
00:36:47
компьютер компьютер имеет жена riptide
00:36:50
что мы ни о какой какой метод какую
00:36:52
функцию мы в нее
00:36:54
передадим к с каким возвращаемым типом
00:36:56
такое общение типа на собственное иметь
00:36:58
и будет
00:36:59
в нашем случае операция не то чтобы
00:37:02
очень тяжелое нам нужно просто какой-то
00:37:04
рандомный интер напечатать там от нуля
00:37:05
до ста
00:37:07
что глобально позволяет нам делать
00:37:09
компьютер давайте посмотрим
00:37:14
компьют
00:37:15
принимает
00:37:18
некоторую функцию или метод который
00:37:20
возвращает фьюче а изолт фича а это
00:37:22
некоторая обертка которая анализатору
00:37:24
дает понять что здесь вернется либо
00:37:26
ключа либо это будет просто синхронные
00:37:29
дисперсию выполнились охраны операции и
00:37:32
некоторый параметр
00:37:35
параметр фактически может быть тоже
00:37:37
опять ученых типа что хотим то и
00:37:39
передаём параметр здесь является
00:37:41
аргумент который вторым mipim мы
00:37:44
передаем в компьютере является
00:37:45
аргументом который будет передан в ту
00:37:48
функцию или метод который мы отдадим
00:37:50
компьютер здесь есть небольшое
00:37:52
ограничение в компьютере можем
00:37:54
передавать поскольку мы помним что
00:37:57
изолята у нас имеет выделенную область
00:37:58
памяти мы не можем в изолят передать его
00:38:01
сантиметр мы не можем создать в рамках
00:38:03
нашего текущего изолята какой-то класс и
00:38:05
передать в компьютер выполнение scince
00:38:07
методы этого класса чем потому что этот
00:38:09
класс будет создан в рамках нашего
00:38:10
текущего изолята этого instance метод
00:38:12
находится области памяти нашего текущего
00:38:13
изолята другой изолят обратиться к нему
00:38:15
абсолютно никак не может из этого
00:38:16
следует что в компьютер можем передавать
00:38:18
исключительно функцией от него порядка
00:38:21
либо статические методы
00:38:23
в нашем случае это просто функция
00:38:25
высшего порядка и принимает она аргумент
00:38:30
maxinter который мы можем передать в
00:38:33
компьютер выполнить его и посмотреть что
00:38:35
из этого получится здесь очевидно что
00:38:37
собственно что у нас из-за его это
00:38:38
печатается фёст rapper компьютере шин
00:38:43
после этого
00:38:45
уже мы
00:38:49
секунд и наконец то результат который мы
00:38:51
здесь компьютера ешь не получили да если
00:38:53
мы его и выйти не будем то нам не
00:38:57
получится работать
00:38:59
с в этом а значит мы должны сказать
00:39:07
print рез
00:39:11
выполняем и
00:39:13
в таком случае чуть-чуть в общем то
00:39:16
меняется на самом деле порядок у нас
00:39:18
просто наш результат а именно четверочка
00:39:20
печатается самый последний почему потому
00:39:22
что дан шину лица на следующую итерацию
00:39:25
цикла когда будет выполнен нашей
00:39:27
асинхронной операция которая выполняется
00:39:28
внутри компьютер-компьютер
00:39:30
таким образом позволяет нам очень
00:39:32
простенько работать с изолята my
00:39:35
получая результат их выполнения
00:39:37
операции которые в них передаем как
00:39:40
свеча и
00:39:41
работая с ним уже после этого можете
00:39:45
какие то вопросы по и золя там иначе мы
00:39:47
двинемся еще чуточку дальше
00:39:50
нет каких-нибудь executors в заранее
00:39:53
готовым полом бинга есть две
00:39:56
замечательные библиотеки которые я
00:39:58
позволяют работать с изолята me
00:40:00
намного меня имеющим голыми руками одна
00:40:03
из них кстати
00:40:06
их их 2 обе плюс минус равно популярны
00:40:09
одна из них он воркман шо называется
00:40:10
написано чуваком который
00:40:13
из москвы по моему он работает в зоне
00:40:16
если не изменяет память но это не так
00:40:17
важно важно то что что эти библиотеки
00:40:20
делают как
00:40:21
андре предположила не
00:40:24
менеджер некоторые пул изолятов ты
00:40:26
заранее создаешь какой-то синглтон
00:40:28
который управляет пулом из n изолятов
00:40:31
сколько тебе нужно столько и их и будет
00:40:33
держит их памяти и позволяйте вышел
00:40:35
гулять на этот пул какое какие-то любые
00:40:37
задачи которые на нем будут выполняться
00:40:40
в целом в целом там на практике это если
00:40:43
есть в приложении операции которые
00:40:45
приходится выполнять на изолятор который
00:40:47
действительно был очень интерфейс это
00:40:50
самый вменяемый способ работать зарядами
00:40:51
потому что тебе не приходится тратить
00:40:53
кучу ресурсов на постоянный spawn этих
00:40:55
изолятов то все время менеджер какой-то
00:40:56
пул на которой отправляешь задачки чтобы
00:40:59
они выполнялись и не блокировали юань
00:41:01
нашем случае например у нас мы на
00:41:03
изоляторах выполняем тяжелые задачи по
00:41:07
вычислению скажем стоимость поездки
00:41:09
которые за собой влекут выполнения
00:41:12
некоторого не самого быстрого плюсового
00:41:14
кода кстати спойлер дарт умеет в фифа и
00:41:19
умеет вызывать плюсовой код напрямую и
00:41:21
более того его можно выполнять на
00:41:23
изолятор вот и
00:41:26
это позволяет разгрузить виллой
00:41:27
разгрузить позволяет ощутимо то есть в
00:41:29
нашем случае опять же мы натыкались на
00:41:31
такие задачи которые на слабых
00:41:33
устройствах ски поют один-два кадра если
00:41:36
не использовать
00:41:38
изоляты если все гнать на одном
00:41:40
единственном потоки с зарядами
00:41:41
естественно то проблема уходит и мы
00:41:43
можем оптимизировать ваше приложение
00:41:49
ok идем дальше
00:41:51
здесь есть некоторая ссылочка на
00:41:53
почитать дома про что эта ссылочка она в
00:41:55
общем то как раз наведет на
00:41:57
замечательную статью которую я очень
00:41:59
сильно люблю которая как раз очень
00:42:01
хорошо объясняет как работают как
00:42:04
работает готовый ван клуб как работают
00:42:08
изоляты как с ним нужно работать
00:42:10
дальше я предлагаю сделать небольшую
00:42:13
паузу там буквально на скажем 6 минут да
00:42:16
да семей 50 сейчас на 744 и после этого
00:42:19
мы перейдем к нашей второй теме про
00:42:22
флаттер платформенные каналы так ставите
00:42:25
пойдем дальше 7750 и так
00:42:30
дальше поговорим про
00:42:33
платформенный каналы и вообще что они
00:42:36
нам позволяют делать как мы работаем с
00:42:37
платформой статьям в fla 3
00:42:41
платформе на канал как я говорил уже это
00:42:44
механизм взаимодействия платформы
00:42:46
специфичного кода и дарт кода то что
00:42:49
позволяет нам вызывать
00:42:51
swift котлин обращаться к платформе
00:42:54
namapi из нашего плота приложения что
00:42:58
вообще глобально из себя платформенный
00:42:59
канал представляет пальцам членов это
00:43:01
некий двусторонний канал связи дарт не
00:43:03
тиф что значит у сторон не канал связи
00:43:05
значит нам нужен сообщение передавать
00:43:07
изо рта из флаттера в платформу и из
00:43:10
платформ обратного флотар обращаться
00:43:12
вызвать какие-то
00:43:15
валить кто-то код по инициативе флотар
00:43:19
приложения в мотиве или по инициативе
00:43:21
нашла мотива приложение по какой-то
00:43:22
логики во flat 3 мы тоже можем в обе
00:43:24
стороны
00:43:25
все вызовы по через платформенные каналы
00:43:29
асинхронный почему поскольку
00:43:34
опять же любое обращение к платформе это
00:43:37
но не сказать что это дорогая операция
00:43:39
недорогая достаточно легковесная но тем
00:43:42
не менее она менее легковесное чем
00:43:43
выполнение там был какой-то банальной
00:43:45
синхронной задачки ударьте поэтому чтобы
00:43:48
не плотью и по так
00:43:49
единство на самом деле поток который на
00:43:51
старте есть да мы обращаемся к платформе
00:43:54
асинхронно каждый канал является ну
00:43:58
собственно некоторым каналам связи у
00:43:59
которого есть его уникальный
00:44:00
идентификатор
00:44:03
какими они вообще бывают как они под
00:44:05
капотом устроен и как с ними работать
00:44:07
начнем еще на самом деле с того как они
00:44:09
устроены под капотом любые платформенный
00:44:11
каналу их там есть ну мы сегодня
00:44:13
рассмотрим два типа
00:44:14
любой платформе канал под капотом
00:44:17
содержат у себя некий баннере массажер
00:44:19
же горба мире мессенджер баннере
00:44:21
messenger это некая простейшая сущность
00:44:22
которая позволяет нам передавать из
00:44:27
флаттера в платформу
00:44:30
борьба ferplast в общем как как какой-то
00:44:33
набор байтов
00:44:34
который я
00:44:38
могут каким-то образом все реализоваться
00:44:40
здесь реализоваться и в общем-то нести
00:44:42
какую-то полезную нагрузку бояре
00:44:44
messenger
00:44:46
обязательно должен получать какой-то
00:44:49
ответ почему поскольку у нас все наши
00:44:51
сообщения
00:44:53
асинхронно мы не можем ничего в ответ не
00:44:57
вернуть потому что если мы будем
00:44:59
использовать там скажем losing weight и
00:45:02
вылететь вызов нашего бояре mothers and
00:45:04
и не вернем из платформы или наоборот на
00:45:09
из платформы в дарт какой-либо результат
00:45:11
мы на этом и выйти залив ним просто
00:45:12
навсегда и никогда не двинемся дальше
00:45:15
зачем я это рассказываю затем что на
00:45:17
самом деле баннеры массажером вы никогда
00:45:19
не будете пользоваться
00:45:20
явно ну хоть когда нам один раз пришлось
00:45:23
в целом скорее никогда чем когда-либо но
00:45:27
он находится под капотом у абсолютно
00:45:30
любого другого типа платформенных
00:45:32
каналов которые во flat или есть каких
00:45:34
эволюция бояре мессенджера это боевик на
00:45:37
стену спойлер basic масса целом вы тоже
00:45:40
пользоваться не будете но знать про него
00:45:43
полезно почему
00:45:45
это простейшая такая абстракция на
00:45:47
баннере менеджером у которой под капотом
00:45:50
этот самый баннере messenger
00:45:52
используется но она уже
00:45:55
немножечко
00:45:56
похитрее чем она хитрее она принимает не
00:46:00
только на учет когда вы создаете некий
00:46:01
basic мы сочинил вы его обязательно
00:46:04
позируете каким-то примитивным типом вы
00:46:06
то бишь string добыл int и так далее
00:46:09
передаете присваиваете ему там некий чем
00:46:12
name да у нас тут на первой строчке и
00:46:14
передаете кодек который будет
00:46:16
использоваться для соответствия
00:46:17
сериализации видеть реализации данных
00:46:19
которые отправляются через этот визит на
00:46:21
сцену с очередь это позволяет нам
00:46:24
отправлять из флаттера в натив какие то
00:46:27
сообщения которые уже не просто набор
00:46:30
байтов а вменяемая строчка которая под
00:46:33
капотом этого бы языками сначала при
00:46:35
помощи кодека который мы ему отдаем
00:46:37
будет реализовано байта от правильного
00:46:40
натив найти видеть реализуются этим же
00:46:42
самым там допустим string кодеком и
00:46:45
вы сможете работать со строкой
00:46:48
но дальше у нас начинается общем то
00:46:50
самое интересное метод чину метод чем у
00:46:54
этого то что если вы будете писать
00:46:56
флотар приложения и решите обращаться в
00:46:59
к кому-то платформенного кодом то с чем
00:47:02
вы будете работать подавляющую часть
00:47:03
времени 99 из 100 созданных
00:47:06
платформенных каналов это мета чему
00:47:08
почему метод channel это фактическим
00:47:11
самая сложная абстракция на боинге
00:47:14
мессенджером у которых под капотом лежит
00:47:16
все тот же баннер messenger но
00:47:21
метод чьи новые используют свой
00:47:23
особенный кодек который называется мир
00:47:25
откол что нам позволяет делать кодек
00:47:27
метод cola
00:47:28
чуть-чуть назад
00:47:31
слишком назад что позволяет делать кодек
00:47:35
метод call me that call позволяет нам
00:47:37
отправлять из флаттера в платформу из
00:47:40
платформ и обратно например на флаттер
00:47:42
сообщение видео и там скажем некоторых
00:47:45
как конвертов да как они называются в
00:47:48
документации это сообщение у которых
00:47:50
есть фактически
00:47:53
две составляющих первое это
00:47:56
некая строчка как правило в качестве нее
00:48:00
используется название метода который мы
00:48:02
хотим вызвать на платформе иной стороне
00:48:03
на самом деле это может быть любой день
00:48:05
секатор строковой но общая нотация
00:48:08
гласит что давайте указывать метод
00:48:10
название метода который будет вызван на
00:48:11
теле и
00:48:13
какой-то аргумент опять же любой
00:48:16
примитив в . интер дабл мапо массив сет и так
00:48:22
далее который в массиве соответственно
00:48:25
опять же не сидится в
00:48:27
нативный аналогичную готовому тип
00:48:31
как это добро выглядит если мы будем
00:48:34
рассматривать его на примере плагина
00:48:35
штукой плагин мы сейчас тоже поговорим у
00:48:37
нас есть наши флотар приложения есть
00:48:39
плагин плагин это фактически там
00:48:41
библиотечка там некая зависимость
00:48:42
которая заточена под то чтобы работать с
00:48:45
и платформе нам кодом сейчас мы
00:48:47
посмотрим внутри плагина у нас может
00:48:49
быть me the channel который будет ходить
00:48:50
натиску шаг с плагином мы можем
00:48:53
пропустить мы можем на самом деле прям
00:48:55
напрямую в нашем фотр первенств любое
00:48:57
флотар приложение на самом деле нативное
00:48:58
приложении есть папочка я стремлюсь
00:49:00
папочка android там обычно ios на
00:49:01
android проект и лежат можно писать прям
00:49:03
там там визуально уровня оп делегата
00:49:06
если совсем грязное можем писать метод
00:49:09
channel и и работа с ними правильные
00:49:12
работать через него через плагин и так
00:49:14
банально понятнее проще и переспали нами
00:49:16
но тем ни менее
00:49:18
дайте посмотрим как это выглядит чуть
00:49:21
менее сухо чем в теории и
00:49:24
для этого у нас есть припасенный пример
00:49:33
так ты мне сейчас не нужен
00:49:54
скажите видно ли видно да симулятор
00:49:57
вилки экрана
00:50:00
роли
00:50:02
окей
00:50:04
так давайте запустим наш пример и
00:50:07
посмотришь на вообще у нас есть
00:50:09
что представляет принцип например статив
00:50:11
при в примере есть рад мишка ссылка на
00:50:14
него будет на git хаб с ним будет позже
00:50:18
вам бушем и и пришлют вот в книжке есть
00:50:20
ссылка на слои да кстати обратите
00:50:22
внимание что
00:50:23
у нас за себя представляет пример пример
00:50:26
у нас представляет из себя некоторую
00:50:29
некоторых флотар плагин как я уже
00:50:31
говорил это фактически обычная флотар
00:50:34
библиотека которая и является ну в общем
00:50:37
то шаблон создания плата в библиотеке
00:50:40
которая состоит из четырех
00:50:43
основных частей первая директория lip
00:50:46
которая содержит в себе
00:50:47
весь код нашей библиотеке 2
00:50:58
вторая
00:51:00
часть это собственно и айос в которой у
00:51:03
нас содержится имплементация нашего и
00:51:04
снова кода 3 android который у нас
00:51:06
находится наши android и реализация и 4
00:51:08
это экзампла это некоторая флотар
00:51:09
приложения в котором у нас живет
00:51:13
фактически пример использования нашей
00:51:15
библиотеке что мы сегодня будем смотреть
00:51:19
так
00:51:33
давайте откроем сразу и вскоре
00:51:35
примеры будут поясные но фактически это
00:51:38
код который абсолютно идентично выглядит
00:51:40
как на свете так и на корни поэтому
00:51:42
можно не
00:51:43
особо придавать этому большого большого
00:51:46
значения
00:51:52
кроме того что при придавать значение
00:51:54
тому что xcode работает
00:52:00
не очень хорошо
00:52:03
так сейчас стоит наш пример унося с
00:52:06
некоторой флотар приложения у него есть
00:52:08
там некоторый набор раутов каждый road
00:52:11
ведет в наш отдельный пример нуха у нас
00:52:13
не интересует нас интересует гораздо
00:52:15
больше пример
00:52:16
плагин экзампла
00:52:18
что у нас есть нашем примере плагин их
00:52:21
замкну пример сугубо синтетически но
00:52:23
демонстрирует что мы в принципе можем
00:52:25
делать
00:52:27
метод чинами
00:52:29
наша кранчик это обычный state виджет в
00:52:33
котором есть там некоторое изначальное
00:52:34
значение некий результат пара таймс
00:52:36
темпов о них мы поговорим чуточку позже
00:52:38
и
00:52:40
экран с для кнопками по нажатию каждый
00:52:44
из которых мы вызываем метод приступ
00:52:46
аварцев
00:52:47
что он сделает наш рейс тупо во рту
00:52:49
часть power то это некий асинхронный
00:52:51
метод который обращается к
00:52:54
нашим плагину которая называется лез-лез
00:52:57
and forms и вызывает у него метод по
00:52:59
улицу
00:53:00
получает результат выполнения этого
00:53:02
метода из эти того как свойство нашего
00:53:05
сайта соответственно если мы делаем 3
00:53:07
мин декремент мы видим что у нас там
00:53:08
меняется значение нашего лэйбла
00:53:11
что за магия здесь на самом деле
00:53:13
происходит наш метод power тут на 18
00:53:16
строке
00:53:17
обращается к
00:53:18
методу нашла метод чинала инвок метод
00:53:22
типе зиру и ты воин джером передает ему
00:53:25
в качестве
00:53:27
параметра method строкового повертел и
00:53:31
некие вилью наш интер в качестве
00:53:33
аргумента метод чем у нас фактически это
00:53:36
некий метод channel соединить в котором
00:53:38
весов -
00:53:40
фактически что здесь вернется что здесь
00:53:42
происходит под капотом мы совершенно не
00:53:44
знаем потому что готовый код не делает
00:53:45
примерно ничего но он просто вызывает
00:53:47
какой-то in work метод какой-то power
00:53:50
tool и что здесь вернется мы не знаем
00:53:52
возвращаемый тип у нас обязательно
00:53:53
опциональный потому что обращаюсь к
00:53:54
платформе мы опять же не можем
00:53:55
гарантировать что результат будет не
00:53:57
anal pov армана может вполне вернуть нам
00:53:59
поэтому собственный звук метод
00:54:00
возвращает вам обязательно фьючер
00:54:03
с результатом опционального типа
00:54:06
что происходит в платформе
00:54:09
в платформе у нас
00:54:13
есть
00:54:16
сделано так есть платформенный канал
00:54:19
скажите видно у
00:54:22
нас есть некий плагин некий класс
00:54:25
который x на нее который примите рует
00:54:27
интерфейс флаттер плагин фактически
00:54:30
здесь опять же повторюсь что в свифти
00:54:32
что в код линии
00:54:34
принцип абсолютно одинаков абсолютно
00:54:37
одинаковые сущности используется в
00:54:38
корень есть точно такой же интерфейс
00:54:39
флотар плагин возможно он называется
00:54:41
просто плагин потому что там не так
00:54:44
принято
00:54:46
префикс до но тем ни менее суть
00:54:48
абсолютно такая же у нас есть некоторый
00:54:50
плагин который имитирует протокол
00:54:52
сенатор плагин что нас обязывает делать
00:54:53
протокол flat a plugin протокол сенатор
00:54:55
плагин обязывает нас имплементировать
00:54:58
метод реджистер и хэндл метод cola
00:55:02
что у нас делает методы реджи страну
00:55:06
пэтрам cola метод реджистер регистрирует
00:55:10
наш плагин наш класс с with less than
00:55:13
the romanos клодин как плагин в
00:55:18
регистре ford ranger то есть каждый
00:55:22
плагин который у нас есть рамках нашего
00:55:23
плота приложения регистрируется где-то
00:55:25
внж не как сущность которая может
00:55:27
отвечать на обращение и слотера
00:55:32
регистрируя его мы создаем
00:55:33
собственничества из нашего плагина
00:55:35
создаем канал
00:55:37
присваиваем ему идентификатор аналогичны
00:55:39
идентификатору который мы указали во
00:55:42
flat эрида известно самом деле суть
00:55:44
абсолютно 1 у нас есть класс метод чан
00:55:46
ул в дарте торчащий из флотар фреймворка
00:55:48
который мы создаем с каким-то
00:55:50
идентификаторам и на самом деле если
00:55:52
провалиться в него с кодеком тоже просто
00:55:54
по дефолту нас используется стандарт на
00:55:55
этот кодек и бояре messenger опять же по
00:55:58
дефолту нас используется стандартный бой
00:56:01
на messenger хотя мы можем платить их
00:56:02
сколько угодно
00:56:05
в no te vi мы создаем точно такой же
00:56:07
метод чину указываем необходимая нам имя
00:56:10
если имя будет отличаться естества
00:56:11
сообщение он уже не получат передаем
00:56:13
баннере messenger б дефолт мы можем
00:56:15
использовать messenger который торчит из
00:56:17
нашего регистра
00:56:19
присваиваем наш тянул и дальше немножко
00:56:21
пропускаем что едет дальше потому что мы
00:56:23
будем на это смотреть чуть чуть позже
00:56:25
методе handle мы можем непосредственно
00:56:28
обрабатывать обращения и слотера что он
00:56:33
делает он принимает качестве аргумента
00:56:35
параметр кол который являюсь существу
00:56:38
флотар метод кал у которого есть два
00:56:41
свойства метод и аргументы
00:56:44
соответственно метод можем пройтись с
00:56:46
вич кейсом например по
00:56:48
методу и наш метод это то что мы
00:56:52
передали в in work метод качестве
00:56:55
первого параметра нашем случае это порту
00:56:57
если мы натыкаемся на метод по утру мы
00:56:59
можем выполнить какое-то
00:57:02
с лифтовой клад ну и ликопен код из фсб
00:57:04
у нас был пример на корень да и
00:57:07
вернуть какой-то результат как мы
00:57:09
возвращаем какой-то результат нам
00:57:10
поступает опять же колодок резалт call
00:57:12
back резалт это ну обыкновенный кал бег
00:57:14
на самом деле который мы вызываем для
00:57:15
того чтобы во flat top какой-то
00:57:17
результат и вернуть и
00:57:18
далее мы вносили можем делать в принципе
00:57:21
все что мы хотим все что важно здесь это
00:57:24
вызвать определенный момент резалт и
00:57:25
передать него какое-то результирующее
00:57:27
значение значение может быть на самом
00:57:29
деле инал тоже это абсолютно валит а
00:57:31
главное чтоб он был в целом вызван
00:57:34
таким образом обращаюсь с дарта к
00:57:37
повороту и слотера мы производим все
00:57:40
нужные нам вычисления в сути
00:57:42
работаем с ними в дарте
00:57:46
из этого следует что в принципе но как
00:57:48
мы можем не только возводить в квадрат
00:57:50
какие-то значения она мы можем
00:57:51
использовать нативные библиотеки
00:57:53
реализации которых нет на флаттере
00:57:55
например да скажем там если у
00:57:57
какого-нибудь какой-нибудь от метрики
00:57:59
или яндекс маркета или чего-нибудь еще
00:58:02
не будет реализации и в принципе нет
00:58:05
реализации на flattery то мы можем
00:58:07
писать обертки из плагинов и обращаться
00:58:09
к любым нативным библиотекам используя
00:58:11
платформенные каналы
00:58:14
что можем делать с этим добром еще
00:58:18
как я говорил обращение
00:58:21
по платформам каналам нину платформе на
00:58:25
канал и сами по своей сути это
00:58:26
двусторонний канал связи с мужем не
00:58:27
только из флотар обращаться к на тему
00:58:29
можем узнать его обратиться к отару
00:58:30
каким образом
00:58:32
работает это точно так же как и
00:58:34
обращение из is flat a равна тиф мы
00:58:37
можем
00:58:38
создать на уровне нашего плагина на
00:58:41
самом деле не на уровне плагин на уровне
00:58:43
флотар приложение отложим мы можем
00:58:44
повесить натянул метод хендлер такой
00:58:47
метод кол хеллер но это фактически точно
00:58:49
такой же хендлер какой мы пишем если
00:58:53
им племен тим интерфейс флаттер плагин у
00:58:57
нас есть метод кинул вносили который
00:59:01
принимает кол и кубик в дар те
00:59:04
соответственно можем сделать ровно то же
00:59:06
самое мы можем повесить метод хендлер в
00:59:09
нем мы
00:59:11
вешаем хендлер который является call
00:59:15
беком передающий нам кол-кол свою
00:59:18
очередь
00:59:19
аналогичен
00:59:22
метод колу в платформе у него есть в на
00:59:25
тебе у него есть параметр метод у него
00:59:28
есть аргументы
00:59:32
в свою очередь если нас и знать его
00:59:35
зовет метод интер background мы можем
00:59:38
что-то сделать в ответ на это уже в дар
00:59:40
то вам нашем коде в нашу случае handle
00:59:42
and background что она сделает если нам
00:59:44
прилетел метод интер грант вызывает call
00:59:46
back что мы делаем нашем коврике мы
00:59:48
печатаем entry in background и вешаем
00:59:51
бэкграунд ems темп это просто время в
00:59:53
которое мы вошли в background грант нам
00:59:57
стенд у нас от рисуется на экране где то
01:00:00
вот здесь вот
01:00:02
пробуем
01:00:04
сворачиваем наше приложение было 2007 53
01:00:07
в консоли видим
01:00:10
интерн background разворачиваем его и
01:00:14
это не тот пример
01:00:18
разворачиваем его и видим что вошли
01:00:21
бэкграунд мы в
01:00:23
2753
01:00:27
собственно таким образом мы можем
01:00:30
обращаться как из флаттера в на севку
01:00:33
так и из натив tingo fl от
01:00:36
давайте пойдем чуть чуть дальше
01:00:45
кроме ми то чо love замечательным
01:00:48
способом с работы с под фирменным кодом
01:00:51
является еще и венчику иванча ну лад
01:00:54
метод чернов отличаются родов в принципе
01:00:56
одной вещью и женщина в отличие от метод
01:00:58
channel of это уже не способ вызова
01:01:01
каких-то кубиков в ответ на сообщения но
01:01:03
канал передачу потока событий и знать
01:01:05
его вов later что нам это позволяет
01:01:07
делать
01:01:08
на позволяет работать с иванча нами как
01:01:11
с обычными готовыми схемами и и знать
01:01:13
его
01:01:15
отправлять какой-то непрерывный поток
01:01:17
асинхронных событий как у нас это может
01:01:20
выглядеть опять же возвращаемся наш
01:01:22
плагин
01:01:23
создаем некоторые иванча ну и вонища но
01:01:26
в данном случае вас работает в целом
01:01:29
абсолютно так же как и мета чан он
01:01:30
принимает некоторый идентификатор
01:01:32
который отличает его от остальных
01:01:34
увенчана love опять же ничьих которые
01:01:36
должны быть уникальными потому что иначе
01:01:38
сообщение
01:01:40
не смогут быть обработана двумя каналами
01:01:42
одновременно и
01:01:43
и завинчена мы можем получить некий
01:01:46
бродкаст стрим который в свою очередь
01:01:48
является обычным бортовым стримом на
01:01:50
которым можем подписаться и слушать
01:01:52
события которые у него поступают в нашем
01:01:53
случае это обычная строчка
01:01:56
что можем делать с этим стримом
01:02:03
подписываемся на него каждый раз когда
01:02:04
нам прилетает какой-то ивент если он не
01:02:07
является ивентом interfere ground то
01:02:09
пропускаем его иначе что-нибудь печатаем
01:02:11
и с этим программам тем старым
01:02:15
в no te vi
01:02:17
аналогично метод чья ну а мы создаем
01:02:19
иванча ну регистрируемого передаем
01:02:22
messenger и вешаем некий с одесским
01:02:24
хендлер вешая на него skrimshander
01:02:26
соответственно стрим хендлер должен быть
01:02:31
сущностью
01:02:32
которая имплементировать интерфейс
01:02:35
флотар стрим хендлер но есть два метода
01:02:37
метод он лесу и меттатон кенсу который
01:02:39
очевидно вызываются когда у нашего
01:02:42
иванча ну а то является подписчик и
01:02:43
когда
01:02:45
я начал закрывается
01:02:48
вон ли сон мы можем принимать из лотара
01:02:52
какие-то аргументы опять же здесь все
01:02:53
аналогично метод changan и
01:02:59
регистрировать call back который мы
01:03:02
будем использовать в no te vi для того
01:03:03
чтобы передать какое-то событие в свою
01:03:06
очередь это позволяет нам допустим
01:03:08
подписаться на жизненный цикл нашего
01:03:10
приложения да ну вот соответственно мы
01:03:12
имитируем приличный делегат вопреки шин
01:03:15
делегат нам позволяет реагировать на
01:03:17
события жизни вас и кло приложения когда
01:03:19
она входит в ground когда она входит фар
01:03:20
ground и так далее и
01:03:22
на каждый вход for ground
01:03:25
вызывать call back и ван синг и
01:03:28
передавать в него какие-то полезные
01:03:29
данные к боковым sing это соответственно
01:03:32
обычный flat равен sing
01:03:34
который принимает
01:03:37
какой-то нала был аргумент ну какой то
01:03:40
здесь подразумевается что это примитив
01:03:44
соответственно в дар те подписавшись на
01:03:46
такой stream мы можем бесконечно
01:03:48
реагировать на события
01:03:50
сворачивания и разворачивания допустим
01:03:53
приложения так как вход фар ground это
01:03:55
некая событие которое может повторяться
01:03:57
множество раз использовать иванча ну
01:04:01
может быть вполне себе разумно
01:04:03
очевидный кейс для использовать для
01:04:05
использования иванчина ваф
01:04:08
ваф лотерии то например
01:04:10
подписка на допустим смена гео-локации
01:04:13
из
01:04:15
общем-то платформе на в этом локейшн
01:04:18
менеджера это подписка на
01:04:20
какие угодно события которые могут
01:04:22
фактически на самом деле если копнуть
01:04:24
глубже это например плагин camera его
01:04:26
флаттере который позволяет принципе во
01:04:28
flat 3 работы с камерой он построен на
01:04:30
ivanchenko где увенчал его лица поток
01:04:33
байтов которые формируют конечном счете
01:04:34
изображения и
01:04:36
платформенная камера которую невозможно
01:04:38
использовать из катара напрямую как
01:04:40
звери фреймворка работает через венчал и
01:04:42
насыщен набор металлов тоже часть
01:04:44
функциональность реализована эта часть
01:04:47
на женщину но всяком случае так было я
01:04:49
думаю так это сих пор и осталась и
01:04:50
картинка нам просто стремится через
01:04:52
avanti но и позволяет нам во flat и
01:04:54
отрисовывать что у нас собственно коми
01:04:56
равна тебе захватила
01:05:01
так давайте пойдем потихонечку чуть еще
01:05:06
дальше тут есть на самом деле такой
01:05:09
нюанс возможно вы уже подумали о том что
01:05:13
это может случиться может явиться
01:05:14
однажды проблемой вся работа с метод
01:05:18
чернилами и иванча новыми построена на
01:05:21
страшном хардкоре мы hard ходим название
01:05:24
канала в дар те потом мы идем в swift
01:05:27
hard ходим название канала все те потом
01:05:29
к этим в коучинг открыть его там потом
01:05:32
мы кратко видим название всех методов
01:05:33
которые мы хотим вызывать таким образом
01:05:36
супер шатко супер как-то неосторожно мы
01:05:40
формируем эту конструкцию где любая
01:05:42
опечатка может привести к тому что вы же
01:05:43
просто развалится и перестанет работать
01:05:45
нужно в трех местах написать одинаковый
01:05:47
код и ни разу не ошибиться при этом
01:05:50
это естественно не очень хорошо поэтому
01:05:53
flat артем изобрела
01:05:56
очень
01:05:57
интересный инструмент
01:06:00
почему интересно сейчас расскажу
01:06:03
есть такая замечательная библиотека
01:06:06
написанную собственно флот артем как
01:06:08
пиджин он же голод что позволяет нам
01:06:12
делать пиццу
01:06:13
пейджем позволяет нам описать некий api
01:06:17
для работы с
01:06:20
метод чинами еще он состоит мы
01:06:24
фактически создаем какой-нибудь
01:06:26
абстрактный класс multipla и ты допустим
01:06:27
да и
01:06:28
помечаем его аннотации хвост api
01:06:33
описываем в нем методы которые мы хотим
01:06:36
в этой пешки иметь нашу случае это метод
01:06:39
мал тёплой
01:06:41
описываем что он принимает в качестве
01:06:43
аргумента нашем случае это мультиплеере
01:06:45
квест который принимает все про контент
01:06:46
тёплое и
01:06:49
мультиплеере зал который на самом деле
01:06:51
является там просто оберткой над
01:06:52
опциональным интером
01:06:54
далее
01:06:57
далее есть два варианта первый вариант
01:06:59
мы можем в ваш скрипте описать что мы
01:07:02
хотим этим добром на генерить второй
01:07:04
вариант он появился чуть позже чем
01:07:08
я написал как пример мы можем описать
01:07:11
ровно то же самое в дар те на самом деле
01:07:15
можем сделать это барских там тоже
01:07:17
неплохо
01:07:18
мы вызываем основную команду флотар по
01:07:21
бран пиджин
01:07:22
по бран это в общем то запуск
01:07:27
флотар новый card generator
01:07:30
мы говорим у что ему нужно принимать в
01:07:32
качестве им фото и отдаем ему наш мульти
01:07:35
play дарт который описывает нашу основу
01:07:38
я пишу некий класс multiply api у
01:07:39
которого есть метод но тёплой мы ему
01:07:42
говорим куда ему выплюнуть на
01:07:44
генерирование дарта вый код куда ему
01:07:47
выплюнуть на генерирование код на
01:07:49
объекте все хедиры имплементацию и куда
01:07:52
ему выплюнуть ноге или раваны java код и
01:07:55
как будет называться нажала париж
01:07:57
возможно у вас возник вопрос а почему не
01:08:00
свифт и никотин
01:08:01
моём тоже возник в первую очередь потому
01:08:03
что flat артем не реализовала это не нас
01:08:05
в тени и на картине ребята консерваторы
01:08:08
и реализовали только для объекте все и
01:08:11
кофе на и
01:08:13
java больно ли это довольно но
01:08:17
жить можно
01:08:19
что у нас получается в результате вызова
01:08:22
ранки джин взять а вызова ран пиджин у
01:08:25
нас генерируется наш сгенерированный
01:08:28
готовый код который генерит нам додошку
01:08:32
в которой есть методы vin код decode
01:08:34
который все что он делают это просто
01:08:36
encoded иди ходят наш наш мал тёплой
01:08:39
урезают
01:08:42
класса
01:08:43
есть наш полк плэйкаст с точно таким же
01:08:46
он кодинга морриконе дом ну фактически
01:08:48
просто две дорожки которые может
01:08:50
усилиться водитель совать и что самое
01:08:52
интересное наш класс мультиплеере наш
01:08:54
класс но тёплой api в свою очередь уже
01:08:56
представляет некоторую более сложную
01:08:58
сущность которой я под капотом создает
01:09:00
метод чему
01:09:02
здесь она использует на самом деле
01:09:04
вылезет мы сочтены у нее мета чину даже
01:09:06
она создает выйдет мой сочинил и при
01:09:10
вызове метода но тёплой отправляет в
01:09:12
этот быть в сочи ну какое-то сообщение
01:09:16
ну а именно на самом деле сообщения с
01:09:19
теми
01:09:22
siri зова ными аргументами которые мы в
01:09:25
его передали в нашем случае это
01:09:26
мультиплеере квест
01:09:30
что происходит
01:09:33
далее ну собственно получает результат
01:09:37
который возвращает платформа и
01:09:38
декодирует его и возвращает его на
01:09:40
методе мл тёплой что у нас происходит
01:09:42
вноси давайте я здесь не буду вас мучить
01:09:45
ох уж эти все а мы заглянем что она на
01:09:47
генерала нам для java потому что
01:09:49
читается это сильно при я не сейчас
01:09:52
ладно
01:09:53
можем сделать а так
01:10:02
что он и генерирует нам на джаве ножами
01:10:07
она делает ровно то же самое фактически
01:10:08
она генерирует генерирует
01:10:12
классы мультиплеере залп мультиплеере
01:10:14
крест ну собственно наши аргументы
01:10:16
возвращаемый тип которые опять же
01:10:18
стерилизуются идите реализуется и
01:10:20
генерирую генерирует наш но теплая ppi у
01:10:23
которого появляется метод сетап в
01:10:26
которой мы должны передать войны рима
01:10:27
hedger и instance наши а фишки instance
01:10:30
нашего фишки в свою очередь это
01:10:31
непосредственно то реализация которая мы
01:10:33
должны сами написать руками что у нас
01:10:35
будет делать метод но тёплой нашем
01:10:37
случае он будет умножать одно на другое
01:10:40
что мы делаем далее тут сорян я вернусь
01:10:43
объекте все и
01:10:46
мы посмотрим на реализацию
01:10:51
что мы делаем далее мы создаем
01:10:55
instance нашей опишите
01:10:57
вызываем api сетап передаем в него
01:11:01
соответственно наш messenger как и в
01:11:03
прошлый раз нам нужен messenger нашего
01:11:04
регистре потому что нужно место для того
01:11:06
чтобы эти байты передавать туда сюда и
01:11:08
из нас нашей опишете нашу а фишку мы
01:11:10
описываем сами мы говорим что в методе
01:11:12
мол тёплой у нас есть доступ до
01:11:14
рекви я стал на этот раз уже не просто
01:11:17
какого-то набора аргументов ада
01:11:18
непосредственно из леса класса
01:11:20
мультиплеере квест точно такого же
01:11:21
которые мы описали до этого в дар те
01:11:22
только ужас гиней и сгенерированный на
01:11:24
объекте все или джами можно получить из
01:11:26
него нужные нам поля сделать с ними то
01:11:29
что мы хотим сделать нашем случае просто
01:11:31
перемножить и вернуть в качестве
01:11:34
результата прямо из этой опишите все что
01:11:36
происходит дальше под капотом это
01:11:39
на генерирование страшный и джоном кот
01:11:42
опять же в объекте все это ровно та же
01:11:43
самая история у нас есть две наши две
01:11:46
точки которые можно реализовать и есть
01:11:48
опись этап который создает нам чему в
01:11:52
котором вешается банальный массаж
01:11:54
хендлер
01:11:56
в котором используется наша созданная
01:12:00
apes к на на которой мы вызываем на
01:12:02
тёплой передаем в некоторые мб input и
01:12:04
называем call back в котором мы просто
01:12:07
си реализуем данные выкидываем их 1
01:12:09
флотар таким образом
01:12:11
используя пейджем все что нам нужно
01:12:13
сделать это
01:12:16
смириться с тем что используется ржавые
01:12:19
объекте все а после этого один раз
01:12:20
написать на торте описать надо рте нашу
01:12:24
а фишку и работать с ней
01:12:28
не редактируя ее руками в трех местах а
01:12:31
редактируя ее ну фактически единые что в
01:12:33
дар те и генерируя код ну а затем
01:12:36
описывает только реализацию нажатии на
01:12:39
объекте все уже в no te vi это такой
01:12:42
путь самурая на самом деле потому что
01:12:44
приходится все ж таки мириться с
01:12:46
издержками обжарьте всей джавы но в
01:12:48
случае когда у вас плагин насчитывает
01:12:50
там какие-то десятки методов возможно
01:12:53
редактировать все их в трех местах
01:12:54
вручную при этом не боясь ошибиться в
01:12:56
каждую из dota ашик может быть чересчур
01:12:59
возможно стоит в этом случае
01:13:00
использовать пишем и
01:13:03
так
01:13:10
платформенные каналах мы
01:13:12
их как могли гоняли туда и обратно и
01:13:16
удивительно но работает нормально на
01:13:18
самом деле у нас есть замеры если на
01:13:20
помощь я могу поделиться и может быть
01:13:21
даже потом перешла чатик у нас есть
01:13:23
замеры
01:13:25
сравнивающих
01:13:26
обращение к
01:13:30
плюсовой библиотеки через и фифой
01:13:33
напрямую из дарта и
01:13:35
через
01:13:37
мужики все и жалу когда ты идешь с
01:13:40
начала и стартовав жить и все через
01:13:41
плагин а затем уже этом и задушить и все
01:13:43
вызываешь плюсы и
01:13:45
разница конечно же катастрофическое то
01:13:49
есть на самом деле она большая напрямую
01:13:51
плюсы вызываются гораздо быстрее
01:13:52
стартами отрабатывают гораздо быстрее
01:13:54
чем через платформенный канал но на
01:13:57
огромных блогах данных тем не менее мы
01:14:00
на ios не наблюдали фризов вообще
01:14:03
несмотря на то что это ну как бы в
01:14:05
качестве примера что привести в качестве
01:14:06
аргументов например у нас передавался
01:14:08
мог предаваться скажем трек маршрута за
01:14:12
там полтора два часа это некий джейсон
01:14:15
насчитывающее там пару десятков тысяч
01:14:18
строк и
01:14:20
на мощных айфонах это не подлагивает в
01:14:23
принципе на мощных андроидах тоже на
01:14:26
слабых андроидах мы добивались скипа там
01:14:29
1 2 3 кадров когда происходила обращение
01:14:32
вот именно с джейсон кайнат в несколько
01:14:34
десятков тысячи строк в общем и целом же
01:14:36
у нас допустим на платформенных каналах
01:14:39
построена работа с матки там у нас
01:14:41
постоянно стремится локация у нас
01:14:42
постоянно стремится апдейты камеры когда
01:14:44
она передвигается по экрану постоянно
01:14:47
рисуются
01:14:49
какие-то полигоны поливаем на карте это
01:14:51
все достаточно от большой объем
01:14:53
информации который передается
01:14:55
постоянно и без остановки is flat равна
01:14:58
тиф и умудряется не лагать
01:15:01
добиться того чтобы она лагало можно но
01:15:04
в общем случае
01:15:08
привести платформенные каналы к
01:15:11
сколь-нибудь неудовлетворительному виду
01:15:13
у нас не получалось
01:15:15
поэтому данную короткий ответ на это
01:15:17
вопрос да работает нормально более
01:15:19
длинный дамы пытались их как-то найти
01:15:23
что с ними не так и не смогли в общем и
01:15:24
целом
01:15:26
так
01:15:28
что еще
01:15:30
рассказать здесь можно сделать опять же
01:15:33
ответвление мы не будем сейчас в это
01:15:35
углубляться но
01:15:36
здесь же в этом и в этом же в
01:15:38
репозитории есть of example это экзампла
01:15:41
обращение как раз через дарта фифой в
01:15:44
плюсовой код тут на уровне ойоса
01:15:48
директории класса есть цпп файл который
01:15:51
не делает никакой магии а на самом деле
01:15:53
просто складывает x и y и помечен that
01:15:56
аннотации
01:15:57
extern c которая соответственно помечает
01:16:00
этот метод как доступны к вызову через
01:16:02
вайфай и под капотом если вам будет
01:16:04
интересно и вы покопаетесь вы найдете
01:16:07
для айос а
01:16:10
реализацию не туда смотрю
01:16:14
реализацию фая которая позволяет нам и
01:16:17
старта напрямую его дёргать
01:16:27
сарен
01:16:32
работает это дело достаточно любопытно в
01:16:36
общем для того чтобы обратиться к
01:16:38
хищному коду нам нужно создать в случае
01:16:42
с андроидом
01:16:43
открыть сошку случится я сам за
01:16:46
процессить фреймворк или статическую ли
01:16:48
отёку и
01:16:49
дальше лука пам найти плюсовой метод
01:16:53
получить его в итоге как обычное
01:16:55
замыкание в дар те и вызывать его в
01:16:58
итоге это дело позволяет нам работать с
01:16:59
плюсовым кодом напрямую не будем сейчас
01:17:02
углубляться в детали как это можно
01:17:03
реализовать но нам на уровне вот этого
01:17:05
примера можете посмотреть это прикольно
01:17:07
это позволяет некоторые штуки делать
01:17:10
проще быстрее удобнее чем через интимный
01:17:13
плагин но работает это банально лучше
01:17:16
итак
01:17:18
двигаемся к нашей последней части по
01:17:21
платформе нам канала много этот раз это
01:17:24
уже будет даже не платформенный канала
01:17:25
ищет друга и что если я захочу строить в
01:17:28
юфу нативную вот например у нас есть там
01:17:31
тот же самый маб кит который
01:17:34
предоставляет
01:17:35
световую хума пью рисует эту карту нужно
01:17:39
с этой картой как-то работать в флаттер
01:17:41
приложения естественно затащить ее в
01:17:42
качестве флотар виджета у нас ну никак
01:17:44
не получится это нативная view к нам
01:17:46
нужно как-то строить в флотар приложения
01:17:50
для этого флаттере есть такая
01:17:52
замечательная штука как платформа etoro
01:17:55
platform ю-питер view позволяет нам
01:17:59
оборачивать платформе ную верху во flat
01:18:03
top виджет и встраивать этот виджет как
01:18:06
обыкновенный виджет в дерево виджетов
01:18:08
widget виджет фиджи ты видишь там
01:18:10
погонять но в конце концов что мы имеем
01:18:15
мы имеем и слотера из интерфейса самого
01:18:19
фреймворка
01:18:21
некоторую платформе ну юху жизни цикл
01:18:25
который управляется полностью на стороне
01:18:26
native на стране платформе и слотера мы
01:18:29
работаем только напрямую с fit что наша
01:18:31
нативная вилка может занимать фактически
01:18:33
любую часть экрана
01:18:36
одновременно у нас может быть больше чем
01:18:38
одна возможно несколько сколько угодно
01:18:39
фактически платформенных вьюг и
01:18:42
можно помещать их в строящийся списке
01:18:44
например это тоже работает замечательно
01:18:46
и
01:18:47
работает это следующим образом
01:18:51
возвращаемся в наш пример у
01:18:54
нас есть некий from view example
01:18:57
platform guide запал супер короткий все
01:19:00
что в нем есть это на самом деле некий
01:19:02
экран некий scaffold в которой в
01:19:05
качестве чудо в зависимости от того на
01:19:07
какой платформе у нас запущенным наше
01:19:09
приложение у нас запускается либо и ее
01:19:10
keep you либо android view и этих view
01:19:13
соответственно оборачивается и основе их
01:19:14
android очевидно оборачивает android ну
01:19:16
вьюгу вьеха у нас является обыкновенным
01:19:19
стефан виджетом в качестве аргументов
01:19:22
там принимает как любой пишут ключ
01:19:23
viewtype летает на самом деле является
01:19:25
идентификатором этой видюхи
01:19:27
отдает нам call back on that are you
01:19:30
cried который вызывается когда у нас
01:19:31
создается наша непосредственно нативная
01:19:33
вьеха позволяет нам загораете китайски
01:19:35
север отдать в ухе я у direction
01:19:39
передать некоторые параметры в качестве
01:19:42
аргумента там допустим если он в no te
01:19:43
vi хотим при создании в ющ и принять там
01:19:45
какие-то аргументы который как-то будут
01:19:47
о
01:19:48
поведении менять кодек для этих
01:19:51
параметров и навесить на нее некоторое
01:19:52
количество
01:19:53
джо recognize raw
01:19:56
как это дело будет работать на тиви в
01:19:59
начале если мы хотим работать с
01:20:01
платформенными веками мы обязуемся
01:20:02
создать
01:20:03
view factory эта сущность которая
01:20:07
в которой мы реализуем метод клей
01:20:10
который у нас возвращает некую flat об
01:20:12
этом view
01:20:14
что такое ну и соответственно принимает
01:20:16
там в качестве аргументов фрейм то есть
01:20:18
размер этой видюхи и и хищник и
01:20:20
аргументы которые мы из флаттера в нее
01:20:22
перед ли флотар view нашем случае это
01:20:25
некий интерфейс который обязует
01:20:28
обязывает нас
01:20:29
реализовать метод view которые этом
01:20:32
случае с раз он возвращает обычный явью
01:20:33
случае с андроидом просто view
01:20:36
на этом этапе в методе view мы в общем
01:20:39
то можем создать абсолютно любую вьюгу
01:20:41
нативную которую мы хотим описать ее
01:20:43
каким-либо образом то есть нашем случае
01:20:45
достаточно простая третий пример это
01:20:47
некая вьюшку синенького цвета на которую
01:20:50
мы навешиваем какой-то лейбл пишем в нем
01:20:52
какой-то текст добавляем ее на эту
01:20:54
вьюшку
01:20:56
центрируем этот лейбл на ней и
01:20:58
возвращаем
01:21:00
соответственно
01:21:03
вносили когда мы
01:21:06
не вносили простить waffle atari когда
01:21:09
мы экран экран мы увидим что у нас есть
01:21:13
обычная нативный на ios на вьеха синего
01:21:15
света которая собственно настраивается
01:21:17
полностью из
01:21:19
native же это позволяет нам там опять же
01:21:24
продолжая историю там с тем же матки там
01:21:26
в методе view мы можем обращаться к муке
01:21:28
тут создавать мафию и в качестве вьюки
01:21:31
отдавать с лифтовую мо пью и работать с
01:21:35
картами из флаттера в общем то так мы на
01:21:37
самом деле всем проекте с картами работы
01:21:42
этого
01:21:44
возможно есть вопрос
01:21:49
dice образами если можно да
01:21:53
я правильно понимаю что платформе
01:21:55
надюшка она будет жить полностью на
01:21:58
очереди система соответственно на мои
01:22:01
теоретически через неё можно получить
01:22:03
доступ том числе на какие-то багрон .
01:22:08
теоретически можно получить доступ к
01:22:10
чему in the background очередям систему дает
01:22:13
как например те же карты
01:22:17
карты же как фреймворк дает живет на на
01:22:21
ничьи редакторе на платформу создает
01:22:24
да смотри
01:22:26
фактически обращаться к бы ground членом
01:22:29
системы ты можешь и из метод чинавата
01:22:31
есть и никто не мешает в реализации там
01:22:35
твоего плагина
01:22:36
сказать создать
01:22:42
создать какую-то очередь да и
01:22:45
на ней
01:22:47
выполнить
01:22:51
какой-то код и вызвать call back
01:22:54
результаты да в этом случае у тебя все
01:22:56
будет работать на обычно начинаю очереди
01:22:58
в рамках
01:22:59
система в рамках айос ну или там рамках
01:23:02
android тоже и ты можешь получать доступ
01:23:05
к гранд потоком случае с you high ровно
01:23:08
та же самая история так как для флаттера
01:23:11
платформенная вьеха это обычная
01:23:13
собственно ios на или андроидный ухо
01:23:15
доступа к которой у фреймворка нет весь
01:23:18
жизненный цикл этой видюхи все то что
01:23:19
она делает у себя под капотом там случае
01:23:21
с тем же map китом на бэкграунд потоках
01:23:23
что-то считает происходит на стороне
01:23:25
native флотар получает плюху азиз
01:23:27
оборачивает ее виджет что необходимо
01:23:30
только для одного для того чтобы
01:23:31
построить ее в дерево виджетов и ты мог
01:23:33
с ней напрямую работать кнопка
01:23:34
растягивать по экрану как тебе нужно мог
01:23:36
помешать вскоре щийся список например ну
01:23:38
или как угодно еще в общем работать из
01:23:41
условий фреймворка
01:23:46
правильно я понял полностью отказаться
01:23:48
от нативных вьюшек нельзя
01:23:51
они где то вам все равно пригождаются да
01:23:55
ну а не пригождаются прежде всего там
01:23:57
где
01:23:58
дело доходит там допустим да
01:24:01
повторных библиотек который я
01:24:04
не существует для фреймворков это тот же
01:24:08
матки как яркий яркий пример часто могут
01:24:11
быть какие-нибудь библиотеки типа
01:24:13
организме кого-нибудь stripe который
01:24:16
предоставляет не голые методы там для
01:24:18
обработки платежей а предоставляет нам
01:24:20
напрямую некую веху в рамках которой там
01:24:24
происходит некий flow там оплаты
01:24:26
чего-либо да и получения платежей а не
01:24:28
дает тебе работать напрямую со своим со
01:24:30
своими методами потому что это там
01:24:31
скомпилированный binary они защищаются
01:24:33
от этого таким образом предоставляя
01:24:34
напрямую интерфейс в таком случае ты
01:24:37
можешь использовать интерфейс опять же
01:24:39
как там некоторую платформе ну юху
01:24:40
встраивать его в флотар и работать с ним
01:24:42
напрямую а
01:24:46
пользователь не заметит это то есть
01:24:49
когда вы ему нативную покажите мы именно
01:24:52
вот это вот флаттер натив когда
01:24:56
пользователь это будет выглядеть но
01:24:58
смотри тут конечно тривиальный пример то
01:24:59
есть он достаточно смешной в том смысле
01:25:01
что это синий квадратик но глобально
01:25:04
акечи платформенные в ухе во flat и read
01:25:08
обычного флотар виджета
01:25:10
нет ну то есть они видны с точки зрения
01:25:12
работы с кодом потому что у тебя на
01:25:14
уровне флаттера нет контроля надо тем
01:25:17
что происходит в этой вещи это
01:25:18
неконтролирующую жизнь и цикл ты не
01:25:19
можешь ей управлять ты управляешь ею и
01:25:21
знать его но визуально это
01:25:25
обычная для флаттера в ухо которая может
01:25:28
вести себя как обыкновенный фото вич
01:25:33
в вопросах перформанса у нас были очень
01:25:35
опять же большие тоже подозрения что это
01:25:37
дело может работать не очень хорошо но
01:25:40
попью работает потрясающе например а
01:25:43
мафию этот супер тяжелая штука которая
01:25:46
казалась должна работать абсолютно точно
01:25:48
не очень но тем не менее
01:25:51
работу с юбкой тамбур будка нажатии где
01:25:54
производится мотивирую вратарь ой тут
01:25:57
очень интересная история
01:25:58
фактически
01:26:01
в первую очередь нажатии обрабатывает
01:26:04
флотар если ты навешиваем на
01:26:08
платформе ну юху в качестве аргументов
01:26:11
она принимает же черри когда easier если
01:26:13
навешивает какой-то джессика глазер то у
01:26:16
тебя обрабатывать touch будет именно
01:26:19
флота рф ренборг если ты его не
01:26:20
навешивает он проваливается дальше до
01:26:22
платформенный духе то есть случаи когда
01:26:24
ты просто встраиваешь юху и обрабатывая
01:26:26
штаб японию вешаешь детектор допустим да
01:26:28
на эту видюху уровне native ну или
01:26:29
работаешь с мазью с той же которая
01:26:31
напрямую
01:26:32
обрабатывает то че то все с обработка
01:26:36
происходит собственно платформенной
01:26:37
пихай если ты не говоришь об этом ты
01:26:40
можешь убираете тест например по этой
01:26:41
видюхи опять хит с by север по этой
01:26:43
видюхи на уровне флотар а и пропускать
01:26:45
точили не пропускать их наоборот
01:26:48
на плату знаю содержимое в ухе имеют
01:26:51
внутренние элементы куда нажали нет а ты
01:26:56
можешь но нет как на самом деле до на
01:26:59
самом деле да он не имеет доступа к как
01:27:02
я сказал жизнь иному циклу или
01:27:04
компонентом этой самой выхино потому что
01:27:06
она живет в отдельной от него парадигме
01:27:07
но опять же определить куда нажали до
01:27:10
флотар может потому что ну собственно
01:27:11
как как канва флаттера которая создается
01:27:16
обрабатывает touch и передает их во flat
01:27:18
origin of attention тебя прилетают
01:27:20
напрямую координаты тача и дальше уже
01:27:21
flat a ranger решает куда передать это
01:27:24
touch он передает его там
01:27:26
рендер обжиг по глобальному готовому да
01:27:29
и этот рутовый render обжиг находит кто
01:27:30
должен to touch по этим координатам
01:27:32
обработать и
01:27:34
натыкается на нужный виджет либо на
01:27:37
платформе ну юг у которой touch
01:27:39
передается
01:27:40
как тогда результаты знать его вернуть
01:27:43
обработку нажатий нет а ч ну как
01:27:46
вариант но опять же когда-то пнули по
01:27:49
твой нативные вехи ты можешь обработать
01:27:51
этот тап на уровне нативные в ухе и
01:27:53
отправить события в метод чину или вы
01:27:55
винчи ну например если точу предполагают
01:27:58
ему какое-то значительное число
01:27:59
непрерывная последовательность очень
01:28:03
большой обертка получается да это жирная
01:28:07
такая обертка которая
01:28:09
позволяет туда-сюда данная гонять
01:28:17
так может еще вопросик есть
01:28:22
ok если нет то вместо итога и оставлю
01:28:27
некоторый набор ссылок которые может
01:28:29
быть интересно почитать если остались
01:28:31
какие-то вопросы или просто интересно
01:28:32
это замечательные статьи про иван клуб и
01:28:35
изоляты дока на платформенные каналы на
01:28:37
работу с плагинами
01:28:40
очень большая и очень крутая статья
01:28:42
просто потрясающе и мне она очень
01:28:43
нравится про платформенные каналы как
01:28:45
они под капотом устроены
01:28:47
парочка источников про то как вообще в
01:28:50
принципе работать платформенными вьюгами
01:28:51
что они позволяют чуть более подробно
01:28:53
чем я сегодня рассказал как работать с
01:28:55
пиджи нам и
01:28:57
дока по работе с iv-го если вдруг эта
01:29:00
штука вас тоже по какой-то причине
01:29:02
заинтересовала на этом всё всем спасибо

Описание:

В первой части лекции рассмотрим на примерах, как выполняются синхронные и асинхронные задачи в Dart, что такое EventLoop и какие в нем бывают очереди. Во второй части лекции посмотрим на то, как взаимодействовать с платформенным кодом во Flutter: обращаться к нему, вызывая Swift/Objective-C/Kotlin/Java, встраивать платформенные View, а еще немного коснемся Dart FFI и посмотрим его возможности.

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "04. Dart Event Loop — Илья Вирник"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "04. Dart Event Loop — Илья Вирник" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "04. Dart Event Loop — Илья Вирник"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "04. Dart Event Loop — Илья Вирник" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "04. Dart Event Loop — Илья Вирник"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "04. Dart Event Loop — Илья Вирник"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.