Программирование : Dart & Flutter по-русски
Evgenii Elchev
тебе на работе менджер запрещает?)
Evgenii Elchev
в пыхе ест нативные потоки, в js хз
Павел
php вроде что-то слышал
Павел
js есть сервис воркеры
Павел
дарт многим напоминает js
Павел
изоляты очень похожи
Mitai
интересно когда я начну понимать эту тарабарщину((
Павел
мне год где-то понадобился
Igor
ну это не поточность :)
Igor
а ты с каого то языка или с нуля?
Павел
я не писал про потоки
Mitai
не много щупал рнр, не много пайтон
Igor
а зачем тебе дарт с флаттером?
Hikmat Urgench
Где можна найти ListView для группировки и summary. Если кто-то сделал. Github е есть только группировка
Hikmat Urgench
У использую flutter уже 2 неделя
Hikmat Urgench
Как это - Header Summary
Evgenii Elchev
Как можно отличить веб разработчика от мобильного? мобильный спрашивает как сделать, а веб где найти плагин)
NewBalanceM5
ну так и есть
Hikmat Urgench
Я это сам сделал - работает нормально, может у Вас есть варианты получше,
Igor
воу воу! не все же на вордпрессе сидят :)
Evgenii Elchev
У меня новая трабла. Есть блокА, он внутри себя содержит блокБ. Я отправляю в блокА евент, он тут же обрабатывается, но в обработке он отправляет евент в блокБ. И вот этот блокБ обрабатывает его уже секунд через 30. Что за фигня и как ее дебажить. Там же по сути стрим. Что его может так тормозить? явно не ранлуп, потому что другие дейсвия отлично выполянются(
NewBalanceM5
а почему водпресс сразу?
Evgenii Elchev
но есть один нюанс, блокБ сам по себе в этот момент выполняет длителную операцию, там запрос на сервер выполняется, а сервер лежит и таймаут 60 секунд. МОжет ли быть это из за него, я использую flutter_block? скорее всего из за этого, но как вылечить?
???????
Rtfm это лучшее что есть в русских чатах
Igor
ну обычно вордпрессеры на каждый пук плагин ставят :)
???????
Под капотом asyncExpand?
Evgenii Elchev
у либы, ага
???????
Если что, блок фелангела одновременно обрабатывает только 1 эвент
???????
И строго в порядке очереди поступления
???????
Сам буду писать трансформер на смену асинкэкспанд чтоб разорвать гарантированную очередность
Evgenii Elchev
ну я уже и сам, пока писал начал догадываться, осталось найти как это выключить)
???????
Если стандартная либа то сделать оверрайд asyncexpand
NewBalanceM5
не люблю я wp
Igor
я же не про тебя. я про то что не все веб-разработчики плагинисты
???????
Сама либа предусматривает переопределение такого поведения. Но на что вменяемое заменить - не предумал. Видимо свой трансформер писать. То что есть - сделано специально так, чтоб гарантировать очередность (это из описания к методу).
???????
Я как только доделаю взаимодействие с фаербейс - (через недельку наверн), засяду решать этот вопрос + еще парочку других.
Evgenii Elchev
[
"а если я ",
{
"type": "code",
"text": "switchMap"
},
" он будет грохать предыдущий евент и заменять его на новый?"
]
???????
Я с ходу сча не соображу, сорри. Но затык у тебя именно там. Небольшим стримтрансформером точно можно решить.
???????
Но возникнет еще 1 ньюанс, который я также сяду разруливать
???????
Вот переопределил ты поведение, начало одновременно разбиратся несколько ДЛИТЕЛЬНЫХ эвентов
???????
И все это в одном потоке (по дефолту)
???????
Не очень радужная перспектива
Кирилл Матросов
сигнатурно но футуры не микротаски, за микротакси в дарт отвечает scheduleMicrotask
???????
Поэтому отчасти и хочу сделать такой трансформер, что эвенты для тогоже потока будет ставить в очередь типа asyncExpand, а эвенты помеченные для выполнения в изоляте или сервайс вокере (sic!) - будут ставится в очередь для доступных изолятов/сервайс вокеров
???????
Ну и чтоб у всей этой магии был публичный интерфейс не отличающийся от обычного блока. За основу попробую взять новенький BLoC 4.X.X, где фелангел убрал зависимость от rxdart
Evgenii Elchev
ios асинхронный, то есть например у меня реквест висит при проблеме с сетью 60 секунд, но он не блокает поток на 60 секунд
Evgenii Elchev
тут кажется нужен индивидуальный подход
Evgenii Elchev
потому что разные задачи должны по разному рулиться
???????
Ну я понимаю, что прям лютой жопы если сделать топорно - не будет)
Evgenii Elchev
где то нужна очередность, а где то нет
???????
Но я хочу сделать красиво
Кирилл Матросов
и что теперь вместо rxdart?
Evgenii Elchev
это не топорно, если евент длительные, но сама его обработка занимается меньше 1мс то его не надо убирать в изолят
???????
Тк другие эвенты (у меня таких нет) могут всеже хотеть очередность
???????
А те кто влезут без очереди - могут помешать им
???????
Слишком замороченно будет
Evgenii Elchev
естественно, по этому и нужен индивидуальный подход
???????
Надо сделать очередь на доступные изоляты и без очереди в основном потоке
???????
Будет достаточно понятно
???????
А для традиционной очереди - блок с asyncExpand
???????
Постараюсь сделать это без форка, оверрайдом и миксином. Ну в общем посмотрим, тут фокус в том еще, как сделать универсально с сервайс вокерами
???????
Там он не прям таки и использовался
???????
Основное использование это получать states.value
???????
States раньше был Observable из старого rx, в блоке 3.Х.Х использовался новый rx с метод экстеншенами, но по сути для тех же целей.
???????
Сейчас, как я понимаю, он просто будет схоронять каждый State в отдельную переменную и уберет эту зависимость.
???????
А, ну еще states у него BehaviorSubject
???????
StreamController.broadcast из коробки работает по другому (как PublishSubject), поэтому ему тоже надо будет разрулить этот момент
Evgenii Elchev
меня в это rx истории бесит что под каждую платформу там методы называются по разному
Evgenii Elchev
а есть еще нативные яредства в языках
???????
Ну в дарте сделали метод экстеншенами под стримы, это очень здорово)
???????
Потому что исторически, rx и должен был называть стримы как Stream, а не Observable
???????
Просто было занято IO потоками)
Evgenii Elchev
блин, мне нужен какой нибудь человек который шарит в rx, что бы добиться ясности как работют некоторые операторы
Evgenii Elchev
типо switchMap, expand. Чувствую что не доконца догоняю
???????
[
"Ну в твоем случае можешь попробывать ",
{
"type": "code",
"text": "switchMap"
},
""
]
???????
Я сам его не пользовал
???????
Из стандартных принимающих аргументом стрим и возвращающих стрим - у тебя выбор то не велик
Dima
switchMap теряет события, осторожней с ним
Nikolay Plotnikov
Подскажите плиз разобраться с контекстом, я тут тернируюсь...
???????
Ну мне потому и кажется, что стоит свой трансформер написать
Nikolay Plotnikov
я пытаюсь сделать приложение через обьекты
Nikolay Plotnikov
но как контекст прокинуть при таком подходе
Nikolay Plotnikov
он мне прям понятнее в разы )
Nikolay Plotnikov
похож на JS чуть
???????
Таким макаром еще сгодится, если ты будешь в final переменные выносить
Nikolay Plotnikov
короче понял, лучше ближе к учебникам делать
???????
А так, даже если учесть, что у тебя ничего работать не будет, ты просто по сути раздуваешь билд до невнятных размеров
Nikolay Plotnikov
ну я так балуюсь пока что
???????
Могу подсказать костыль, чтоб прям сча заработало
Nikolay Plotnikov
давай )
???????
Но это также будет супер отвратительно и так делать не стоит
???????
Измени переменную на функцию и в аргументы ей контекст
???????
Но это супер отвратительно
Nikolay Plotnikov
по учебнику так
Nikolay Plotnikov
из за того что куча объектов?
Evgenii Elchev
Каждый новый евент будет убивать предыдущие?
???????
Постарайся научится правильно. Вот то что ты засунул в переменные - должно быть отдельными классами/виджетами
Nikolay Plotnikov
ну делают сначала класс, потом пихают через New я думал это одно и тоже как я делаю, создавая объект
???????
Далеко не одно и тоже и фокус тут в методе билд у каждого класса и размере экрана которые ты перерендериваешь каждый раз
???????
Это имеет большое значение для производительности
Aleksey
[
{
"type": "link",
"text": "https://habr.com/ru/post/451292/"
}
]
Evgenii Elchev
Я это читал. Мне просто хотелось услышать что я все правильно понял
???????
Ну я его не пользовал, но выглядит именно так.
Aleksey
мне вот эта статья понравилась про rx
???????
Поэтому мне кажется стоит попробывать написать свой трансформер
???????
Да, эта тоже хорошая
Evgenii Elchev
мне тут идеально заходит именно этот вариант. Блока авторизации, у него два события авторизации и деавторизации,
Evgenii Elchev
деавторизация мгновенная, авторизация сетвевой запрос. Логично что если юзер решил разлогиниться то надо дропать запрос авторизации
Nikolay Plotnikov
я три дня во Флаттере ) полет нормальный )
Dmitriy Orteney
а как юзер решит разлогиниться, если ждет авторизацию?)
???????
Ну таким образом ты даже переиспользовать эти кусочки не сможешь. Разноси по отдельным классам в общем
Evgenii Elchev
ну строго говоря у меня в приложении юзер не видит авторизации. Она подкапотная, а деавторизация только для qa)
Nikolay Plotnikov
я понял, спасибо. Короче нужно делать ближе как в уроках
???????
Ну ближе к доке, не знаю что там за уроки)
Artem Gubatenko
Подскажите почему, при пустом результате, выполнение кода останавливается?
Денис
list[0] из пустого лист
Artem Gubatenko
[
"Дело было в ",
{
"type": "code",
"text": "print('...(after)')"
},
" - пытался получить доступ к ",
{
"type": "code",
"text": "list[0]"
},
", которого там нет."
]
Artem Gubatenko
спасибо, уже заметил)
???????
не стоит писать list[0] никогда
???????
Ну или в некоторых случаях list?.first
Artem Gubatenko
спасибо, учту
???????
Причем это одно из правил линтера, если не ошибаюсь
???????
[
{
"type": "link",
"text": "https://t.me/rudart/175527"
}
]
Aleksey
это я понял, как у линтера называется правило, которое это проверяет?
Artem Gubatenko
это мое первое приложение с очень малыми знаниями особанностей языка и синтаксиса. Постигаю на практике так сказать)
???????
Не помню если честно, но вроде было.
???????
Также стоит знать, что у получение по индексу есть только у List, но не у Iterable. Данная фича также может быть тут весьма полезна.
Yerassyl Maikhanov
сюда обычно приходят когда нагуглить не получилось)
Денис
бывает даже не пытаются гуглить)
iamthevoid
А разве строка поиска гугл это не там, где я данный момент пишу?))
Константин Буланов
Спасибо. Тоже учту.
DK
[
{
"type": "link",
"text": "https://twitter.com/FlutterDev/status/1247914682481913858?s=20"
},
" ??"
]
Artem Gubatenko
ок, спасибо
Artem Gubatenko
[
"Подскажите еще плиз:\nесли ",
{
"type": "code",
"text": "snapshot.hasData == false"
},
", то ничего не показывает. Хотя ",
{
"type": "code",
"text": "print()"
},
" отрабатыват.\nПока писал ListView, были ошибки - может сделать ",
{
"type": "code",
"text": "flutter clean"
},
" и пересобрать ?"
]
Artem Gubatenko
[
"простой ",
{
"type": "code",
"text": "flutter run"
},
" не помог"
]
Yerassyl Maikhanov
добавь проверки на connectionState
Artem Gubatenko
[
"спасибо, я нашел решение: у меня прилетал пустой список и получалось ",
{
"type": "code",
"text": "snapshot.hasData == true"
},
""
]
Yerassyl Maikhanov
коллеги, кто знает shared_preferences в web куда сохраняет данные? в cookies?
Yerassyl Maikhanov
я про flutter web
???????
В вебе помимо кук есть: local/session storage indexedb websql
???????
F12 нажми и открой Application вкладочку
???????
И да, точно не куки. Задача кукисов - улетать в заголовках с запросами.
Yerassyl Maikhanov
спасибо
Yerassyl Maikhanov
credentials в cookies надо сохранять?
Max
Использовал из Дарта IndexedDB - работает вполне удобно.
Yerassyl Maikhanov
вот только как это в flutter сделать
???????
Да, достаточно удобно. Но hive всеже удобнее
Max
credentials вообще сохранять не надо, нигде и никогда.
???????
Яб вообще не советывал фронтендеру хоть что то пихать в куки
???????
Особенно если он задается этим вопросом
???????
Кукисы тебе бэкэендер вструмлять будет.
Yerassyl Maikhanov
в общем, я делал приложение мобильное. там все ясно как делать
Max
А куда hive пишет в браузере?
???????
В indexeddb и пишет
Yerassyl Maikhanov
потом попросили портировать приложение на терминалы как qiwi-терминал
Yerassyl Maikhanov
я решил приложение на web сделать и на терминалах в браузере запускать
???????
Попробуй, очень классная штука
???????
[
{
"type": "link",
"text": "https://pub.dev/packages/hive"
}
]
Yerassyl Maikhanov
и тут проблема куда токен авторизации сохранить
???????
[
"А еще есть такое у него:\n",
{
"type": "link",
"text": "https://docs.hivedb.dev/#/advanced/encrypted_box"
},
""
]
Yaroslav
Всем приветы. Помогите пожалуйста с одним вопросом: есть кнопка которая должна открывать внешнее мап приложение
Yaroslav
как из дарта чекнуть какие мапы установлены?
Max
Лучше бы никуда. Но если очень надо - то в IndexedDb
Max
У меня не столько данных для хранения, чтобы затевать такие сложности, у меня всё в secure_storage влезает на мобильнике.
???????
Ну я про кроссплатформу с вебом. Вообще полгода назад сам садился писать универсальное кроссплатформенное хранилище (shared prefs тогда не поддерживали веб)
???????
Написал, даже пакетик опубликовал в пабе
???????
А потом открыл для себя hive)
???????
Вот с ним все крайне просто.
???????
api у него проще чем у indexedDB
Dmitriy Orteney
Всё через платформу
Dmitriy Orteney
[
"можешь это попробовать ",
{
"type": "link",
"text": "https://pub.dev/packages/maps_launcher"
},
""
]
Sergiy Vergun
Всем привет. Как я могу реализовать подобную анимацию вариантов ответа. Переход на следующею страницу реализован через PageView. Заметьте, что анимация ответов начинается сразу при скролле на следующую страницу. У меня анимация начинается только при постройке следующей страницы
Maks Andrienko
Кто может подсказать с чем связано то что в проекте я вижу mainactivity, а когда открываю модуль андроида то в папке Java ничего нету mainactivity
Dmitriy Orteney
[
"На флатер европе был видос, там парень тож анимировал варианты ответа)\n",
{
"type": "link",
"text": "https://youtu.be/FCyoHclCqc8"
},
" (17 минута)"
]
Roman Vasiliev
скорее всего не там ищешь
Sergey Salnikov
1. потому что kotlin 2. есть ещё вариант - он ещё не в stable, скоро мигрирует регистрация плагинов и mainActivity останется пустой и её не будут создавать (если ты на beta то можешь столкнуться)
Dmitriy Orteney
скорее всего она в папке kotlin. Попробуй переключить вид с android на project. Там над app кнопка
Maks Andrienko
нашел.спасибо большое
Maks Andrienko
а почему он не компелируется?( тоже потому что котлин ?
Dmitriy Orteney
наверное поддержка котлина не заехала в вашу студию)
Sergey Salnikov
ты напрямую не билдишь android - за тебя всё настроено где ошибка билда?
Maks Andrienko
это метод в mainactivity
Maks Andrienko
просто в флаттре он показывает что есть косяк а в андроиде нет
A1ex Petrov (К)
[
"Мужики, при такой конструкции получается ошибка по высоте PageView, как обойти?\n",
{
"type": "code",
"text": "ListView(\n shrinkWrap: true,\n children: [\n Text('Пример 1'),\n Text('Пример 2'),\n Text('Пример 3'),\n Text('Пример 4'),\n Text('Пример 5'),\n PageView.builder(\n controller: _pageController,\n physics: BouncingScrollPhysics(),\n itemCount: categoriesList.length,\n itemBuilder: (context, index) {\n return SizedBox(height: 10);\n }),\n ],\n)"
},
""
]
Sergey Salnikov
ты открыл как андроид проект? Tools -> Flutter -> open android пока похоже на отсутсвие заивсимостей, но так и будет если не открыл как android проект и не синканул gradle
Dmitriy Orteney
обернуть PageView в SizedBox, например
Maks Andrienko
Да, открыл так. А как чекнуть это ?
|