Программирование : Dart & Flutter по-русски
???????
Если делаешь не через задницу, там раз плюнуть
NewBalanceM5
тут согласен, но вэб же еще не вышел в стабильную ветку?
NewBalanceM5
ну мне кажется, что флаттеру еще рановато в вэб, не особо удобно
???????
Смотря какое приложение и смотря как делать
NewBalanceM5
тут тоже верно, но пока вэб для меня не выглядит идеально, но это лично мое мнение.
???????
Он выглядит достаточно хорошо
???????
Не идеально, но достаточно
NewBalanceM5
возможно я не прав и мне стоит присмотреть получше, просто вэб последний раз трогал 2 месяца назад
???????
Они очень многое за это время поправили
Vyacheslav
приложение несложное, только пока не знаю, пойдет ли hive для веб версии
???????
Собственно как и до этого
Vyacheslav
все пакеты работают? BLoC?
???????
Твоя главная задача, избавится от IO
NewBalanceM5
ладно, как раз заценю тогда, попробую что-ни будь интересное написать.
???????
[
{
"type": "link",
"text": "https://pub.dev/packages/platform_info"
},
"\n\nСмотри как инкапсулировать io/html логику"
]
???????
В вебе нету dart:io, но есть dart:html
???????
Вот эти зависимости тебе надо разрулить
Vyacheslav
у меня только в тестах есть, чтобы читать json для входных условий
???????
Так у тебя могут быть пакеты, которые зависят от io
Vyacheslav
получается, если начинать новый проект с перспективой для веб, сразу делать dart:html? На мобильных устройствах будет все ок?
???????
в io окружении нет dart:html
Sergey Hottabych
Видел такой способ, когда stateful widget создают с какими-либо переменными, затем их пробрасывают в стейт (в стейте создают эти же переменные, в createState их закидывают, в конструкторе стейта принимают). В каких-то случаях оправдан такой подход? Я всегда через widget. обращался
???????
Сам виджет у тебя может сменятся, а стейт останется прежним (например hot reload будет ярким примером)
???????
Вот тут и возникает вопрос, оно у тебя должно быть привязано к виджету или его стейту
Pavel Vasilenko
Подскажите, пожалуйста, а есть ли группы по флаттеру, где обсуждают примеры приложений? Так сказать "других посмотреть, да себя показать"?
Rinat Kurmashev
репозитории все в одном package хранят?
Vyacheslav
[
"кто-то пользуется ",
{
"type": "link",
"text": "https://codemagic.io/start/"
},
"? в чем фишка, есть ли смысл"
]
Evgenii Elchev
если у тебя команда то есть, если не команда то наверное нет, ну опять же ты там под ios без мака можешь собраться
Vyacheslav
а насчет тестирования там что? автоматическое тестирование UI?
Nikita Domnitskii
Размечтался
Denis Bystruev
Даже если работаешь один, но есть заказчик, который буквально каждое утро хочет посмотреть, что ты сделал вчера. При этом он не умеет собирать билды, а ему нужно выкачивать готовое приложение из App Store Connect. Вот чтобы не тратить время на сборку и upload, можно настроить процесс автоматической публикации беты в Test Flight.
Evgenii Elchev
да можно на машине собирать своей
Denis Bystruev
Можно. Сначала собрать, потом загрузить, потом ещё потыкать кнопки на сайте. Если у тебя 5–6 коммитов в день, то звереешь.
Evgenii Elchev
если у тебя фастлейн, то это запустить один скрипт)
Denis Bystruev
Ну так codemagic — это то же самое
Evgenii Elchev
но платное)
Denis Bystruev
[
"Какая разница — не мы ж платим, заказчик. Нашёл сетап, где fastlane интегрируют в codemagic, кстати: ",
{
"type": "link",
"text": "https://blog.codemagic.io/using-fastlane-with-codemagic/"
},
""
]
Evgenii Elchev
я не настаиваю, если тебе нравится то конечно можно использовать, просто мне не проблема жмякнуть стартануть скрипт на своей машине, а сторонний сервис кажется избыточен ???>?
Evgenii Elchev
кстати у нас на работе CI жутко медленный( моя машина собирает на порядок быстрее
Artem Shkryab
есть два виджета, в которых есть картинка, картинка одна и таже, при смене виджетов, нужно анимировано сдвинуть картинку... что-то вроде хиро анимации, но без транзакции, есть варианты решения?
Artem Shkryab
эти виджеты в разных файлах... вариант с стеком не подходит
Angry TaigaFox
Есть ли способ кастануть broadcast stream в single-subscription ?
???????
Есть, но практической пользы от этого никакой
???????
[
"Ну що, можем смело добавлять строчки:\n",
{
"type": "code",
"text": "google_fonts: '>=1.0.0 <2.0.0'"
},
" в свои пабспеки"
]
Dart Flutter
Привет, нужна помощь
Dart Flutter
Хочу передать аргументы на второй экран. Пытаюсь записать их в переменную и прокинуть..но не пишется
Aleksander Barsukov
Привет всем. Можно ли из флаттера автоматически высылать смс без участия пользователя, например, в определённую дату?
Dart Flutter
null всё время
Кирилл Матросов
setState потерял скорее всего
Dart Flutter
воткнул. по прежнему в переменной null
Dart Flutter
lastName = null
Roman Vasiliev
item[index] в переменную вынести религия не позволяет, обязательно везде нужно написать
Сергей Бугай
[
"Пытаюсь подключить ",
{
"type": "link",
"text": "https://pub.dev/packages/firebase_messaging"
},
" и сразу же проблема, в описании нужно проадейтить MainActivity и Application, а их б…. нету"
]
Dart Flutter
эм...item[index]['lastName'] я хочу это Г записать в короткую переменную lastName и по кнопке онТап чтоб она улетала, а то как эту хрень item[index]['lastName'] прописать в качестве аргумента для передачи я не понимаю
Roman Vasiliev
А приложение как запускается?)
Сергей Бугай
Есть MainActiviti kotlin
Ivan Makarov
думаю это и из нэйтива нельзя, если речь идёт об устройстве пользователя
???????
У когонить получилось использовать grinder с флатером, а не дартом?
Aleksander Barsukov
Ну вот у меня стоит приложение, проверяет какая дата и если есть на эту дату ивент, то высылает смс-ку без какого-то взаимодействия со мной. Ну в крайнем случае, подготавливает смс с текстом и номером и нужно только нажать "отправить". Это как-то реализуемо?
Ivan Makarov
вот если с кнопкой отправить - это точно можно
Aleksander Barsukov
Спасибо за ответ!
Aleksander Barsukov
Если у кого-то есть информация, как сделать высылку смс с телефона такую полуавтоматическую то поделитесь, пожалуйста
Ivan Makarov
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/9798657/send-a-sms-via-intent"
},
"\nэто про андроид"
]
Ivan Makarov
[
{
"type": "link",
"text": "https://pub.dev/packages/flutter_sms"
}
]
Aleksander Barsukov
Спасибо большое ещё раз. Пусть воздастся добром.
Dmitry Sakhnov
Всем привет,поясните для чего нужны в dart операторы ?. ?? и ??=
???????
Для тех кто будет бодаться с гриндером и флатером на венде, вот решение
Sasha
а в чем разница bloc с flutter_bloc?
???????
flutter_bloc это bloc + пару ооочень опциональных виджетов
Виктор Ященко
bloc работает на pure dart. Flutter bloc предоставляет удобные виджеты для работы с bloc
Sasha
получается для приложения лучше использовать flutter_bloc?
Виктор Ященко
Если не хочешь писать сам виджеты для работы c bloc, то да)
???????
Или использовать Provider + StreamBuilder
Roman Vasiliev
[
{
"type": "link",
"text": "https://dart.dev/guides/language/language-tour"
}
]
???????
Зависит от того что тебе нужно. Но начать лучше с этого дела, да
???????
Чем ты недоволен?
Dmitry Sakhnov
Я не просто же написал в группу
Dmitry Sakhnov
Я читал доки
Dmitry Sakhnov
Видео смотрел
Dmitry Sakhnov
все равно не понимаю
Dmitry Sakhnov
для чего они нужны
Dmitry Sakhnov
Поэтому и спрашиваю
Roman Vasiliev
По поводу первых двух
Roman Vasiliev
Можно типа такого состряпать final a = b?.foo() ?? "default text"; Удобно
Roman Vasiliev
Допустим мы хотим крутую лошадь, у нас есть знакомый цыган и мы знаем что лошадей у него уйма. Но вдруг цыган уходит и нам не откуда брать крутую лошадь, тогда мы берем дефолтную
Roman Vasiliev
Лошадь из воздуха взять нельзя
???????
Куда еще понятнее то?
???????
Есть дартпад, чтоб проверить поведение...
Виктор Ященко
Это null-safety операторы. В теории, если правильно использовать, делают твой код более безопасным от просачивания в него всяких null объектов. И позволяют тебе избежать громоздких конструкций типа if( someValue !=null) {doSomeTask()}
Roman Vasiliev
написано, но не прочитано
Sasha
еще вопрос. как можно initialState связать с sharedPrefs? в блоке
Roman Vasiliev
там контекст нужен?
Roman Vasiliev
в чем проблема тогда?
???????
В initState нельзя
???????
И былоб ультра странное, еслиб можно было
???????
FutureBuilder если в крации
???????
[
{
"type": "code",
"text": "А Р Х И Т Е К Т У Р А\nР\nХ\nИ\nТ\nЕ\nК\nТ\nУ\nР\nА"
},
"\n\nЕсли подробнее"
]
Sasha
[
"получается мне нужно написать метод типа loadState() к:\n\nclass SettingsBloc extends Bloc {\n ",
{
"type": "mention",
"text": "@override"
},
"\n SettingsState get initialState =>\n SettingsState(temperatureUnits: TemperatureUnits.celsius);\n\n ",
{
"type": "mention",
"text": "@override"
},
"\n Stream mapEventToState(SettingsEvent event) async* {\n if (event is TemperatureUnitsToggled) {\n yield SettingsState(\n temperatureUnits: state.temperatureUnits == TemperatureUnits.celsius\n ? TemperatureUnits.fahrenheit\n : TemperatureUnits.celsius,\n );\n }\n }\n}\nи вызывать при запуске приложения?"
]
Roman Vasiliev
есть сумасшедшная идея сделать статик в блоке и в нем получать префсы, гнать в конструктор и возвращать блок
Roman Vasiliev
но может глобально идея не очень
Vyacheslav
[
"я бы написал так в методе onTap:\n",
{
"type": "pre",
"text": "lastName = item[index]['lastName']",
"language": ""
},
" \nа не наоборот, как написано в твоем коде"
]
Сергей Бугай
мозг кипит, спасайте)
les forest
Application можешь добавить сам. Отнаследуй класс от Application и пропиши ео в манифесте - application name
Dart Flutter
ТЫ ГЕНИЙ!!!! но почему так? в пхп похер что раньше стоит
les forest
В папке котлин у тебя мэйн активити
les forest
в той же папке создай Аpp
Сергей Бугай
это я вижу, но инструкции по добавлению в котлин нету(
les forest
котлин интероперабелен с джавой
Rinat Kurmashev
[
{
"type": "mention",
"text": "@PlugFox"
},
" сэмпл приложения с примером архитектуры сделал? ??"
]
???????
Буду дооооооооолго делать
???????
Попутно выпуская полезные пакеты)
Павел
typedef есть для void Function() из коробки?
Rinat Kurmashev
локомотив чата))
les forest
можешь джава классы добавить
Сергей Бугай
а если убрать поддержку котлина?
Сергей Бугай
ладно, спасибл, буду ковырять)
Nikita Domnitskii
У них в ишью где-то есть пример для котлина
Сергей Бугай
уже нашел, но как то странно что в оф доке нету примеров
Vyacheslav
Спасибо, меня так ещё никто не называл ?? Другой язык, другие правила
Sasha
а зачем нужен BlocSupervisor.delegate?
Viktor S
[
{
"type": "code",
"text": "А Р Х И Т Е К Т У Р А\nР"
},
" ",
{
"type": "code",
"text": "Р\nХ"
},
" ",
{
"type": "code",
"text": "Х\nИ"
},
" ",
{
"type": "code",
"text": "И\nТ"
},
" ",
{
"type": "code",
"text": "Т\nЕ"
},
" ",
{
"type": "code",
"text": "Е\nК"
},
" ",
{
"type": "code",
"text": "К\nТ"
},
" ",
{
"type": "code",
"text": "Т\nУ"
},
" ",
{
"type": "code",
"text": "У\nР"
},
" ",
{
"type": "code",
"text": "Р\nА"
},
" ",
{
"type": "code",
"text": "А"
},
""
]
Кирилл Матросов
можно все стороны и диагонали еще прописать
Roman Cinis
Юзайте .whenComplete или .then. Работает и в initState
Sasha
[
"[В ответ на ???????]\n",
{
"type": "code",
"text": "А Р Х И Т Е К Т У Р А\nР"
},
" ",
{
"type": "code",
"text": "Р Р\nХ"
},
" ",
{
"type": "code",
"text": "Х Х\nИ"
},
" ",
{
"type": "code",
"text": "И И\nТ"
},
" ",
{
"type": "code",
"text": "Т Т\nЕ"
},
" ",
{
"type": "code",
"text": "Е Е\nК"
},
" ",
{
"type": "code",
"text": "К К\nТ"
},
" ",
{
"type": "code",
"text": "Т Т\nУ"
},
" ",
{
"type": "code",
"text": "У У\nР"
},
" ",
{
"type": "code",
"text": "Р Р\nА Р Х И Т Е К Т У Р А"
},
""
]
Sasha
получилось кривое, как и мое приложение
Сергей Переходов
А Р Х И Т Е К Т У Р А Р Р Р Р Х Х Х Х И И И И Т Т Т Т Е Е Е К К К К Т Т Т Т У У У У Р Р Р Р А Р Х И Т Е К Т У Р А
Сергей Переходов
у меня вообще перенос охуевший
Ярослав Макаров
Товарищи, а кто-нибудь имеет опыта аудио прил на флаттере? Интересует проигрывание в миксе до 12 треков, потоковое проигрывание, эффекты. Интересно есть ли достойные пакеты, либо насколько сложно/оправдано будет делать враппер(ffi или channel?) для либы на сях (BASS)
???????
Чтоб отлавливать в нем все ошибки и транзакции
???????
Для логов, например
Sasha
кстати а как управлять историей навигатора?
Sasha
допустим если я захочу удалить какой то маршрут который открывался 3 или 4 скрина назад?
Sasha
Он сам будет говорить где у меня ошибка?
Tagir
Как запустить чистый проект? без материал и купертино стиля?
Tagir
Вместо return MaterialApp?
Ivan L
кто знает, nndb во флаттер ещё не подвезли?
Ivan L
печаль. даже в какой-нибудь альфе ещё нет?
???????
Вроде ребята игрались пару месяцев назад
???????
Но в стейбле точно нет
Nikita Domnitskii
В дартпаде потыкать можно вроде
Ivan L
я знаю, но тыкать не интересно
Сергей Бугай
[
"Ни как побороть не могу firebase_messaging\n Missing Default Notification Channel metadata in AndroidManifest. Default value will be used.\nдобавил \n {
"type": "bold",
"text": "android"
},
":name=\"com.google.firebase.messaging.default_notification_channel_id\"\n ",
{
"type": "bold",
"text": "android"
},
":value=\"",
{
"type": "mention",
"text": "@string"
},
"/default_notification_channel_id\"/>\nкак пишут везде, начало матерится на ",
{
"type": "mention",
"text": "@string"
},
"/default_notification_channel_id\nдобавил fcm_default_channel\nсообщения начали приходить в бекграунде, но когда кликаю по нему, апликуха открывается, но обработчик не срабатывает и в консоли \nNotification Channel set in AndroidManifest.xml has not been created by the app. Default value will be used."
]
Сергей Бугай
может кто знает куда копать?
Temurxon
какая то рекурсия
Сергей Бугай
да блин, я нифига не понимаю(
Roman Vasiliev
Судя по тексту ошибки канал не создан программно
Сергей Бугай
это как бы понятно, но как его создать то?)
Temurxon
вы на firebase е канал указывали?
Сергей Бугай
все по инструкции делал
Temurxon
и local notification юзали ?
Сергей Бугай
при запущеном приложении все норм, сообщения приходят в onMessage
Temurxon
по началу у меня было также
Temurxon
приходило при запущенном
Temurxon
и потом начал работать
Temurxon
не понял из за чего так
Temurxon
я устанавливал на еще 2 устройство
Temurxon
после этого приходил пуш на 1 устройство
Temurxon
потом и на другие
Сергей Бугай
вечная магия, помню с RN и firebase постоянно мучался, и здесь тоже)
4??uzhoy .
[
"return StreamBuilder (\n initialData: ConnectivityResult.none,\n stream: Connectivity().onConnectivityChanged,\n builder: (context, conResult) {\n CurrentNetworkStatus _stat = await _currentNetworkStatus(",
{
"type": "link",
"text": "conResult.data"
},
");\n }, \n );\nВопрос, хочу в стримбилдере строить виджет на основании потока onConnectivityChanged, но результат нужно прогнать через async функцию _currentNetworkStatus, как это сделать ? пытался вместо await попробовать .then, но получил null, нужно виджет который возвращает стримБилдер сделать futureBuilder? или как это лучше делать правильно ?"
]
4??uzhoy .
[
"или не должнно возникать такого что я ",
{
"type": "link",
"text": "snapshot.data"
},
" прогоняю через async функции ?"
]
???????
Логично использовать asyncMap на этом потоке чтоб снапшотом получать уже готовый результат того чего тебе там надо
???????
в виде извращения можешь сделать и через FutureBuilder
???????
* помогаю только из за ника)
Константин Буланов
А можно список ников к которым у вас особые чувства? Я бы переименовался тогда :)
???????
Нет, информация приватная
4??uzhoy .
тяжело в потоки по началу)
???????
У тебя есть поток который ты слушаешь
???????
Просто допиши myStream.asyncMap(myFunc) к нему
???????
Вот myFunc это Future функция преобразования того что у тебя в потоке течет в чото что тебе нужнее и уже можно отрисовывать из снапшота
4??uzhoy .
так он же не дает преобразовать в тип отличный от того типа в котором стрим ?
???????
Да, во что хочешь
4??uzhoy .
этот асинк мэп
4??uzhoy .
че я делаю не так ?
???????
Тип у StreamBuilder глянь
???????
Иначе а ф чом смысол
4??uzhoy .
уф, работает, хах
|