Программирование : Dart & Flutter по-русски
Fearless Cry
она не детерминированная
Артем Зайцев
то есть достаточно пнуть юзера, сказать что есть новая версия, мол качай и обновляйся, даже не нужно удалять старую? Все, условно, хранимые данные внутри, например логин в shared_preferences будут также доступны и будет магия?
Nikita Domnitskii
При одинаковых инпутах возвращается одинаковая монада. Где она не детерминированная?
Roman Vasiliev
всегда так было
Roman Vasiliev
Можно скачать за юзера и предложить установить
Roman Vasiliev
И запретить пользоваться старой версией, если обнаружена новая, если есть такое желание
Артем Зайцев
ну я уже так и сделал, запрещаю, но как обновлять по человечески пока не придумал. В мобильной разработке буквально меньше месяца
Roman Vasiliev
Но через маркет лучше не запрещать, а то камнями закидают)
Деда
Никто не сталкивался?
Oleg Pchelkin
Можно предупреждать что есть версия новее, а начиная с версии -2 от текущей - запрещать))
Roman Vasiliev
Можно делать как вк - просто настырно предлагать обновиться)
Деда
У меня в виджете и AppBar и SliverAppBar, и такое ощущение что именно SliverAppBar даёт отступ, минимальная высота как будто у него есть, но в свойствах ничего не нашёл.
Nikita Domnitskii
Покажи код лучше, так не особо понятно
Деда
[
{
"type": "link",
"text": "https://pastebin.com/w3JXdyma"
}
]
Avada Kedavra
Если у меня есть например Chip с текстом размером например 16, при этом на моем экране он точно влазит без обрезаний в SizedBox например 30 можно ли гарантировать что на всех размерах экрана, соотношение между ними будет сохраняться? (цифры просто для примера)
Nikita Domnitskii
[
"Убери ",
{
"type": "code",
"text": "pinned"
},
" у ",
{
"type": "code",
"text": "SliverAppBar"
},
""
]
Деда
Тогда не будет схлопываться
Nikita Domnitskii
Ну так он у тебя белый и висит
Деда
Если сделать pinned: false, то шапка с фотографией не будет прятаться и будет занимать на маленьких телефонах больше половины экрана
Деда
Сейчас на видео требуемое поведение за исключением этого отступа примерно в 50 пикселей
Nikita Domnitskii
[
"Попробуй ",
{
"type": "code",
"text": "SliverPersistentHeader"
},
" поковырять"
]
Деда
Ещё бы понять как выглядит все это в коде )
Nikita Domnitskii
[
{
"type": "code",
"text": "SliverAppBar"
},
" как раз через него сделан"
]
Fearless Cry
Там постоянно пробелмы с этим нестедом
Fearless Cry
особенно плохо выглядит когда во внутреннем скролле мало элементов
Almas Tanayev
Можно ли форграунд сервисы привязать к стриму?
Dmitriy Ferrum
Здравствуйте. Такой вопрос: как осуществить проверку роли пользователя в Firebase, при использовании signInWithEmailAndPassword?
Деда
Да я в flutter вторую неделю, не все элементы понятны до конца как сделать
Fearless Cry
EventChannel в помосч
Almas Tanayev
Сейчас посмотрю, спасибо)
Деда
Есть такое ощущение что не он нужен а какой то родительский
Nikita Domnitskii
Ну вот смотри в сторону персистент хэдера
Nikita Domnitskii
Там в делегате можно сделать как тебе нужно
Fearless Cry
да там всё то же самое что в слайвер апп баре
Fearless Cry
просто билд свой
Fearless Cry
посмотри в доку к нестеду лучше, как они хендлят это
Fearless Cry
вообще там у нестеда скоро обнова должна прийти
Dmitriy Ferrum
Логинюсь вот так. Просто не получается впихнуть туда проверку роли. Как не крутил, а получаю null.
Степан Бежук
Может кто знает как сделать выполнения того кода где принтитса 1 первым
Avada Kedavra
listen же асинхронно всегда, всегда сработает после оссновного кода
Степан Бежук
А как сделать синхрронное выполнения ??
Avada Kedavra
никак, это асинхронный оператор, так же как и future
Степан Бежук
Окей, если я просто буду вертать пройстой String и уберу listen должно заработать ? Верно ?
Avada Kedavra
если стрима не будет то да
Степан Бежук
List () Вот такой список верну, но тут вопрос, эта штука тоже асинхронно работает
Avada Kedavra
любая работа со стримами асинхронна
Степан Бежук
Ну да, но как же забрать данные перед отрисовкой ??
Avada Kedavra
никак, отрисовка должна быть асинхронной или сделать поле, которое сразу имеет значение и его забирать
Sergey Hottabych
Зачем так странно делать? Почему не через StreamBuilder?
Степан Бежук
Ну я в flutter не оч, читал об StreamBuilder но он не то же самое делает что и PublishSubject ??
Dmitriy Orteney
Так там при ребилдах будут новые подписки же?
Avada Kedavra
это виджет который подписывается на стрим и при получении новых данных перерисовывает себя
Степан Бежук
Я так понимаю здесь надо его прописать да ?
Avada Kedavra
т.е. им оборачиваешь те виджеты, которые зависят от данных из стрима
Степан Бежук
Кажетса понял, trigger надо загорнуть в билдер
Avada Kedavra
я не знаю просто что такое RenderCards до такого не дошел еще)
Степан Бежук
Эт мой клас ))
Степан Бежук
А stream: эт что у тебя ?
Avada Kedavra
это ссылка на стрим как раз
Avada Kedavra
[
{
"type": "link",
"text": "subject.stream"
},
" у тебя"
]
Sergey Hottabych
тебе в 99% случаев listen не нужен тебе нужно выходной стрим заправить в StreamBuilder
Степан Бежук
Понял, спасибо
Avada Kedavra
container -> StreamBuilder
Avada Kedavra
у него стрим укажешь и функцию билдера
Sergey Hottabych
И проверять — нет connection — рисовать прогресс индикатор Есть — рисовать чилдренов
Avada Kedavra
не забывать проверить на snapshot.hasData
Степан Бежук
Ухх как много всего )
Sergey Hottabych
Есть подозрение, что это го-внокод.
Sergey Hottabych
Рисовать карточки методом какого-то левого класса
Степан Бежук
Вынес в отдельный клас что бы не путаось под руками и не утонул потом в этом всем
Sergey Hottabych
Для вас придумали готовый рефакторинг "Extract Widget", даже самому делать ничего не нужно.
Sergey Hottabych
Не надо императивно вызывать отрисовку чего-либо.
Sergey Hottabych
Это не Джава
Степан Бежук
Я заклятый джавист ) но да понимаю
Степан Бежук
Ну тут просто постала задача на две ос написать и вот думаю flutter попробую ))
Roman Vasiliev
не пытайся делать синхронку из асинхронного, мой тебе совет
Roman Vasiliev
наберешь больше проблем, чем проигноришь
Степан Бежук
Та уже StreamBuilder начал использовать )
Roman Vasiliev
изучи setState, разновидности билдеров по асинхронным вещам и пиши с кайфом
Степан Бежук
Возьму на заметку, спасибо
Sergey Hottabych
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=MkKEWHfy99Y"
}
]
Степан Бежук
Какраз тоже его нашел )
Степан Бежук
ухх надеюсь оно не поламает мне все )
Sergey Hottabych
Карточку нужно выносить в отдельный виджет. В котором есть конструктор, в который передаешь свой url, и есть build() метод, который тебе возвращает эту карточку. И потом из карточек собираешь свой список или чего ты там хотел. А не спавнить класс с методом renderCard(), это неправильно.
Sergey Hottabych
Так ты snapshot нигде не используешь.
Roman Vasiliev
ты по-моему шарпист, а не джавист
Sergey Hottabych
Если б шарпист, он бы методы писал с большой буквы ))
Степан Бежук
Шарп был когда то в крови но так месяца два потом понял что джава круче и вот уже третий год джава )
Roman Vasiliev
Что он и сделал
?ИОНЕР
Диагноз уже можно ставить по регистру? ??
Степан Бежук
Клас с большой а метод с маленькой ))
Деда
ты был прав, спасибо тебе
Sergey Hottabych
Джава всегда отставала по фичам от шарпа
Степан Бежук
Ну да но она приятней чем шарп )
Sergey Hottabych
Даже лямбд там не было очень долго. А async/await до сих пор нет
Степан Бежук
Никто не отменял котлин )
Степан Бежук
Продебажил, оно в билдер даже не заходит
Alexey Z
[
"Делал для портфолио приложуху\n",
{
"type": "link",
"text": "https://github.com/Overman775/Neo-Todo"
},
""
]
Alexey Z
Что да как сделал в личку
Sergey Hottabych
Понимаешь, Флаттер за 5 минут не выучишь, он большой. Я курс 40-часовой смотрел по нему. Ты бы тоже посмотрел, а то так и будешь каждую строчку спрашивать
Ivan
Неоморфизм выглядит круто)
Степан Бежук
Ну эт да, согласен
Avada Kedavra
А что за курс? А то недавно один посмотрел русскоязычный - я не в восторге, но правда смотрел когда уже полприложения напилил)
Avada Kedavra
Кстати, а можно как то в режиме usb запустить приложение в реальной сборке - не в билде, но не собирая apk чтобы посмотреть как оно в реале работает?
Sergey Hottabych
Я смотрел курс от Maximillian Schwarzmuller на Udemy, он по скидке рублей 800 или 900 стоил. С апдейтами на 2020 год, и самое крутое, что провайдер разжевывает.
Avada Kedavra
Понял, спасибо, мне лично как то он не особо) но это персональное
Tuum Daemonia
Делаю tcp коннект к серверу на flutter. Вроде все работает. Но когда приложение не открыто через некоторое время коннект пропадает. Потом если его открыть, и отправить что-то в сокет, то ничего не происходит (даже ошибку не кидает) на onDone такое не ловится. Там стоит реконнект. Задебажить даже не выходит. При дебаге такое не происходит
Alexey Z
TCP keepalive таймер отрубает при простое
Степан Бежук
[
{
"type": "mention",
"text": "@Hottabych"
},
" не множечка сарказма )) \"Когда понял как что-та работает без документации\" ????"
]
Степан Бежук
Все получилось, спасибо )
Tuum Daemonia
а это можно как-то хандлить?
Gelo Pak
who knows why this error occures?
Gelo Pak
[
"I/flutter ( 8930): try-catch error: HandshakeException: Handshake error in client (OS Error: \nI/flutter ( 8930): CERTIFICATE_VERIFY_FAILED: Hostname mismatch(",
{
"type": "link",
"text": "handshake.cc:354"
},
"))"
]
Alexey Z
Только перепроверять состояние соединения перед каждой отправкой сообщения и делать реконект Или слать что то переодически чтобы не отрубило, но не советую
Alexey Z
[
"maybe SSL certificate broken, read this issue\n",
{
"type": "link",
"text": "https://github.com/flutter/flutter/issues/23045"
}
]
Tuum Daemonia
А как перепроверять? там есть проп done, но он возвращает Future
Sergey Hottabych
Есть ещё курсы от Stephen Grider (там BLoC), и официальный гугловский от какой-то азиатки
Sergey Hottabych
Но я их не смотрел
Alexey Z
копай в сторону листенера
Олжас Сулеймен
лучше вынести в стейт и в нем все менять и виджеты строить по текущему стейту
Vitaliy Puhkliy
Скинь код.
Alexey Z
Конечно нет, 1 листенер на 1000 виджетов, а там уже флутер сам перепроверит дерево элементов и нужные перерисует
Sergey Hottabych
По-моему, он просто стебет джависта выше. Который с "renderCards"
Олжас Сулеймен
вот оно что ??
Sergey Hottabych
Если серьёзно - сделай стор со списком, и через ChangeNotifierProvider доставляй изменения до ListView, и в нем генери свои карточки на основе этого списка. Мой любимый паттерн
Sergey Hottabych
Я русские курсы не смотрю, русские очень занудно рассказывают, и часто неправильные вещи
Avada Kedavra
Пару недель назад, когда начинал учить флаттер, смотрел тракеры - там ничего особо не было)
Avada Kedavra
Я по сути по русским ютубам "научился" - по крайней мере пол приложения запилил) для меня русский в приоритете, потому что его можно смотреть на 2-2,5х скорости)
Avada Kedavra
Русскоязый курс с юдеми не нашел, купил на складчике
Avada Kedavra
Я тогда не нашел) по флаттеру только какой то 18 года кажется выражал и все
Григорий Коваленко
видеокурсы для программирования не подходят имхо. А по поводу русского - на нем мало актуальной информации. Дока вся всегда на английском. Но если начнешь читать доку на инглише, по-тихоньку начнешь понимать нормально. Чтобы это делать особого уровня знания языка не требуется
Григорий Коваленко
я до сих пор английский не оч понимаю на слух говорить не могу, но доку уже нормально читаю, проблем не возникает
Sergey Hottabych
Я уже давно без субтитров смотрю. Но только на компьютерную тематику. Сериалы пока с субтитрами))
Григорий Коваленко
да, все нарабатывается, надо просто пробовать) я пока особо не заморачивался с инглишем, для доков хватает и норм))
???????developer
[
"Всем привет ",
{
"type": "link",
"text": "flutter.dev"
},
" сайт работает"
]
???????developer
у меня не открывает
Григорий Коваленко
впн юзай, в узбекистане у многих не открывает
Avada Kedavra
Английский не сильно проблема, но на русском можно смотреть со скоростью 2-2,5х что сильно экономит время, на англ не могу так
???????developer
спс работает через впн
Denis Glukhov
Всем привет. Во Flutter проект хочу интегрировать библиотеку Яндекс.Касса, исключительно для реализации GooglePay и ApplePay. Подскажите, нужно ли настраить на девелоперском сайте в гугл и эпл что бы приложение могло работать с GooglePay и ApplePay соответственно. И где именно это настраивать? Первый раз этим занимаюсь, кто с опытом, подскажите пожалуйста.
Denis Glukhov
а можешь скинуть ссылки, где можно глянуть про это инфу
IB Akhrorov
Здравствуйте флаттеристы) Как открыть password page после того как юзер блокнул телефон
IB Akhrorov
Я имел ввиду когда юзер нажал на механисечкую кнопку "блокировать "
IB Akhrorov
Чтобы когда юзер разблокировал телефон приложение flutter вызвал страницу ввода пасворда
IB Akhrorov
Для безопасности
IB Akhrorov
Другой вопрос как узнать нажал ли юзер на блокирующую механическую кнопку
Шахзод Джураев
По-моему кнопку питания отследить нельзя.
Шахзод Джураев
Может когда устройство блокируется он уходит в background?
Roman Vasiliev
плюсую, а то так себе безопасность
IB Akhrorov
Можно ли через method channel узнать
Roman Vasiliev
WidgetsBindingObserver и didChangeAppLifecycleState
Roman Vasiliev
либо готовый виджет, но не помню названия пакета
Roman Vasiliev
он на нем же и работает
Шахзод Джураев
[
{
"type": "link",
"text": "https://pub.dev/packages/hardware_buttons"
},
" первая ссылка походу то что нужно"
]
Sergey Hottabych
[
"Посмотрите: ",
{
"type": "link",
"text": "https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple"
},
"\nИ пример использования:\n",
{
"type": "link",
"text": "https://github.com/brianegan/flutter_architecture_samples/tree/master/change_notifier_provider/"
},
""
]
Roman Vasiliev
Нет такого с релогином, если правильно организовать
Павел
Запускаю по инструкции пуши. Вроде все заполнил, создал Activity и внес в манифест изменения. Идут ошибки все равно.
Павел
[
{
"type": "link",
"text": "https://i.imgur.com/bfcaUKW.png"
}
]
Павел
[
{
"type": "link",
"text": "https://i.imgur.com/I767TmG.png"
}
]
Павел
хотя пуши ходят если без активити делать)
?
Привет. Как сделать, что бы текст переносился вниз?
?
только эти 3 поля доступны которые на скрине
Artem Moss
"Plugin project :url_launcher_web not found. Please update settings.gradle." - как убрать эту ошибку?
Roman Vasiliev
Row/Column имеют неограниченно бесконечный размер по главной оси
?
Ооо, в Expanded обернул
Павел
[
{
"type": "link",
"text": "https://pub.dev/packages/firebase_messaging"
}
]
Павел
сделал по статейке с медиума работают нормально, но колбэков нет если приложение активно. думал сделать полностью по доке
Деда
Кстати после долгой разработки под ios чувствуется местами что не нативно, например тот же скролл, у него другая инерция
Avada Kedavra
приложение в дебаге работает правильно - аппбар + карта гугл + данные с инета собрал в релиз - добавил строку разрешения на интернет - запускаю - аппбар + белый экран Как можно понять что вообще не хватает?) как то дебажить релизные версии? может для карт какое то разрешение надо?
Dmitriy Orteney
наверное для карт не добавили гугловый api_key? В дебаге без него работает)
Avada Kedavra
а про манифест то я забыл гугла) спасибо
Sergey Hottabych
Это же интернет, тут не надо спрашивать разрешения )
Sergey Hottabych
Чат для вопросов и существует.
Avada Kedavra
Да про манифест забыл) правда тормозит прилично, с маркерами меньше 100 штук
Hellomik
Хай народ у меня тут такой момент из за того что много Gesture Detecotr нажимаю то ListView блокается
Hellomik
как сделать так что бы при нажатии связь с ListView не терялась
Dmytrij Okladnoj
[
"Мы у Вас спрашивали про 1000 виджетов и 1000 listeners для этих виджетов:\n",
{
"type": "link",
"text": "https://t.me/rudart/212259"
},
"\n\nМы нарисовали схему вложенности наших виджетов (смотрите, пожалуйста, на рисунке) и хотим спросить у ",
{
"type": "mention",
"text": "@Hottabych"
},
" ",
{
"type": "mention",
"text": "@Overman775"
},
" ",
{
"type": "mention",
"text": "@ykmnkmi"
},
" и всех-всех:\n\nВопрос:\n\nКак можно изменить свойства виджетов \"А\" (их около 1000) в зависимости от изменения глобального потока запущенного в главном (самом верхнем) виджете.\n\nНажатие на один из виджетов (уровня \"А\") меняет поток и соответственно может внести изменения в другие виджеты не только уровня \"А\"\n\nМожно ли обработать нажатие на виджет \"А\" без использования GestureDetector-а?\nЯ переживаю что слушатель/реактор ",
{
"type": "bold",
"text": "onTap"
},
" - много ресурсов съест, можно как-то без этих \"слушателей/реакторов\" обойтись?\n\nСпасибо за ответ."
]
Nikita Domnitskii
Вообще если у вас одновременно 1000 живых виджетов в скролле, то вы что-то делаете не так
Sergey Hottabych
Во-первых, ListView оптимизирован. Он сам прячет виджеты, которые не видны.
Олжас Сулеймен
тут люди парткл эффекты на 100к виджетов делали работает норм почти
Sergey Hottabych
Странно, что список, в нем раскрывашки, и в каждой еще по списку — это разве красиво?
Alexey Z
Дополню, сделан через build и виджеты выведены отдельно
Олжас Сулеймен
виджеты это конфиг на рендер виджетов может быть сколько угодно, но отрисуется только то что видно
Alexey Z
да и GestureDetector не создастся пока виджет не появится
|