Программирование : Dart & Flutter по-русски
Vladimir Ivanov
хех, второй экзампл рабочий!
Sergey Salnikov
я про отладку ни слова не писал, я вижу что ты не понял что такое ребилд
L
Можно просто использовать bloc и всё делать stateless, а на отдельные элементы вешать valuelistenablebuilder
Fearless Cry
зависит от того как вызывается фьюча
Sergey Salnikov
про инстанс фьючи разговора не было
Fearless Cry
она может на каждый билд вызываться - отсюда и “не работает”
L
[
{
"type": "link",
"text": "https://twitter.com/remi_rousselet/status/1207786221860278272?s=21"
}
]
Sergey Salnikov
вопрос стоял можно ли использовать FutureBuilder в stles
Sergey Salnikov
это только про ребилд дерева но не хранение стейта добавлю стейт - это контроллеры(анимации и другие), фьючи, подписка на стримы, какие либо ваши мутабельные данные
L
Ну стейт хранится в bloc
L
Анимации я без стейта делаю через AnimatedOpacity например
Sergey Salnikov
я чуток расширено ответил для тех кто плавает в вопросе)
Sergey Salnikov
ну и если нужен Ticker, то через в stful mixin добавлять есть и другие варианты
D T
Всем привет, столкнулся с такой проблемой: 1. Открыто мое флаттер приложение. 2. Сворачиваю его и начинаю что-то вводить в поиске гугла, чтобы появилась клавиатура виртуальная (ключевой момент - появление клавиатуры) 3. Возвращаюсь в свое приложение и клавиатура на одно мгновение появляется и ищезает, так как в моем приложении она не должна быть открыта. Подскажите, что гуглить, как чинить? На андроиде просто видно легкое мигание экрана, а на иосе прям заметно, как открылась клава и закрылась.
Аtaй
Есть ли правила во всем этом, стандарты? Или каждый делает как хочет? То что я читал: Стетлес создаётся один раз и не хранит данные о конфигурации. А стейтфул хранит данные о конфигурации и может их менять при помощи разных функций и был приведен пример таймлайна стейтфула с инитстейт до диспоза. Может я что не так понял был даже в этом? Был бы рад за пояснения
Sergey Salnikov
прошу, почитайте в первую очередь документацию сложно пересказывать доку по основам
Аtaй
Может не так понимаю? Стетлес на раз билд сразу финальный
Аtaй
А стейтфул можно менять и он заного билдится
Michael Bazilique
[
{
"type": "mention",
"text": "@Regingman"
},
" да. в stful ты можешь менять стейт"
]
Michael Bazilique
и форсить ребилд виджета
Павел Середа
а что значит менять? Менять данные внутри элемента? Типа набрасываем поле для ввода текста и... ?
Аtaй
Т.е. все элементы на экране впринципе стетлесы? А в стейтфулах просто хранится о них информация и при желании меняется?
Аtaй
Сорь если кого-то напрягаю, но это помогло бы мне усвоить быстрее. Спасибо вам за ответы!
Maxim Gora
Стейтлес создается один раз и больше не меняется, стейтфул в свою очередь может повторно вызвать у себя метод build.
Павел Середа
как пощупать, на что влияет вызов этого метода? как его вызвать? как стриггерить рантайм его вызвать? Ну и главный вопрос: почему в официальном семпле FutureBuilder вызывается из Statefull виджета а не Stateless?
Oleg Pchelkin
setState триггерит его. Ни и если он с родительских виджетов должен ребилдиться. На build особо не закладывайся, он может в случайный момент сработать, лучше почитай про стейт менеджмент во flutter Начни с Provider например
Павел Середа
ну вот вы пишете про setState а я ничего непонимаю, что за setState ещё? Это некий общепринятый метод? Он приватный или публичный?
Аtaй
Жизненный цикл стейтфула
Michael Bazilique
[
{
"type": "mention",
"text": "@Regingman"
},
" можешь скинуть сорс книги?"
]
Павел Середа
а где такой же но про Stateless виджет?
Michael Bazilique
[
{
"type": "mention",
"text": "@Regingman"
},
" благодарю"
]
Vladimir Ivanov
насколько я понимаю, просто не получится FutureBuilder в stateless использовать
Аtaй
У него нету цикла он просто билдится сразу
Oleg Pchelkin
[
"Ну так погугли \nОф доку почитай\n",
{
"type": "link",
"text": "https://flutter.dev/docs/development/ui/interactive"
},
""
]
Аtaй
[
"Beginning Flutter a hands on guide to app development by Napoli, Marco L - 2020 ",
{
"type": "hashtag",
"text": "#Flutter"
},
" ",
{
"type": "hashtag",
"text": "#english"
}
]
Аtaй
[
{
"type": "mention",
"text": "@bazmikel"
}
]
Michael Bazilique
[
{
"type": "mention",
"text": "@Regingman"
},
" благодарю. Надеюсь ты не нарушил никаких правил"
]
Maxim Gora
получится, так как FutureBuilder - сам по себе стейтфул виджет, и от дерева выше не зависит
Vladimir Ivanov
ссылку на дартпад, плиз
Vladimir Ivanov
там же фьючу надо сохранять в филд
Fearless Cry
В чем связь вообще?
Vladimir Ivanov
не понял, а как вы результат будете использовать?
Fearless Cry
Затем что при каждом билде она будет вызываться
Vladimir Ivanov
я поэтому и прошу ссылку на пример, в котором вы испльзуете FutureBuilder в стейтлесс виджете
Павел Середа
в какой момент дёргается билд? Он рантаймом дёргается или из каких-то добавленных виджетов?
Maxim Gora
В том что когда изменяется состояние фьючи, обновляется все что в билдере FutureBuilder'а, но не вызывается билд дочернего виджета
Павел Середа
вово мне тоже интересно, как они результатом воспользуются
Oleg
[
"Всем привет, как можно PNG с прозрачным фоном сделать белым? \nImage.memory(byte.",
{
"type": "bold",
"text": "buffer"
},
".asUint8List(), color: Colors.",
{
"type": "italic",
"text": "white"
},
") Так не работает"
]
Oleg Pchelkin
А если в филд записать, то что будет? или в филд записать результат фьючи?
Maxim Gora
в билдер FutureBuildera приходит результат вашей фьючи
Fearless Cry
Вот у вас есть метод doSmth() async Если вы будете вызывать его каждый билд - это будут новые фьючи
Vladimir Ivanov
можно пример пожалуйста?
Fearless Cry
А значит на каждый ребилд у вас будет ожидание новой фьючи
Fearless Cry
Не раз в этом чате уже писали с такими проблемами
Vladimir Ivanov
во FutureBuilder надо скормить Future
Vladimir Ivanov
если у вас Stateless, то вы можете это сделать только в build(), что приведет к вызову Future КАЖДЫЙ раз, когда рисуется ваш виджет
Vladimir Ivanov
что конечно абсолютно недопустимо
Oleg Pchelkin
это не значит что этого нельзя сделать Хранение данных должно быть не на уровне виджета. Если у меня фьюча смотрит в репозиторий, то я вызову его и в первый раз он запросит данные с сервера/бд асинхронно. А дальше будет возвращать кешированное значение. И в чем тут трабл новой фьючи вместо использования старой?
Fearless Cry
Если фьюча является вызовом метода*
Fearless Cry
Ну примерно в том что это херь
Vladimir Ivanov
кроме перформанс хита?
Fearless Cry
Вы привязываете это к циклу ребилда дерева
Vladimir Ivanov
померяйте на досуге, скажите сколько у вас FPS
Fearless Cry
Данные должны актуализироваться когда они изменились а не когда клавиатура открылась
Oleg Pchelkin
где будет проседание перформанса? что берешь данные из филда виджета, что из кеша репозитория?
Павел Середа
семпл со stateless + FutureBuilder, где stateless использует данные из FB покажете?
Vladimir Ivanov
фьючу создай, в другой слой сходи, результат верни
Vladimir Ivanov
зачем только Флаттер команда над оптимизацией бьется
Oleg Pchelkin
Поэтому надо использовать стейт менеджмент какойнить, хотя бы провайдер, а не данные в виджете хранить, ну)
Vladimir Ivanov
это все ненужные вам операции
Vladimir Ivanov
мне просто интересно, насколько FPS падает
Vladimir Ivanov
на 1 или на 20
Oleg Pchelkin
ну на создание фьючи сколько времени уйдет? меньше миллисекунды? ФПС посчитаешь сам?
Vladimir Ivanov
я не знаю, поэтому и спрашиваю
Oleg Pchelkin
Как соотносится включение камеры и FutureBuilder?
Vladimir Ivanov
сделаете бенчмарк?
Oleg Pchelkin
Ты мне тут про проседание на 20FPS рассказываешь, ты и приводи)
Michael Bazilique
вот это тут директора собрались
Oleg Pchelkin
Ну во первых, я нигде не говорил что это надо делать всегда и везде. Я просто говорю о физической возможности это сделать и не просесть в производительности в каких то случаях
Andrew Ka
[
{
"type": "link",
"text": "https://youtu.be/uWlD5pVHkcY"
}
]
Oleg Pchelkin
Один Андрей сидит и чет делает, остальные холиварят за FPS)
Oleg Pchelkin
А вы фьючу с камеры в поле виджета записываете? Искренне интересуюсь, сам с камерой не работал во флаттере пока
Maxim Gora
Тот же flutter_bloc замечательно работает с любой асинхронностью ??
KeepOnSmiling ??
Как там поддержка Flutter For Web? Улучшается? Вижу, что всё ещё в бете. Как думаете, есть шансы свергнуть React на вебе?
Pavel Bordunos
всем приветы есть кто юзает связку Flutter + gRPC ?
Oleg Pchelkin
[
{
"type": "link",
"text": "dartpad.dev/5c75a5862833f12744b2d901ab500378"
},
"\nВ курсе, что пример уродский, но речь о возможности запуска.\nНикто не запрещает внутри стейтлеса делать стейтфул фиджет, все зависит от ваших задач и визуала"
]
Maxim Gora
Желательно добавить проверку на snapshot.hasData
Maxim Gora
И показать прелоадер)
Oleg Pchelkin
Ну там вообще не про то речь была) а в целом про то можно ли внутри стейтлеса делать фьючебилдер)
Maxim Gora
Ну я просто к слову, проверка всё таки нужна, ибо будет ошибка если фьюча не успеет завершиться
Sergey Salnikov
Продолжайте свои беседы начального уровня без упоминания меня
Vladimir Ivanov
ну да, проблема тут в том, что Future вызывается каждый раз, а так да, возможно
Sergey Hottabych
В примере ошибка. build метод должен быть чистым (без сайд-эффектов). Вызов getCount() нужно делать в initState, сохранять в state-переменную и подставлять ее в FutureBuilder. Только так.
Sergey Hottabych
Есть мнение, что без Stateful тут никак.
Oleg Pchelkin
пример билдится и выводит ожидаемый результат = нет ошибки
Sergey Hottabych
Ошибка есть, но она незаметная. Представь, что у тебя getCount делает запрос к серверу или лезет в базу данных. Тогда при каждом ребилде виджета, у тебя будет лишний запрос к серверу. А виджет ребилдится не всегда, когда ты ему прикажешь. Он ребилдится при открытии клавиатуры, анимациях, изменении размеров экрана (в вебе) и ещё куче ситуаций.
Oleg Pchelkin
Я не говорю что это хороший способ - я говорю что это рабочий способ, если знаешь что делаешь. В написанном мной примере ошибки нет и смысла использовать стейтфул тоже, т.к. результат фьючи будет сразу возвращаться. Я не призываю так делать, просто не надо говорить что невозможно запускать futureBuilder в стейтлесе - futurebuilder сам по себе виджет и ты можешь поместить его куда угодно
Maxim Gora
Ну на крайний случай использовать конструктор
Maxim Gora
Хотя когда то краем глаза видел что это плохая практика, но возможно я с чём то попутал
Pavel Vasilenko
Всем привет. Никто не сталкивался с такой проблемой - в процессе кодинга обратил внимание, что полностью перестала работать системная кнопка назад? Ни какие WillPopScope не используются, обычный MaterialApp... Что ещё может влиять на работу этой кнопки? Во Flutter Demo App тоже самое... Единственное, это недавно обновлял флаттер ??
Pavel Vasilenko
Всем спасибо. Очередное обновление флаттера решило проблему.
Олжас Сулеймен
о сезон вопросов от новичков ответы которой есть в доке
Faust L
господа, вопрос, а как-то можно выполнить питон скрипт с флуттера или дарта и в ответ получить результат, например нужно чтобы формулы для расчета каких-то значений писать
Pavel Vasilenko
Это кому?
Олжас Сулеймен
футура в доках расписанна, что, где, как и почему
Олжас Сулеймен
зачем стейт и стейтлесс
Kirill Aparin
[
"Кто знает что не так? один svg нормально работает, а вот с другим ошибки\n",
{
"type": "pre",
"text": "The following assertion was thrown in _getDefinitionPaint:\nFailed to find definition for url(#paint0_linear)\n\nThis library only supports and xlink:href references that are defined ahead of their references.\n\nThis error can be caused when the desired definition is defined after the element referring to it (e.g. at the end of the file), or defined in another file.\n\nThis error is treated as non-fatal, but your SVG file will likely not render as intended\n====================================================================================================\n\n======== Exception caught by SVG ===================================================================\nFailed to find definition for url(#paint1_linear)",
"language": ""
},
""
]
Denis Bystruev
[
"Вот этот пакет утверждает, что он это умеет:\n\n",
{
"type": "link",
"text": "https://pub.dev/packages/starflut"
},
"\n\nПопробуйте, отпишитесь потом, правда это, или нет."
]
neikist
[
"На десктопе? ",
{
"type": "link",
"text": "Process.run"
},
", или как то так."
]
Faust L
ну через дарт), я чисто пока теоритически выбираю платформу для будущего кроссплатформенного проекта там и десктоп и мобилки в приоритете, а если веб то вообще кошерно
neikist
Ну в вебе вы уж точно питон не запустите. Да и на мобилках не так просто будет на любом фреймворке
Sergey Hottabych
Не получится. При каждом ребилде вызывается конструктор. Каждый раз будет новый вызов.
Yurii
а подскажите плиз плагины для кастомизации чекбоксов, если таковы имеются конечно
Maxim Gora
при каждом ребилде если это дочерний виджет
Sergey Hottabych
Я пишу, что нужно делать вызовы к серверу и т.п. и сохранять Future в initState. Ты говоришь, что можно это делать в конструкторе. Я говорю, что нет, потому что конструктор при каждом ребилде вызывается. При чем тут дочерние виджеты?
Maxim Gora
Ну понятно что он будет выываться при каждом ребилде, я просто назвал один из вариантов. Но некоторые так скажем лейауты можно делать стейтлесс
Maxim Gora
потому что они ребилдиться не будут
Maxim Gora
но согласен с тем что лучше конечно просто использовать statefull)
Maxim Gora
либо сторонние стейтменеджемнт решения С:
Sergey Hottabych
Мы обсуждаем FutureBuilder. Я выше перечислил массу вариантов, когда stless может ребилдится. Поэтому в конструкторе никак нельзя инициализировать Future для него.
Andrey Derkach
вы сталкивались с тем, когда вызываешь Navigator.pop происходит ребилд текущего виджета (StatelessWidget) ?
neikist
По моему не раз тут про это уже читал
neikist
Вроде как нормальное поведение
Andrey Derkach
реально нормальное? А зачем виджет перерисовывать который собираешься убить
neikist
Ну не факт что перерисовывает, скорее просто перебилдивает. Мало ли, может для анимаций перехода ему для служебных целей нужно, может еще чего
Andrey Derkach
[
"нашёл похожий баг ",
{
"type": "link",
"text": "https://github.com/flutter/flutter/issues/18366"
},
" , но решения пока вижу"
]
Rauan Maksatuly ?
Привет всем! Кто нибудь может помочь мне пожалуйста. cloud_firestore выдает следующую ошибку при билде на ios.
Олжас Сулеймен
если запускать формулы и ограничится коробкой то есть варианты
Andrew Ka
[
{
"type": "link",
"text": "https://youtu.be/7m49bh7BNF8"
}
]
KeepOnSmiling ??
Как можно установить пакет из гитхаба в флаттер-проект? Вариант через dependencies в pubspec, но мне beta-ветка нужна....
Олжас Сулеймен
[
"dependencies:\n kittens:\n git:\n url: ",
{
"type": "email",
"text": "git@github.com"
},
":munificent/kittens.git\n ref: some-branch\n?"
]
KeepOnSmiling ??
Спасибо!
KeepOnSmiling ??
[
"Требуется ли всё ещё добавлять \n",
{
"type": "pre",
"text": "WidgetsFlutterBinding.ensureInitialized();",
"language": ""
},
"\nв void main() или пофиксили уже?"
]
CrazyAlarmClock
Ребят , при сборке билда на андройде - приложение устанавливается , но его нельзя открыть и найти в меню приложений. Кто нибудь знает почему так ?
Slava Slavajun
[
{
"type": "link",
"text": "https://dartpad.dartlang.org"
},
"\n\nпочему bottom navigation белый?"
]
vasilich
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/49307858/style-bottomnavigationbar-in-flutter"
}
]
vasilich
не стесняйтесь гуглить)
Silent Bezmolvny
Йоу, поч книги не переводятся на русский язык по флаттеру и дарту?
Дмитрий Костин
потому что пока переведешь, пока напечатаешь большая часть может устареть, особенно когда технология на стадии становления
Дмитрий Костин
ютуб в этом плане помогает
Silent Bezmolvny
каким образом
Дмитрий Костин
каким образом книги помогают?
Silent Bezmolvny
в контексте затронутого вопроса твое последнее предложение по идее должно было означать, что полный дефицит книг на русском языке по соответствующей технологии восполняется уроками на русском языке из ютуба. Так вот, там максимум пару видео. И я спрашиваю, каким образом это могло бы помочь
Дмитрий Костин
пару уроков? плохо ищете
les forest
Потому что надо язык учить. Ну ты понял какой.
les forest
Либо написать свой кириллический фреймворк
Yerassyl Maikhanov
потому что flutter изменятся очень быстро, недавно они один виджет в mixin переделали и порушили кучу виджетов, последние в спешке обновление делали
Yerassyl Maikhanov
йопта скрипт
les forest
Ну ладно тебе.
Yerassyl Maikhanov
ну смотри какой он четкий, а js не четкий
les forest
Это какой то брейнфак
Дмитрий Костин
может нужно изучать английский раз в разработку идешь? я сам с ним не особо дружу, на ютубе титры с переводом, в гугле переводчик но надеяться на перевод книг не стоит, их нет нормальных ни по одной технологии
les forest
Там чуть выше было мое саркастическое сообщение
les forest
Не будет переводов актуальных ребят. Не ждите)
les forest
Только с молитвой, трудом и терпением)
Andrey Derkach
Попробуй вручную удалить через adb. Такое часто бывает на Xiaomi
CrazyAlarmClock
Да тут от манифеста зависит похоже , у меня косячный , а у коллеги нет , его сборки нормальные
Andrey Derkach
если у вас одинаковый манифест и у него работает, значит проблема не в манифесте
CrazyAlarmClock
Просто после моих правок в манифесте - его сборки тоже сломались ))
Шахзод Джураев
В чем может быть дело ?
Andrey Derkach
Там должна быть активити с intent-filter launcher
Andrew Ka
[
{
"type": "link",
"text": "https://youtu.be/l3loxFXaCdU"
}
]
Mansur Panzerkampfwagen IV
Если в первом коде делать RepositoryProvider, то во втором этот ArticleSearchDao возвращается корректно, но если сделать MultipleRepositoryProvider (как на скрине), то provider.of возвращает null. Что я делаю не так? Скрин ниже это Stateful widget
Pavel Pimenov
Возможно, проблема в том, что в момент инициализации ArticleSearchDao в snapshot ещё не пришли данные?
Pavel Pimenov
Я бы попробовал возвращать какой-нибудь индикатор загрузки, если !snapshot.hasData
KeepOnSmiling ??
Кто знает, как рендерная система работает внутри флаттера? Она 60 раз в секунду обновляет/перерисовывает даже не изменяющийся экран или как-то умнее обрабатывает это? Или может иначе просто невозможно? Копаюсь в сорсах, но пока не очень понятно
Урусай
Ну, профайлер по крайней мере не обновляет стату если ничего на экране не происходит )
Andrew Ka
[
{
"type": "link",
"text": "https://youtu.be/ED7WhmLLMxM"
}
]
Combot
Total messages: 228622
Daniil Artamonov
Всем привет. Я реализовал SplashScreen через windowBackround. Иконка - это векторное изображение. Но при запуске размер иконки меняется. Как это исправить?
ldm;
а почему панель уведомлений перекрасилась в черный?
ldm;
может какой-то фоновый запуск
ldm;
или, я не шарю, ты где-то значение НОЛЬ не указал как в css & html чтобы при чего-то размер не менялся. p.s. всё что я написал - глупость)
Арсений Калиниченко
Подскажите, пожалуйста, как создать action в гитхабе для билда проекта на флаттере, чтобы проверять коммиты в мастере. Сейчас я попытался использовать стандартный Android CI, но он крашится. Не могу найти никаких мануалов, если кто-то знает, то подскажите)
Арсений Калиниченко
Но есть мануалы для gitlab, там вроде fridge используется
Vladimir
Добрый день, подскажите такую штуку. Сделал проект под мобилку , а дизайн на сайте идентичный и хотелось бы еще на флаттере сделать веб фронт , но для веба нужно менять же ветку на бету и по итогу нужно будет менять ветки каждый раз когда я собираю под мобилки на stable , а когда буду разрабатывать под веб на бетку ? или лучше веб часть отдельным проектом сделать ?
Константин Федуров
Добрый день)ну верстка под веб будет в любом случае немного отличаться, так что создать отдельный проект мне кажется хорошей идеей)
NewBalanceM5
все зависит только от тебя
Артем ??
это очень странный вопрос) зависит от стэка технологий, который тебе известен сейчас и в целом твоей обучаемости. однако чтобы начать писать простые приложения слишком много усилий не потребуется
Ulugbek Usmanov
[
"Ulugbek., [25.07.20 14:09]\n",
{
"type": "pre",
"text": "import 'package:flutter/material.dart';\nimport 'package:musaffomarket/pages/auth/auth.dart';\nimport 'package:musaffomarket/pages/home/home.dart';\nimport 'package:shared_preferences/shared_preferences.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n String token;\n\n check_token() async {\n SharedPreferences prefs = await SharedPreferences.getInstance();\n token = (prefs.getString('token'));\n print(token);\n }\n\n @override\n Widget build(BuildContext context) {\n check_token();\n print(token);\n return MaterialApp(\n debugShowCheckedModeBanner: false,\n title: \"M\",\n theme: ThemeData(\n primaryColor: Color.fromRGBO(50, 65, 85, 1),\n textTheme: TextTheme(title: TextStyle(color: Colors.white))),\n home: Scaffold(\n body: token != null ? HomePage() : AuthorizationPage(),\n ),\n );\n }\n}",
"language": ""
}
]
Ulugbek Usmanov
это правильный способ? если User есть HomePage если нет AuthorizatinPage
Олжас Сулеймен
а не проще ли получать токен до вызова runApp? или отображать сплеш уже в МатериалАпе чтобы она уже была проинициализирована пока идет запрос токена
Bekzat
Привет всем!!! как можно это сделать? кто знает?
NewBalanceM5
[
{
"type": "link",
"text": "https://t.me/FlutterDevRu/196"
}
]
Kirill Aparin
как сделать такой контур?
DVS (Read The F.ng Manual) Studio (NoHello)
CustomPainter и/или CustomClipper
Andrey Tsvetkov
[
{
"type": "link",
"text": "https://pub.dev/packages/dotted_border"
}
]
Andrey Tsvetkov
если добавить жЫрности, то последние скрины вполне похожи
Silent Bezmolvny
Есть добровольцы. готовые поучаствовать в переводе несколько книг по дарту и флаттеру через гугл транслейт? Надо вручную вставлять абзацы. при целом переводе документа качество перевода очень страдает. Разделим книгу на равные части и быстро переведем. В команде двое уже есть
Silent Bezmolvny
Эй ты, потенциальный доброволец, измени свою жизнь здесь и сейчас. Жить бесцельно или умереть, сражаясь против лени?
|