Программирование : Dart & Flutter по-русски
Mykola Shevchenko
Подожите, там есть эта строка?
Mykola Shevchenko
А зочем?
Mykola Shevchenko
Разве мэп не может взять ключем тип?
Yakov K.
Надо выпилить дженерик отсюда)
Yakov K.
Не помню зачем его туда засунул
Mykola Shevchenko
Та вообще InherinedWidget и так O(1), на сколько помню
Mykola Shevchenko
Там же тоже мэп по типу зависимости
Yakov K.
Это не настоящий мэп :)
Yakov K.
Ага, но я крайне не люблю контекст
Mykola Shevchenko
Вот как без него тему нормально делать?
Mykola Shevchenko
Ее переключение допустим
Yakov K.
*не люблю контекст для SL/DI, прошу прощения
Mykola Shevchenko
Все равно, тема или не тема, все равно идет провайдинг данных
Mykola Shevchenko
Я не понимаю что с ним такого плохого
MiT
Для SL понятно, но для DI это норм практика
Yakov K.
*не люблю контекст для SL/DI стейт-объектов, прошу прощения
Yakov K.
Наелся с провайдером/инхеритед. Бойлерплейт, чёткая завязка на UI без возможности использовать вовне, траблы при непрямом контексте вроде bottom sheets
Mykola Shevchenko
SL - сервис локатор? А там что?
Mykola Shevchenko
Ну, а что там с бойлерплейтом?
Yakov K.
Это скорее про инхеритед. А как у провайдера с авто-диспозом?
Mykola Shevchenko
Все отлично
Mykola Shevchenko
Там есть каллбек для этого
Mykola Shevchenko
Нет же общего интерфейса Disposable
Yakov K.
[
"Так умеет ",
{
"type": "link",
"text": "https://pub.dev/packages/arctium#auto-disposal"
},
"?"
]
Mykola Shevchenko
Ну, так да, просто диспоуз нужно вызвать
Yakov K.
Конечно, это в каком-то роде субъективщина, но я предпочитаю не связывать стейт-объекты с контентом UI
Mykola Shevchenko
Так во флаттер все это виджет
MiT
Вообще SL странная штука. Вроде можно использовать, но зачем когда ты сам можешь нужный объект сделать снглтоном (но это редко когда нужно). И еще страннее использовать SL вместо DI (как это многие делают).
Mykola Shevchenko
И приложение, и навигатор
Yakov K.
Ага, но я не про UI, а про стейт-менеджмент
Mykola Shevchenko
Да, а что не так с этим принципом? Просто сервисы отдельно писать, не в виджетах, но провайдить их
Yakov K.
Юзать контекст для локации UI объектов — гуд. Но использовать инхеритед для поиска сервиса — эээ
MiT
Знаешь во что не умеет arctium? В область видимости)
Mykola Shevchenko
А что не так?
Yakov K.
Вот я об этом и говорю — причём тут вообще UI-контекст?
Yakov K.
Ага, а это к слову о количестве кода :)
Yakov K.
Описал выше — по субъективному мнению эти вещи не вяжутся. Попахивает нарушением SOLID :)
Mykola Shevchenko
А при том, что юай контекст это не только про контекст кнопки на странице, а про контекст самой страницы или контекст вложеного навигатора
Mykola Shevchenko
Не сказал бы
Mykola Shevchenko
Вот если писать бизнес логику в виджете то это да
Yakov K.
Ага, но стейт-объект-то тут при чем? :)
Mykola Shevchenko
Если писать логику виджета в бизнес слое, тоже плохо
Yakov K.
SL не сказал бы что при синглтоны. То где нужен класс синглтон его и нужно сделать синглтоном, согласен. А SL это, внезапно, про локацию сервисов
Yakov K.
Конечно, я не сказал нигде иначе :)
MiT
Ну такое себе, глобальный инстанс который отдает сервис...
Mykola Shevchenko
В плане? Просто получать например? А что плохого то? Это просто объекты. Это могут быть сервисы или дата объекты. Просто нам нужно их получить из-вне. И иногда необходимо чтобы они обновлялись и внутренняя часть получала об этом сведенья
Yakov K.
Конечно! Но UI-контекст-то тут при чем?
Michael K
подскажите пожалуйста! у меня есть PageableInvestmentList, в котором Investmentlist и Paging... мне нужны значения в InvestmentList. как до них добраться? Это по json! Я уже написал если response.status == 200 то return PageableImvestmentList.fromJson(jsonDecode(response.body). Но мне надо дальше идти в InvestmentList
d
допустим, есть условная вложенная навигация, и нужно иметь, к примеру, n инстансов SomeChangeNotifier, контекст позволяет это сделать, например
Yakov K.
High risk, high reward :) Если использовать понимая что делаешь — очень приятный экспириенс без головной боли
Yakov K.
Но в ногу можно выстрелить, это правда
Michael K
как вообще распаковать запакованное в два раза
Yakov K.
Безусловно, контекст-инъекция умеет все тоже самое, это не обсуждается :)
MiT
На сколько я вижу, большинство не понимают как нужно использовать SL. Им просто так легче...
MiT
И ты сделал еще один пакет(
Ivan
[
{
"type": "mention",
"text": "@bunopus"
},
" spam"
]
Yakov K.
Надо заняться просвещательством :))
Mykola Shevchenko
А почему нет? Вот он как раз и при чем. Мы можем параметры передавать чтобы менять поведение виджета, а можно и передавать данные более глубоким виджетам. Через параметры это не сделать
MiT
Когда антиспам настроишь?)
Evgeny Kot
Все будет, у меня фаза ресерча)
Yakov K.
Мы, кажется, друг друга не слышим. Давай ещё раз попробую объяснить свою позицию. По полу-объективному мнению контекст не подходит для получения стейт-объектов. Контекст прекрасный инструмент для своих целей — тема, что-то связанное с навигацией. Однако, по моему мнению, использовать контекст для локации условного класса с тремя полями типа ValueNotifier некорректно — он существует не для этого. Да и кроме того неудобно — большее количество кода, возможность непрямого контекста, отсутсвие диспоз-очереди.
Yakov K.
Советую Шилди :)
MiT
Так стоп, ты сейчас написал что хочешь через SL прокинуть класс с ValueNotifier в виджет?) Сам что-то про сервисы рассказывал...
Yakov K.
Ага — не совсем вижу тут противоречия.
Yakov K.
Сервисы понятие растяжимое :)
Evgenii Elchev
вообще контекст, для того что бы виджеты могли общаться) что бы чайлды стейтфул могли его данные использовать без бойлерплейта. то есть гугл сказал что нужно резать виджеты на кусочки, а что бы кусочки как то все таки были вместе им дали контекст. На этом все) и практика засунуть в контекст все приложение на мой вкус не очень хорошая. Но так как большенство приложений маленькие и простые, то цена архитектурных ошибок там крайне низкая, по этому там по сути можно делать все что хочется и будет более менее ок)
Yakov K.
Да, вполне с вами согласен :)
MiT
Тебе что больше нравиться SL или DI?
Yakov K.
Все ещё не понимаю вашей претензии. Чем класс с тремя нотифаерами и n-строками логики не является сервисом?
Владимир
Слушай, ты случаем не lazy dart ведешь?
Evgenii Elchev
сервис понятие растяжимое и в дискуссии его лучше не использовать, 99% то что вы с оппонентом будете его понимать по разному)
Yakov K.
Согласен, спасибо :)
Evgenii Elchev
случаем да)
Yakov K.
[
"Уточню — под сервисом я понимаю что-то схожее со Store из MobX и следующее определению OASIS\n\n",
{
"type": "code",
"text": "a mechanism to enable access to one or more capabilities, where the access is provided using a prescribed interface and is exercised consistent with constraints and policies as specified by the service description"
},
""
]
Владимир
Странно) смотрел записи, лицо очень приятное, а на аватарке чет как fastpic). Обычно наоборот
MiT
Задавай вопросы пока он тут (ответит бесплатно) =)
Владимир
У матросов нет вопросов, а вообще гугл помогает как правило всегда( архитектура не в счет)
Evgenii Elchev
так это и есть случайное фото)
Evgenii Elchev
аха) за бесплатно, тут все гораздо хуже, переложить часы которые ушли на канал на зп, у меня там минус скоро к миллиону подберется)
Владимир
это нормально для подобного, я когда курсы по анрилу делал, после недели работы над двумя модулями просто забил(((
Evgenii Elchev
ну, я считаю, что раз начал что то, нужно заканчивать)
Evgenii Elchev
да и интересно это
Владимир
я не осилил просто(
MiT
Ну так не для себя стараешься ;) Сам такой вывод сделал когда-то, но продолжаю делать)
Пашка
может из ру гугла позвонят, руку пожмут)
Yakov K.
Кстати, тут все норм :) Так и ожидалось, мапа же не только под SL, тип не обязательно должен совпадать с ключем.
MiT
Я бы сказал что они сделают, да забанят за такое)
Yakov K.
Позвонят из Яндекс Лавки, скажут что зря Ридакс не используете :))
MiT
Зачем ещё одну? И так по этой технологии слишком много групп...
Семён undefined
яндекс уже публичные приложения на флаттер переписали что-ли?
Evgenii Elchev
лавка на вебе вроде же
MiT
Некоторые есть, не все правда на flutter, иногда только компоненты встраивают)
Владимир
У них вроде подкаст в сети про это есть
Владимир
Как они на флаттер переписывали
Семён undefined
ну я только слышал, что они на флаттер переписывали приложение для таксистов и курьеров, но не чтобы прям паблик
MiT
Лавка вроде точно использует flutter, сколько процентов хз
Yakov K.
У них Таксометр сразу на Флаттере была. Зачем-то взяли Ридакс и теперь вроде страдают
Yakov K.
[
{
"type": "link",
"text": "https://habr.com/ru/company/yandex/blog/528322/"
}
]
Yakov K.
Лавка тоже насколько мне известно больше 80% Флаттер и тоже Ридакс
Владислав Зайцев
Всем привет! Подскажите, как сделать задержку, перед переходом на новую страницу?
Yakov K.
[
{
"type": "code",
"text": "await Future.delayed(Duration(...))"
},
" на клике перехода"
]
Владислав Зайцев
Спасибо!
MiT
Редакс хорошо показывает себя на крупных проектах, если соблюдать его полностью
Yakov K.
Он никогда себя хорошо не показывает, и весь веб от него отказывается в сторону MobX :)
Yakov K.
Очень, очень плохая вариация атомарного функционального стейт-менеджмента
Andrey Unger
спорное утверждение. Слышал что с редакса и мобикса на всякие эффекторы сползают, но что редакс похоронили в пользу мобх - для меня что-то новое
Yakov K.
С эффектором мало знаком, но на памяти как минимум 4 крупных проекта которые сделал переход Redux->MobX за последние пол года
Yakov K.
Про эффектор слышал что бойлерплейтный, вроде :)
Дмитро Квик
Всем привет, пытаюсь написать блок без плагинов, посмотрел в одном видео взаимодействие блока и апи, попытался сложить в кучу - метод _mapEventsToState не тригерится дебагером. Помогите пожалуйста найти ошибку :)
Yakov K.
Закрывайте контроллеры, пожалуйста :)
Andrey Unger
даже не представляю как с редакса крупный проект мигрировать. Это 100500 часов рефакторинга. А фишка эффектора что его можно паралельно редаксом юзать вполне. А начет бойлерплейта - ниразу не видел там такого. Код лаконичен до минимума, просто голые эфекты и сторы
Yakov K.
Да, рефакторинга действительно дофига :( Знакомый вроде на 40% количество кода в своем проекте сократил пересев на MobX за пару месяцев :)
Yakov K.
Ух, эффектор и правда круто выглядит!
Andrey Unger
просто сейчас сам во всех проектах перешел на эффектор. При этом старый код на редаксе даже не трогал, ибо переписывать его это не на одну неделю работы. Ускорение разработки налицо от эфектора.
Yakov K.
Да, действительно клево выглядит
MiT
Давай, тащи в flutter)))
Папа Камбэк
Добрый вечер не подскажите как сделать приложение которое при входе запрашивает логин и пароль с базы даных сайта и после успешного ввода даных показывает сайт в мобильном приложении ?
Yakov K.
Не, мне mvu_flutter хватает :))
Yakov K.
И так не успеваю мейнтейнить
MiT
А для чего без плагинов делаешь?
Yakov K.
Ну вот зачем ты идею подал :))
Andrey Unger
блин, dio выдал странную ошибку DioError [DioErrorType.other]: HttpException: Connection closed while receiving data - при этом через Postman тот же запрос корректно обтрабатывает.
Дмитро Квик
из личного интереса, поковырять сам паттерн)
Папа Камбэк
Помогите пожалуйста
MiT
Get post не перепутал?
Andrey Unger
нет, вроде корректно все
MiT
Берешь и делаешь, в чем проблема?
MiT
Может сервак отклоняет клиента?
MiT
Ну сначала нужно начать с основ программирования
Папа Камбэк
Так выучить dart вы имеете виду ?
Yakov K.
[
{
"type": "code",
"text": "flutter create flutter_effector; cd flutter_effector; code ."
}
]
MiT
И не только дарт, а вообще computer science
Папа Камбэк
А после этого ?
Anton
ну ты немного загнул
Anton
но вообще правильно
Anton
а как только выучишь компютер саенс вопросов не будет
MiT
Человек не понимает как общается клиент-сервер, тут только с этого нужно начинать
Папа Камбэк
Так стоп стоп стоп
Папа Камбэк
Я вообще не чего не понимаю
MiT
А после этого дарт и у вас уже не будет таких вопросов
Папа Камбэк
Спасибо вам !
MiT
[
"На\n",
{
"type": "link",
"text": "https://m.habr.com/ru/company/vertdider/blog/403823/"
},
""
]
Игорь Корнелли
Ребята, привет, если кому интересно про мобх и все что связано с вэб - буду запускать в скором времени канал на youtube и цикл роликов по мобх, nextjs, ansible, go и всему. что связано с вэб от идеи до деплоя в прод)
Yakov K.
Вам желтая карточка – это чат по Flutter
MiT
Немного computer science
Папа Камбэк
Ох, чувствую не лёгкого это все
Игорь Корнелли
по флаттер, но про редакс и мобх говорить можно, но если я ишу про то, что бесплатную информацию можно получить мне желтая карточка? ок
MiT
Ладно тебе пошутили, но лучше от темы flutter/dart далёко не уходить
MiT
В flutter есть redux & mobx
Yakov K.
Я сделал рабочий эффектор для Flutter.
Yakov K.
Очень маленькая реализация :)
Yakov K.
чет вроде такого
Andrey Unger
не юзабельно к сожалению. в сторах on в каллбек не один аргумент принемает а два: старый и новый стейт. И самого главного нет - эфектов)
Andrey Unger
но поидее доработать можно. Сделать стейт в сторах иммутабильным, добавить пару обвязочек…
Yakov K.
Хм, что-то я не совсем понял как on может принимать сразу новый стейт
Yakov K.
Ага, но не воспринимайте всерьез, это уже рекреационное программирование :))
Andrey Unger
там фишка что ты делаешь стор с каим-то стейтом, потом через on добавляешь к нему обработчики для эвентов и эффектов. Типа когда такой-то эффект выполняется вызывать вункцию передав в нее старый стейт. Когда эффект закончен, вызвать функцию передав в нее старый стейт и результат эффекта
Yakov K.
Так на скрине же все, кроме эффектов
Yakov K.
базовый on совпадает :)
Andrey Unger
ну эвенты в чистом виде не так уж часто используются. Эффекты чаще. Их отличие от эвентов в том что они изначально асинхронны и имеют несколько состояний которые в on передаются первым параметром
Yakov K.
Ага, понял. Я не собираюсь портировать, если что, так, разминка :))
Andrey Unger
вот пример рабочих моделей на эффекторе)
Andrey Unger
4 эффекта, 1 эвент и два стора чтобы один экран запилить)
Andrey Unger
самое сложное там отслеживание изменений сторов. то что под копотом хука useStore применяется. Если на терминологию флаттера переводить - как уведомить виджет о том что стор обновился)
Andrey Unger
если закапываться дальше, и пытаться портировать на флаттер, без «левых» (для эффектора) обвзязок типа инхерит виджетов или провайдеров не обойдешься. В итоге получится какая-то разновидность риверпода)
Andrey Unger
мне так видится почему его еще не портировали)
Andrey Unger
давай на гитхаб)) Пока без пабдева, но мб допилим всем сообществом)
Andrey Unger
linux когда-то тоже как jast for fun начинался))
Yakov K.
Серьезно?) Там пока ugly :)
Andrey Unger
так для этого ПР и существуют на гитхабе. В редми только напиши варнинг большими буквами что не для продакшен юсадж и все). И будет пакет flutter_effector когда-нибудь)
Andrey Unger
для маленьких апок вообще идеальный стейт менеджер я щитаю)
Andrey Unger
ссылку только на репу незабудь кинуть. Завтра поковыряю, когда делать нечего тоже интересно чем-то таким занятся
Andrey Unger
чтоб с нуля не писать одно и тоже и не плодить дублей
Andrey Unger
Хотя по хорошему надо наверно разбивать на два отдельных пакета. В одном сам эффектор, в другом все для флаттера. Типа тогоже useStore и каких-нибудь Build[Widget]
Yakov K.
Завтра выложу, убедил :)
?
[
{
"type": "link",
"text": "https://github.com/fryette/webview_cookie_manager/issues/44"
},
"\n\nкто нибудь знает или может предположить решение?"
]
Andrey Unger
[
"проблема довольно распространена для инстаграмма в особенности. Гуглится на раз-два: ",
{
"type": "link",
"text": "https://alexdelorenzo.dev/programming/2018/07/04/dart-flutter-cookies.html"
},
""
]
?
но я так понял решение это нужно пофиксить "системный файл"? Я сегодня спрашивал, как это сделать, мне сказали что так не делается... Я сегодня смотрел этот же пост
?
Я попробовал, но он как будто был "закэширован", и не реагировал
?
можете пожалуйста подсказать как это грамотно сделать? А я пока ещё раз внимательно перечитываю "solution"
Andrey Unger
форкнуть и потом в пабспеке прописать ссылку на репозиторий вместо версии
?
Как нужно правильно править системные файлы самого dart'a?
Семён undefined
никак не нужно
?
а что делать если это необходимо?
Семён undefined
если прям очень необходимо, то делай форк флаттер репозитория
|