Программирование : Dart & Flutter по-русски
Yakov K.
Кубик под капотом на стримах же?
Over Pro
[
"Приветствую всех. Подскажите в чем, может быть проблема. Фрагмент кода: Expanded(\n child: StreamBuilder (\n \n stream: _firestore\n .collection('messagS')\n .orderBy(sendUserId)\n .snapshots(),\n builder: (context, snapshot) {\n if (!snapshot.hasData)\n return Center(\n child: CircularProgressIndicator(),\n );\n \n \n\n List docs = ",
{
"type": "link",
"text": "snapshot.data.docs"
},
"; \n List mesdsag = ",
{
"type": "link",
"text": "docs.map"
},
"((dok) => ",
{
"type": "link",
"text": "dok.data"
},
"()[sendUserId]\n .map((doc) => Message(\n from: ",
{
"type": "link",
"text": "doc.data"
},
"()['date'],\n text: ",
{
"type": "link",
"text": "doc.data"
},
"()['text'],\n //me: ",
{
"type": "link",
"text": "widget.user.email"
},
" == ",
{
"type": "link",
"text": "doc.data"
},
"['from'],\n )))\n .toList();\n \n \n \n\n print('Массив${mesdsag}');\n return mesdsag.length != 0\n ? ListView(controller: scrollController, children: [\n ...mesdsag,\n ])\n : Center(child: Text('Напишите сообщение!'));\n },\n ),\n ),\n\nПри запуске выдает ошибку type 'MappedListIterable' is not a subtype of type 'Widget'\nВ чем может быть причина?"
]
d
Ну ошибка говорит о несовпадении типов
Timur M.
Но если смотреть с точки зрения количества кода при разработке, наверно примерно также получится
Yakov K.
Сомневаюсь, для эффективных ребилдов же нужно будет создавать по кубику на observable – много кубиков получится
Alexandr Drobyshev
children: [ ...mesdsag,] это же то же самое что children: mesdsag зачем пересоздавтаь обект в данном случае?
Over Pro
Ошибка, появилась когда в medsag добавил всторой метод map(). До этого всё работало нормально(((
Timur M.
А ты предлагаешь свой один объект на апку?
Yakov K.
Неа, один объект на логическую группу
Timur M.
Ну и кубит/блок также
Alexandr Drobyshev
ну так второй метод map возвращает не виджет а Iterable вам, а вы ожидаете виджет, все правлиьно вам пишет
Yakov K.
Нет же – как мне на кубите ребилдиться при обновлении конкретного поля модели? Тут либо всю модель слушать и иметь лишние ребилды, либо плодить по кубиту на каждое значение
Over Pro
Подскажите, пожалуйста как привести к типу ?
Alexandr Drobyshev
ну так я ж на знею что вы делаете и что получаете) возможно нужно что то сделать во вложенном виджете, а может прсото не так скобки расстаивли и хотели прйотись мапой по листу а прошлись внутри)
Timur M.
Ну как If state is text1 { Controller = state.text1} Примерно так
Yakov K.
И вы говорите о таком же количестве кода? ??
Alexandr Drobyshev
[
"вы делаете \n",
{
"type": "link",
"text": "docs.map"
},
" ((dok) => ... )\nожитаеже что вернется из коллбек функции виджет\nА потом делает унтри еще раз\n",
{
"type": "link",
"text": "docs.map"
},
"((dok) => map() )\n\nа раз map то по итераельному объекту и вренет он вам так же Iterable что вам и написало"
]
Yakov K.
Вангую, что через некоторое время в сообществе Flutter-разработки случится такая же миграция с BLoC, как в свое время случилась в сообществе React-разработки с Redux на MobX
Timur M.
Ну так у тебя также Плюс минус state.counter.bind…
Timur M.
Т.е. количество кода не на порядок меньше
Yakov K.
Вы опустили BlocBuilder для кубита :) На порядок меньше
Timur M.
Это да Конструкция громоздкая
Yakov K.
[
"Кроме того, эвенты через ",
{
"type": "code",
"text": "() => context.read ().someEvent()"
},
" тоже довольно пухлая штука"
]
Timur M.
Ну это просто привязка к контексту так делается
Timur M.
Так весь флаттер сделан
Timur M.
Иначе контекст сломаешь
Yakov K.
Имхо тоже минус :) Я предпочитаю строго контролируемый сервис-локатор инжекшену через контекст
Timur M.
Ну тогда свой Фреймворк писать ))
Timur M.
Но чую получится тоже самое )
Alexandr Drobyshev
[
"попробуйте так\nList docs = ",
{
"type": "link",
"text": "snapshot.data.docs"
},
"; \n List mesdsag = ",
{
"type": "link",
"text": "docs.map"
},
">((dok) => ",
{
"type": "link",
"text": "dok.data"
},
"()[sendUserId]\n .map((doc) => Message(\n from: ",
{
"type": "link",
"text": "doc.data"
},
"()['date'],\n text: ",
{
"type": "link",
"text": "doc.data"
},
"()['text'],\n //me: ",
{
"type": "link",
"text": "widget.user.email"
},
" == ",
{
"type": "link",
"text": "doc.data"
},
"['from'],\n )).toList())\n .toList().expand((el) => el);\n\nили типа того"
]
Timur M.
Задача контекста хранить дерево виджетов всей апки Как без него?
Yakov K.
Почему? Это во флаттере прекрасно реализуется через get_it (он не имеет ничего общего с getX и создан абсолютно другим человеком) и один кастомный виджет-контроллер на 70 строк
Alexandr Drobyshev
то есть вы хотите типа [Message, Message, Message] а получаете [ [Message, Message, ...], [Message, ....] ]
Yakov K.
Не, я про стейт-объекты/сервисы :)
Timur M.
Ну стейт же привязан к контексту?
Over Pro
Я хотел получить индексы массива 24Е... Это получилось сделать только когда второй раз добавил map(), при первом получал только названия массивов. После этого появились ошибки тип dynamic is not subtype 'Widget', либо та ошибка которую описал выше, не знаю как привести эти типы к Widget, запутался совсем(((
Yakov K.
Совсем не обязательно
Timur M.
Тогда нужно пилить свой контроль контекста?
Yakov K.
Так нет же, зачем?
Yakov K.
Дeкаплинг сервис-объектов элементарно достижим сервис-локатором "на цепи"
Пашка
кто что использует для jwt аутентификации?
Timur M.
Нужно переварить Пойду налью под футбол )
Пашка
есть примерчики классной реализации?
Yakov K.
[
"Под сервис-локатором на цепи и виджетом-контроллером имею ввиду ",
{
"type": "text_link",
"text": "это",
"href": "http://github.com/purplenoodlesoop/msws_starter/blob/master/lib/widgets/shared/screen_widget.dart"
},
""
]
Alexandr Drobyshev
[
"я вам обяснил вроде уже все) не знаю как подробней, map прсото обход массива грубо говря list или что там у вас, вы перебираете каждый элемент\nдальше в него возвращаете Message - видимо ваш виджет\n\nи было так\nList var = ",
{
"type": "link",
"text": "list.map"
},
"( => Widget);\nТо етсь был лист чего то стал лист виджетов\n\nвы добавили внутри еще раз map\n\n",
{
"type": "link",
"text": "list.map"
},
"( => ",
{
"type": "link",
"text": "list.map"
},
"( => Widget))\nгде ",
{
"type": "link",
"text": "list.map"
},
"( => Widget) = LIST\nто есть стало\n\n",
{
"type": "link",
"text": "list.map"
},
"( => LIST)\n\nи вы получили не List а List>\n\nюзните как я показал expanded в коцне и думаю вы получите то что хотели"
]
Yakov K.
Спасибо и вам :)
Alexandr Drobyshev
или оберните в Column допутсим внутри еще
Alexandr Drobyshev
но тогда надо ее экспандед и геомр вообщем с ерской) и лишние ввычисления)
Маksиm
Я извиняюсь. Я в Флаттер новичек. Хочу узнать как можно в нем сделать приложение браузер со всеми разрешениями. Что были веб пуш и все остальное, работа с камерой и микрофоном. Мне это нужно для веб приложения. Если так возможно.
Yakov K.
на сегодняшний день Flutter это не лучший вариант для веба :(
Маksиm
А что лучше использовать?)
Alexandr Drobyshev
крутой вопрос) вам в двух словах расскзаать все о флаттер?) что вы ожидаете увидеть в ответ?)
Yakov K.
Вам не в этот чат :)
Yakov K.
От себя бы посоветовал Elm, но это плохой совет ??
Маksиm
Хочу сделать веб прогрессивнле прложение PWA
Alexandr Drobyshev
vue, react.js, angularjs если для спа и тд)) если для клевой индексации то сервер рендер) хоть длефи хоть пхп хоть что угодно) хоть то же что изначальнонаписал)
Yakov K.
Все движки уже парсят SPA так же как SSR :)
Maxim Gora
[
{
"type": "link",
"text": "context.select"
},
" же вроде есть, если я не ошибаюсь"
]
Over Pro
Благодарю вас, Александр, за помощь.
Yakov K.
Можно тыкнуть в доку, пожалуйста?
Maxim Gora
[
"‘’’",
{
"type": "bold",
"text": "final"
},
" isPositive = ",
{
"type": "link",
"text": "context.select"
},
"((CounterBloc b) => b.state >= 0);’’’"
]
Alexandr Drobyshev
я написал что не парсят? я лишь говрю что я не увидил доказателсьво того что ssr с кучей жс индексируется так же как html с минимум жс)
masuta
[
{
"type": "link",
"text": "https://t.me/c/э"
},
""
]
Alexandr Drobyshev
buildWhere? или я чего то не понял)
Yakov K.
А, тогда все не так плохо, спасибо!
Sidredin Agashirinoff
Как во флаттер получить список файлов в директории images (которая добавлена в ассеты)?
Урусай
Не индусы а декомпозиция )
Урусай
Они хранятся в файле AssetManifest.json, который можно прочитать с помощью rootBundle
Sidredin Agashirinoff
Спасибо большое! А как ты узнал об этом?
Sidredin Agashirinoff
[
"И ещё: нашёл класс AssetBundle ",
{
"type": "link",
"text": "https://api.flutter.dev/flutter/services/AssetBundle-class.html"
},
" Судя по названию, у него должны быть методы для получения списка ассетов"
]
Sidredin Agashirinoff
Спасибо ещё раз!
Alaa Barakat
I need solve this problem..?
Урусай
Они тебя преследуют
Alaa Barakat
I'm new to learning Where do I show information flutter doctor output ?
Урусай
Деньги за что? За знакомство?
Alaa Barakat
Does it have anything to do with the versions?
Alaa Barakat
do you mean this ?
Alaa Barakat
I'm a beginner and I haven't changed anything
Federico Manchinini
Подскажите плиз, а есть ли возможность во флаттере использовать концепт визуального проектирования расположения виджетов (элементов интерфейса), ну вот типа как в дельфях было, в winforms, в 1с и много где ещё? Чтоб не описывая вручную где какой виджет в иерархии виджетов, а типа просто покидал условно элементов на экран, а при необходимости среда сама шаблоны событий создаст (ну чтоб только обработчики написать и значения свойств). Для мобилок вообще подобный подход практикуется?
Alaa Barakat
The error Gradle sync failed : could not find gradle 4.1.0.jar
Урусай
Есть генераторы кода из всяких фигм, но там всё равно править руками приходится много
Alaa Barakat
How do I do that
Federico Manchinini
О, гляну эту херню, спасибо
Alaa Barakat
I am work in android studio
Alaa Barakat
Where do I open the terminal?
Alaa Barakat
In andeoid studio
Семён undefined
this group only for russian speaking run back thankyou
Yevhenii
Я пробовал, как по мне занимает времени даже больше чем писать, так же минусом что ты не изучаешь как работают виджеты, соответсвенно не развиваешься, ну и годится оно только для простых интерфейсов
Урусай
Кстати да, интересно как оно в скорости. Вёрстка кодом же довольно мало времени занимает сама по себе
Урусай
Особенно учитывая какая вёрстка во флаттере простая
Yevhenii
Как раз там очень долго выходит по факту, особенно когда количество виджетов растёт, начинаешь их перетаскивать по дереву и т.д. А я ещё и со стеком пробовал, так вообще жуть. В общем субъективное мнение, не стоит тратить на это время.
Yevhenii
Так же еще я пытался плагином из Фигмы дизайн конвертировать ))) тоже хотел быть хитрым ))) В итоге после этой конвертации я потратил больше времени чтобы привести код в порядок, чем если бы я это сделал сам
Семён undefined
ты попался на кликбейт
Yevhenii
В общем вывод сделал следующий, вместо того чтобы искать легкие пути (как я думал и оказался неправ ??), лучше тратить время на развитие, так как в процессе самостоятельной реализации приходит нужный опыт, даже если это сначала кажется сложным, долгим и непонятным
Yevhenii
Я ещё сам учусь, но чем больше делаешь сам, тем более понятно все становится.
???????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????
Всем привет, у меня вопрос. Есть список киношек в ListView, при нажатии на tile открывается новая страница с подробностями о киношке. У киношек есть жанры они могут быть, так и может их не быть. При переходе на экран с подробностями я передаю DocumentSnapshot и строю через ListView интерфейс, но возникла проблема, я хочу показывать несколько жанров пусть даже просто текстом в listview, но при создании в ListView еще ListView.build-ера у меня все пропадает. кто может подсказать как сделать построение жанров, с условием того что могут быть >=0 жанра у фильма, я просто совсем не догоняю? ????????
Denis Chuvasov
Listview внутри Listview не знает какого размера ему быть.
kalinovsky
Доброго времени суток, мужчины. Учу дарт/флаттер несколько месяцев с целью бросить свою складскую галеру. Хочу где-то в феврале попробовать собесы. Пишу приложения для небольших контор, два раза писал сайты, все на флаттере. До этого в it не работал, образования профильного нет. Хотел бы вкусить вашего опыта, так сказать. Что слышно по зп для джунов/мидлов, сложно ли найти работу (рб, Минск), какие подводные камни, кулсторис и тд. Очень интересно послушать)
Alex Wow
Во первых выучи матчасть Чтобы ты знал как нельзя ЗП меньше конечно чем для голэнг или раста ,но она есть )
***Eegor Balint***
Всем привет! Подскажите в каком порядке верстать эту страницу? Я в stack хочу ее закинуть, но как бы не делал, все ломается.
Temurxon
вы через positioned создаете ?
Temurxon
stack -> Positioned -> Ваши виджеты
***Eegor Balint***
Благодарю. Получается stack в самом начале, потом positioned и только потом все остальное, верно?
Mirshod
Добрый день. Можете взглянуть мой http post. Почему он даёт ошибку? В postman он работает
Iosif Futerman
Какую библиотеку используете?
Iosif Futerman
Кстати, если ожидается, что боди станет json, то это не факт. Лучше передавать строкой.
Mirshod
Спасибо, я нашёл ошибку.
Zoir I
всем привет) кто хочет вспомнить первые два-три дня знакомства с флаттером??? выдаёт ошибку, когда запускаю эмулятор (
Temurxon
а что logcat пишет ?
Temurxon
[
"случайно не это: android.content.res.Resources$NotFoundException: File res/drawable/launch_background.xml from drawable resource ID ",
{
"type": "hashtag",
"text": "#0x7f040000"
},
""
]
Vitaliy Snitko
При вводе в текстовое поле делаю проверку на уникальность вводимого значения. Если значение не уникально - делаю setState виджету и при обновлении отображаю у InputDecoration errorText. Но когда пересоздаётся TextField, его курсор появляется на нулевой позиции, а не в конце существующего слова. Как сделать, чтобы при пересоздании курсор переходил в позицию - конец слова, а не начало ?
Vitaliy Snitko
Отбой ) Нагуглил решение. Сейчас попробую.
Mitai
Мониторь дарт_джобс джунов ни кто брать не хочет всем нужны мидлы или синьеры
Blackprince
кто сталкивался с таким ?
Blackprince
не нагуглил никакого решения
Zoir I
ctrl+alt+shift+s (или 1 если не работает S) нажимаешь в окне выбираешь Tools и установить SDK разберёшься изи
Blackprince
Благодарю, щас попробую
Zoir I
если не поможет просто эту ошибку вбей выйдут ответы то что я написал один из вариантов
Blackprince
та ошибка ушла, все хорошо, но появилась новая
Blackprince
ну и вот такая вот тоже вылезает конкретно часто
Alexandr Drobyshev
подключите телефон) и не мучайтесь) эмулятор фигня)
Zoir I
как говорит и успокаивает один сенсей: —Ошибок нужен любить они нас делают лучше в начало пути ??
Zoir I
увы не знаю, как решить гугл в помощь
Семён undefined
попробуй антивирус вырубить
Zoir I
[
{
"type": "link",
"text": "https://flutteragency.com/how-to-fix-failed-to-load-emulator-in-flutter/"
}
]
Никита Масев
В диспетчере попробуй найти зависший эмулятор и дропнуть его
Никита Масев
Ещё можешь попробовать запустить студию изначально из под админа
Jamshed Rakhmonov
ребят как сделать чтобы видео отрывалось во весь экран в flutter_html
Blackprince
Спасибо всем за советы ща буду пробовать
Tagir
как добавить картинку в область SafeArea тоже?
Comrade77
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/SliverAppBar-class.html"
}
]
Урусай
Убрать SafeArea )))
Nikita Kanunov
Здравствуйте, а как давно Column подстраивает свою ширину относительно вложенных виджетов?
Maksim
Сделал анимация открытия страница по докам flutter, но не работают свайпы назад, которые определяет MaterialPageRoute. Есть ли другой способ?
David
Возможно в диспетчере задач висит процесс. Сними его, либо перезагрузит компьютер
Vladimir ?
как грамотно реализовать обновление страницы при перетягивании её вниз? (как во многих приложениях сделано)
Konstantin Zhernosenko
[
"Ребят, чот я прям не догоняю, чяднт\nВ ответ получаю ",
{
"type": "code",
"text": "type 'List ' is not a subtype of type 'List
Konstantin Zhernosenko
на последней строке
d
Какой тип у _questionIdx?
Konstantin Zhernosenko
[
{
"type": "pre",
"text": " var _questionIdx = 0;",
"language": ""
}
]
Konstantin Zhernosenko
такое ощущение, что какие-то скобки пропустил, на 10 раз уже проверил
Konstantin Zhernosenko
вот и я подвис с этим(
d
кажется что проблема не в этом файле
Konstantin Zhernosenko
Ну вот весь проект
d
хз, я запустил Ваш проект, у меня все работает
d
никаких ошибок не вылетает
Konstantin Zhernosenko
нашел в чем дело
Konstantin Zhernosenko
если не вылетает, то наверное дарт не свежий
d
[
"ну помимо всего этого, пытайтесь немного декомпозировать такие конструкции \n\n\n",
{
"type": "code",
"text": "...(_questions[_questionIdx]['answers'] as List ).map((answer) {\n return Answer(_answerQuestion, answer);\n}).toList()"
},
"\n\n\nв какие-то сторонние переменные и методы, тк это очень тяжело воспринимается"
]
Konstantin Zhernosenko
Было: String s = (_questions[_questionIdx]['question'] as String); Нужно: String s = (_questions[_questionIdx]['question']) as String;
Konstantin Zhernosenko
ну и "конструкцию" декомпозировать в том же ключе
d
тут вообще скобки не нужны
Konstantin Zhernosenko
синтаксис приведения типов изменился
Konstantin Zhernosenko
да, я их там оставил для показательности
d
что-то не совсем это понял
Konstantin Zhernosenko
[
{
"type": "pre",
"text": "...((_questions[_questionIdx]['answers']) as List ).map((answer)",
"language": ""
}
]
d
это 2 идентичных по результату выражения
Konstantin Zhernosenko
вот так конструкция должна терь выглядеть
Konstantin Zhernosenko
...(_questions[_questionIdx]['answers'] as List ).map((answer) - ошибка
Konstantin Zhernosenko
(_questions[_questionIdx]['answers']) as List ) пытается привести _questions к листу
Мirshod
[
"Ребята у меня не вызывает add(HunterSignUpEvent.initial()), Что нужно делать? \n ",
{
"type": "code",
"text": "BlocProvider (create: (_) =>HunterSignUpBloc() ..add(HunterSignUpEvent.initial()),child: SearcherRole(),)"
},
""
]
Radomir Epur
И как ты это понял? Может провблема не в том, что эвент в блок не отправляется и/или он не обрабатывается, а в том что из блока новый стэйт не отправляется?
d
все нормально работает, Вы уверены, что проблема в этом?
d
переменные аналогичны Вашим
Konstantin Zhernosenko
а какая версия дарта, просто у меня тоже раньше не было таких проблем
d
ну это дартпад под null safety
Мirshod
Я проверил с print внутри евента. Он тоже не читает.
d
попробуйте убрать lazy (т.е. `lazy: false`), возможно это поможет но вообще в create добавлять ивент это костыль, по идее
Konstantin Zhernosenko
честно, тогда я хз... мне вот это добавление двух скобок помогло
Konstantin Zhernosenko
без них - ошибка приведения типа
Мirshod
Пробовал. Не работает
Radomir Epur
[
"Может билд не вызывается и блок вообще не создается?(конечно, смелое предположение, но вдруг). Проверь. Если создается, тогда скинь код блока.\n\n",
{
"type": "code",
"text": "BlocProvider (create: (_) {\nprint('Creating bloc');\nreturn HunterSignUpBloc()..add(HunterSignUpEvent.initial());},child: SearcherRole(),)"
},
""
]
Mirshod
Думаю нет здесь никаких ошибок.
Mirshod
Он стоял на initialState
Radomir Epur
[
{
"type": "code",
"text": "mapEventToState"
},
" ничего не возвращает"
]
Mirshod
Понял спасибо ????
Mirshod
Не поставил yield*...
Radomir Epur
[
"Подруби анализатор, он бы тебе подсказал что метод ",
{
"type": "code",
"text": "mapEventToState"
},
" должен вернуть стрим, но он ничего не возвращает."
]
Radomir Epur
[
"В смысле ",
{
"type": "code",
"text": "yield*"
},
"? Там простой ",
{
"type": "code",
"text": "return"
},
""
]
Mirshod
mapEventState нужно поставить yield * чтобы отреагировал.
Vladimir ?
Что делать с SplashScreen not support null safety? Есть какое то грамотное решение?
Radomir Epur
А, ну да, конкретно в твоем случае так. Я просто привык делать немного по-другому.
Maxim Chernyshov
Запустить с флагом unsound null safety
Nikita Kanunov
[
"Здравствуйте, правильно ли я понимаю, что с добавлением в Dart null safety ",
{
"type": "mention",
"text": "@required"
},
" превратился просто в required?"
]
Miller777
Подскажите, раньше в VSCode Widget Inspector открывался в браузере. Теперь он открывается в окне VSCode. На маленьком экране ноутбука это не очень удобно. Как либо принудительно открыть его, как и раньше, в браузере, либо вытащить отдельно окно VSCode с Widget Inspector на другой монитор?
Даниил Кокорин
Можно потащить за вкладку?
Miller777
Чтобы код отдельно, инспектор - отдельно
Miller777
В том и проблема, не могу отдельную вкладку перетащить на другой монитор.
Miller777
Переключаться между вкладками - не очень удобно
Miller777
Можно как-то в браузере открыть, по старому?
Урусай
Во вкладке run кнопка open dev tools
|