Программирование : Dart & Flutter по-русски
Alexander K
[
"Пользовался кто-нибудь? ",
{
"type": "link",
"text": "https://github.com/ganeshrvel/pub-data-channel"
},
"\nПохоже на either из dartz\nВообще, кто как обрабатывает ошибки, просто try/catch-и на всех уровнях?"
]
Ruslan Vafin
Большое спасибо! ?? Делай побольше контента по Flutter.
Roman Vasiliev
build.gradle файлы попробуй закрыть
Alexandr Borisovich
хоспаде... первый раз за месяц говорят! вам спасибо)
Evgeny Cherkasov
Посмотрите CustomMultiChildLayout
????????????????????
Доброго времени суток, ребята новичку что посоветуете для создание проектов в flutter ? отправьте ссылки книг или другие источники, пожалуйста
Андрей Рудин
курс Кокорина на Udemy
NewBalanceM5
[
{
"type": "link",
"text": "https://t.me/FlutterDevRu/508"
}
]
NewBalanceM5
советую удалить
NewBalanceM5
она всё-таки продается
NewBalanceM5
уважайте чужой труд
Андрей Рудин
да, да, согласен.
????????????????????
спасибо
Timur
Всем привет, почему у меня в релизе сканнер qr кодов не отображается, просто пустой серый экран, а в дэбаге все норм? Все пермишены прописаны и разрешение тоже стоит. Библиотека qr_code_scanner, может кто сталкивался с этим и может помочь
Андрей Рудин
если есть возможность поменять, используй вот этот barcode_scan: ^3.0.1
Timur
Ок, попробую, спасибо
Кирилл
Смотрел в его сторону, но насколько понял, там можно только в заранее определенные размеры впихивать чайлдов в контексте родителя, а мне нужно узнать intrinsic размеры, чтобы на их основе позиционировать чайлдов
Андрей Небогатиков
[
{
"type": "pre",
"text": "class MeasureSizeRenderObject extends RenderProxyBox {\n Size oldSize;\n final OnWidgetSizeChange onChange;\n\n MeasureSizeRenderObject(this.onChange);\n\n @override\n void performLayout() {\n super.performLayout();\n\n var newSize = child.size;\n if (oldSize == newSize) return;\n\n oldSize = newSize;\n WidgetsBinding.instance.addPostFrameCallback((_) {\n onChange(newSize);\n });\n }\n}",
"language": ""
},
"\n\nМожете этот видет использовать чтобы получить реальный размер виджета"
]
Ерсултан
Навигатор пуш не листвью не возвращает?
Temurxon
конечно не будет,как он должен возвращать ?
Temurxon
и как потом управлять с листом?
NewBalanceM5
очень не удобно, делай скриншот экрана или отправляй код. Фото экрана это не бест практис.
4??uzhoy .
Скачай телеграм десктоп, потом скриншот и сюда контрол В
Илья Максименко
И создавать функции тоже не бест, будете в каждую функцию контекст передавать?
Илья Максименко
Гораздо проще или виджет создать или вообще не декомпозировать без потребности
Ерсултан
[
"Widget buildRestoCard2() => Card(\n clipBehavior: Clip.antiAlias,\n child: Stack(\n alignment: ",
{
"type": "link",
"text": "Alignment.center"
},
",\n children: [\n Ink.image(\n image: NetworkImage(\n '",
{
"type": "link",
"text": "https://media.istockphoto.com/photos/burger-with-beef-and-bacon-picture-id1166797165?b=1&k=6&m=1166797165&s=170667a&w=0&h=oli4U_a2wA7GLusYOipZ4-7up27c82_rFVoYpLNJou0="
},
"'),\n colorFilter: ColorFilters.greyscale,\n child: InkWell(\n onTap: () {\n BuildContext context;\n Navigator.push(\n context,\n MaterialPageRoute(builder: (context) => myListView()),\n );\n },\n ),\n height: 240,\n fit: BoxFit.cover,\n ),\n Text(\n 'Tsar`s Burger',\n style: TextStyle(\n fontWeight: FontWeight.bold,\n color: Colors.white,\n fontSize: 24,\n ),\n ),\n ],\n ),\n );"
]
Илья Максименко
А судя по скрину вы так и не передали контекст
Ерсултан
[
"Widget myListView (BuildContext context) {\n return ListView(\n children: [\n ListTile(\n leading: Icon(Icons.wb_sunny),\n title: Text('Sun'),\n ),\n ListTile(\n leading: Icon(Icons.brightness_3),\n title: Text('Moon'),\n ),\n ListTile(\n leading: Icon(",
{
"type": "link",
"text": "Icons.star"
},
"),\n title: Text('Star'),\n ),\n ],\n );\n }"
]
Илья Максименко
Повторюсь
Илья Максименко
Из-за этого все проблемы
Илья Максименко
И вы создали BuildContext пустой
Илья Максименко
Нужно передать контекст виджтеа
Илья Максименко
Для начала убрать его
Илья Максименко
И везде во всех функциях прокинуть BuildContext из функции билд
Илья Максименко
Что конечно же неудобно
Ерсултан
Я не могу понять можно по подробнее?
Ерсултан
onTap: () { BuildContext context; Navigator.push( context, MaterialPageRoute(builder: (context) => myListView(context)), ); },
Ерсултан
======== Exception caught by gesture =========================================== The method 'findAncestorStateOfType' was called on null. Receiver: null Tried calling: findAncestorStateOfType ()
Michael Bazilique
ребят, для пуша персональных нотификаций нужен deviceName?
Сергей
У вас тут контекст - локальная переменная, которая инициализируется null. А Navigator внутри дергает на контексте функцию findAncestorStateOfType, вот ошибка и вылезает
Сергей
А, вам это писали уже, извиняюсь
Илья Максименко
Да, очевидно же в чем проблема
Андрей Небогатиков
Нужен deviceId
Андрей Небогатиков
Через firebase можно получить
Michael Bazilique
а на телефоне локальльно никак?
Alexandr Drobyshev
шо значит не знаю? что тут ломает? у меня репо на каждый элемент свой, что мне мешает тут вписать что угодно еще для обработки? а почему отрезает возможность, не совсем понимаю где косяк? у меня и блок наследуюется и в репо можно предть что угодно не понмиаю где я ограничен?)
EcsFlash-
Может быть я пропустил и кто то уже говорил про гетх, но и я скажу в гетх есть фича в том, что не нужен контекст, если я все правильно понял
Илья Максименко
Ну, насколько я понимаю у вас абстрактный репозиторий связан с абстрактным блоком
Alexandr Drobyshev
ну там в репо тупо прописан интерфейс. getData и все, а дальше я уже делаю свой репо
Илья Максименко
Ну, в абстрактном блоке есть упоминания абстрактной репы?
Alexandr Drobyshev
пока это наброски тоже) ну в 5 мест прикрутил везде однои то же) была мысль всю функцию getData. вынести в тот абстрактный класс, а есл итчо то надо дрругое то уже заменять ее в наследнике, пока код 1 в 1 во всхе 5 репо
Alexandr Drobyshev
но я ж могу вторым перематром передать
Alexandr Drobyshev
ну то есть расирить класс
Alexandr Drobyshev
вот так сейчас, но я могу сюда напихать что угодно если надо
Илья Максименко
Несколько репозиториев?
Alexandr Drobyshev
[
"вы же понимаете что если репозиториев несколько, то и код ",
{
"type": "code",
"text": "mapEventToState"
},
" скорей всего будет другой? так что мне менает сюда сделать так?"
]
Илья Максименко
Если репозиториев несколько прописываете их в дочернем классе
Илья Максименко
И описываете логику в методе getData
Alexandr Drobyshev
ну а зачем мне их прописывать в родителе который с ними не работает
Alexandr Drobyshev
что это нарушает не совсем понял?)
Илья Максименко
Не совсем нарушает, это решение вообще не под все кейсы
Илья Максименко
Будет заставлять прописывать бизнес логику в репозиториях
Alexandr Drobyshev
ну так очевидно если я сталкнулся бы со случаем когда оно не подходит, то это другйо разговор, я пока не вижу где мне нуно это будет для репо вытягиывания даннях списка
Alexandr Drobyshev
почему в репозиториях?
Илья Максименко
Ну покажите свой абстрактный блок
Илья Максименко
Может я чего-то не понял, но я рассматривал вашу идею
Илья Максименко
Но понял что это фигня
Alexandr Drobyshev
hasMore я считаю да, ндао. врепозитории, ибо он у меня глобальный, а блок пересоздается
Alexandr Drobyshev
больше там логики нет вроде бы)
Cruiser
Если использовать GridView внутри SingleChildScrollView - выдаёт ошибка?
Alexandr Drobyshev
я ж не говрю что у меня правлиьно)) я вего то один день пока ковырял это) вроде запустилось, пока проблем не видел) я просто ср азу 4 проеета делаю)) этот пока не делал больше
Илья Максименко
Ну вот, у вас нет возможности для расширения логики
admin
your app is missing support for the following url schemes - flutter
Alexandr Drobyshev
почему я не могу метод mapToState перекрыть в чайлде?
Илья Максименко
Ну я понимаю, просто говорю что я с этим столкнулся
Илья Максименко
И это не работает
admin
your app is missing support for the following url schemes - flutter sign in google
Илья Максименко
С точки зрения опен клозд
Илья Максименко
Это расширение ивентов
Илья Максименко
Но не расширение логики получения данных
B .
ребята, подскажите, как убрать безопасный ввод чтобы начать вводить мне нужно нажать на i так происходит когда только начинаю писать код, после входа в проект или же при копировании
Alexandr Drobyshev
[
"ну то етс разница я сомтрю в том что вы предлагаете сделать абстраксный метод ",
{
"type": "mention",
"text": "@protected"
},
"\n Future getData();?"
]
Alexandr Drobyshev
ну не проблема, добавлю)
Alexandr Drobyshev
только одна пробелма) а как вы передаете парамтеры в репо?
Alexandr Drobyshev
у вас getData. не принимает Event
Alexandr Drobyshev
[
"ну то етсь я не понял как потом в блоке уже для UI у вас реализован этот метод getData\n\n",
{
"type": "code",
"text": "Future getData(ResourceEvent event);"
},
"\nвот так могу еще понять)"
]
Alexandr Drobyshev
даже так тогда, репо ж не надо в родителе
Илья Максименко
Через конструктор блока
Илья Максименко
Например id
Илья Максименко
Дочернего
Alexandr Drobyshev
ну я навренео чреез евенты оставлю таки, не совсем понмиаю как тогда их преедавать для описка того же, напрмиер у меня чат по имени юзера исктаь можно и я делаю просто ..add(FetchData({ search: ... }))
Alexandr Borisovich
гуманитарий делает скриншот© Ж-)))
Alexandr Drobyshev
там кжадый раз новый парамтер летит
Илья Максименко
Гет дата через SingleDataLoaderProvider
Илья Максименко
Он прокидывает ивент на получение данных при инициализации блока
Cruiser
Это RecommendedList использованная на верху
Cruiser
Если я не задам height в Container'е RecommendedList, выдает ошибка
Cruiser
Как я могу сделать Scroll?
Илья Максименко
Хм, а вот этот кейс я не учел мб
Илья Максименко
Нужно будет доработать
Alexandr Drobyshev
ну он легко решается перекидываеним евент в гетдата в целом, вроде работает)
Timur Mukhortov
вы event прокидываете в репозиторий?
Alexandr Drobyshev
нет, event.params
Alexandr Drobyshev
[
{
"type": "code",
"text": "return repository.fetchData(event.params, event is FetchDataNext);"
}
]
Илья Максименко
Уже придумал решение, нужно будет на досугн реализовать
Илья Максименко
Частично основано на вашей идее прокидывание ивента в getData
Илья Максименко
Но только чуть более безопасно на мой взгляд
Alexandr Borisovich
кто на хабр тока что запостил пост про флаттер?
Илья Максименко
Всё-таки прокидывание параметров через мэп это не очень здорово
Timur Mukhortov
где params это какие то данные, которые в Event передали?
Alexandr Drobyshev
..add(FetchData({ search: ... })) да
Timur Mukhortov
а зачем проверка идет? на то является ли этот эвент конкретно этим
Alexandr Drobyshev
у меня два евента FetchData и FetchDataNext если некст значит продолжаем грузить при скролле напрмиер если нет знаичт это обнволение данных, типа refresh потянули то есть отдать с начала списка, или отдать следующую пачку данных bool loadMore
Timur Mukhortov
я в репах просто передаю сразу параметры, без евентов код более чистый ну то есть если я захочу тестировать репку, мне нужно будет передать не созданный евент, а какие то данные
Илья Максименко
Вот для этого сделаю по-другрму
Alexandr Drobyshev
конкретно для статей я вообе не передаю пармтеры, там пусто, так что омжно убрать)
Timur Mukhortov
[
"вы же проверяете, какой у вас евент в методе ",
{
"type": "code",
"text": "mapEventToState"
},
"?"
]
Alexandr Drobyshev
я ж елал сразу 1 обзий репо на ВСЕ записи
Timur Mukhortov
тип мы можете отправить эвент на загрузку еще данных
Timur Mukhortov
или на обновление
Илья Максименко
А, ну так у вас логика
Илья Максименко
В репозитории
Илья Максименко
Бизнесовая
Alexandr Drobyshev
у вас частный случай, для User а у меня речь про абстрактный класс для всех моделей который подгружаются спиком, он 1 на все
Timur Mukhortov
да, это правда
Alexandr Drobyshev
я вам выше еще написал, сразу, что hasMore я осталвил именно в репо! потому что только репо хранит стейт! блок НЕ может хранить стейт так как он пересоздается, а репо нет, зачем тянуть каждый раз с сервера даныне
Alexandr Drobyshev
там выбор будет с локальной бд или с сервера еще
Timur Mukhortov
но можно же сделать базовый event для списков с RefreshEvent, SearchEvent, LoadEvent и т.д.
Timur Mukhortov
или так тоже не подойдет?
Alexandr Drobyshev
ну как скажет Илья это нарушит SOLID ?? так как для добавления нового эвента надо переписать будет абстраксный класс))
Илья Максименко
Так и буду делать
Alexandr Drobyshev
о как, уже не нарушает?)
Alexandr Drobyshev
двойные стандарты ??
Alexandr Drobyshev
ну там же все случаи евнтов все равно переписываются в мапТуСтейт
Илья Максименко
Или я неправильно понял сообщенин
Alexandr Drobyshev
а это же если надо тупо 1 евент новый добавить - перепистаь мапТуСетйт
Timur Mukhortov
почему переписать?
Илья Максименко
Ну в общем идея такова, что мы наследуемся от GetSingleData(ивента) в классе в котором этому ивенту нужно дать параметры
Alexandr Drobyshev
на доавить case
Timur Mukhortov
если добавить 1 эвент - нужно добавить еще 1 обработку
Alexandr Drobyshev
вообщем не решает это проблемы бизнес логики в репо
Alexandr Drobyshev
ну пока
Alexandr Drobyshev
как помечать что нет дальше данных в блоке если он персоздается при входа на страницу?
Alexandr Drobyshev
ни как
Timur Mukhortov
стоп стоп стоп, бизнес логику можно засунуть в UseCase
Timur Mukhortov
а как сейчас вы помечаете?
Alexandr Drobyshev
нужно где то хранить парамтер, bool, что данные есть еще или дошли до конца, где его хранить? в каком классе будет эта переменаня?
Alexandr Drobyshev
ну в репо же, hasMore = false
Alexandr Drobyshev
репо создан глоабльно, а блок локально
Илья Максименко
Ну это если у вас есть слой домейн
Alexandr Drobyshev
репо всегда одно
Илья Максименко
Не всем приложениям он будет полезен
Timur Mukhortov
[
{
"type": "mention",
"text": "@terraideas"
}
]
Timur Mukhortov
я пока вот так сделал
Timur Mukhortov
действительно, у меня есть domain
Илья Максименко
Тем более нет смысла завязывать абстрактные блоки на абстрактные репозитории
Илья Максименко
Потому что в других проектах это не применить
Alexandr Drobyshev
можно забить вцелом на это, и убрать hasMore в блок, и путсь 1 раз при перезаходе на страницу будет пытатся вытащить те несчстняе данные)
Илья Максименко
В которых нужно например с юзкейсов брать данные
Илья Максименко
Я просто не знаю что такое hasMore
Илья Максименко
Может это и не бизнесовая логика
Timur Mukhortov
bool свойство какое то видимо
Timur Mukhortov
есть ли еще данные для получения
Alexandr Drobyshev
когда мы скролим, и доскролили до конца, все, на сервере нет данных больше, зачем при новом скроле вниз пытатся к серверу тянутся за данными? вот чтоб не пытаться, ставлю флаг, типа не лезь, нету данных еще старее
Timur Mukhortov
это правда
Илья Максименко
А, ну вроде тогда не бизнесовая
Илья Максименко
Похоже на логику получения данных
Alexandr Drobyshev
тут просто в блок - знаичт дя преставления, а в репо ка краз для репо, она болше для репо подходит потому туда и пихнул
Alexandr Drobyshev
это то же тчо решать дальше буду с локлаьной бд тащить или с сервера )
Mike Ivanov
Да, я вот посматриваю на него, насколько удобный плагин? И Насколько медленный/багованный? Можно ли для одного места вставить, а остальное не трогать (оставить по старому). Пс. Спасибо!
Maksim Zdanchuk
очень выручили) спасибо
Maksim Zdanchuk
Единственное, тут размер кнопки зависит от кол-во текста внутри, не подскажете, какой параметр может сделать размер статичным? (может, вы это делали)
Maksim Zdanchuk
все, нашел)
Evgeny Cherkasov
У кнопки поведение такое же как у оригинальных кнопок (Text, Elevated и Outline), т.е. она свой размер определяет сама по тексту. Минимальный размер можно задать через style. Максимальный - это уже нужно оборачивать в констрейнс сам виджет.
Maksim Zdanchuk
[
"да, я в стайл добавил свойство ",
{
"type": "code",
"text": "minimumSize"
},
" и все)"
]
Sergei
[
"Всем привет!\nРебят, подскажите, может кто знает.\nКак можно во flutter установить IMPORTANCE HIGH для пушей?\n ",
{
"type": "hashtag",
"text": "#вопрос"
},
""
]
Sergei
пуши шлем через Firebase
Alexandr Drobyshev
инетресно, можно ли сдлеать вывод пушей от фаербейза только если чел в заданном раудиусе? я так понимаю я могу написать ресивер для пушей и иос и андроид, а оттуда можно геопозицию получать? сравивать с пайлоад и выводить или нет в зависимости от расстояния?
Sergiy Vergun
Есть ли какой-то плагин со сниппетами для создания сервисов репозиториев?
Danil
Привет всем! С нативки попробовал флаттер, понравилось. Только дарт конечно)))) KMM норм тема? Только по нему очень мало гайдов, даже на англоязычном ютубе.
Danil
Заменят ли вообще фреймворки нативку в будущем?
Danil
Одна кодовая база для двух платформ это, конечно, круто. Но производительность это все дело кушает.
SoFo
На флаттере плохая производительность?
Alloxa
для приложений типа CRUD да для остального нет, но никто не мешает совмешать эти два способа
Danil
Ну во время дебага все люто лагает
Danil
Когда компилю апк все норм
Alloxa
рекомендую дебажить на ios симуляторе на нем летает
SoFo
на реальном усстройстве лагов тоже не замачаю почти
SoFo
ну когда парсишь json есть мб
Danil
Ну всякие банки и соц сети вряд ли перейдут на фреймворки?
Alloxa
яндекс уже начал переходить на flutter
Alloxa
как минимум одно приложение они сделали
|