Программирование : Dart & Flutter по-русски
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://github.com/dart-side/live-templates/"
}
]
Alexandr Drobyshev
[
"как раз crud ",
{
"type": "link",
"text": "https://github.com/dart-side/live-templates/blob/main/bloc.md"
},
""
]
?
почему я получаю эту ошибку? Раньше такого не было, работало и без значения по умолчанию
Andreu
int? И будет тебе счастье
?
я раньше так писал, и проблем не было
d
Если без аннотации required то надо дать дефолтное значение
d
То есть this.status = 1
Andreu
Ну видимо поднял версию дарта и теперь это non-nullable
?
[
"получилось. Спасибо\nА в чём разница ",
{
"type": "mention",
"text": "@required"
},
" и required? Просто 2 вида записей видел"
]
d
@ это до null safety аннотация
d
По сути максимум будет ругаться линтер
d
Тут же это будет ошибка
A A
Можете помочь на счёт платные покупки в Гугле плей нужно ли компанию открывать или не обязательно может кто нибудь знает? Спасибо
Vlad
AppStore знаю берет комиссию. Гугл плей хз
A A
в Гугле плей тоже есть. Не обязательно открывать фирму? Можно как физическое лицо?
northelks
а налоги/ндс как будешь платить с физ лицом?
Семён undefined
налоги для слабых
Alexandr Drobyshev
ну так физ лицо может платить налог) подает 2ндфл или что там
Bakhyt
Добрый день, можно ли с помощью flutter создать приложение, которое отправляет сообщения в вацап выбранным контактам?
Alexandr Drobyshev
напрмиер если ты тачку продал или недвижимость
northelks
когда ты получаешь оплату систематически - это уже предпринимательство
northelks
продажи тачки и недвижимости ты совершаешь не каждый месяц, а если каждый месяц - то и здесь уже нужно быть юр. лицом
Alexandr Drobyshev
я не знаю что у него за прила) может он свои продукты рподает) зватит самозанятости)
Alexandr Drobyshev
а еще етсь вариант всгеда
Alexandr Drobyshev
что гугл за тебя платит налог
Alexandr Drobyshev
с рекламы напрмиер можно получтаь деньги как физ лицо с сайта или ютуб канала
Alexandr Drobyshev
и ты выбирашеь там аля я плачу налоги сам в своей стране
Alexandr Drobyshev
я не помню уе лет 10 назад выбирал)
northelks
если гугл зарегистрирован в твоей стране, то да, он платит за тебя а если нет, то ты платишь сам
?
а это как можно пофиксить? В предыдущей версии дарта тоже всё работало(
Alexandr Drobyshev
String? apiToken = ...
?
а что означает этот "?" ?
Alexandr Drobyshev
что переменная может быть null
Alexandr Drobyshev
а у тебя дальше проверка ка краз на нулл
Alexandr Drobyshev
видимо ты ожидашеь что может быть нул
Alexandr Drobyshev
знаичт в конце типа пишешь ?
?
понял) Изменения конечно конкретно подкачали они.. Зато больше понимания будет
?
пилю стартовую страничку приложения. Насколько актуально это делать таким образом?
Alexandr Drobyshev
не думаю что в функции бильд надо делать прверку и редирект
Alexandr Drobyshev
лучше уж в инитстейт
Alexandr Drobyshev
будет 10 вызовов бильд будет 10 проверок?
Tosuj
Подскажите, хочу использовать провайдер для того, чтобы при нажатии на каждый таб у меня улетал запрос на сервер и обновлялся список. Как это можно сделать? Пытался через FutureProvider, но не понял как через него отправлять запрос после того, как виджет уже загрузился, каким должен быть класс провайдера, может у кого есть примеры похожих приложений
?
ну я планирую эту функцию вызывать только при первом запуске приложения, а дальше в зависимости от факторов она уже будет кидать на нужный экран
Alexandr Drobyshev
не вжано что вы планируете
Alexandr Drobyshev
важно что флаттер планирует)
Alexandr Drobyshev
и. в данном виде я не вижу гарантии запуска 1 раз
Alexandr Drobyshev
вот вараинт с bloc
?
а это поинтересней (попонятней для моего уровня) вроде, спасибо. Буду смотреть
Alexandr Drobyshev
ну и не забудьте кеширвотаь ответ все же, не стоит прям каждый клик запрашивать) берите из кеша хотя бы пока прила не закрывалась или раз в какое то время
Alexandr Drobyshev
[
"можете с футурбильдер сдлеать ",
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html"
},
""
]
Alexandr Drobyshev
если блок не нравиться)
?
да, с помощью FutureBuilder я и делал
Alexandr Drobyshev
суть та же) делаете запрос, меняете стейт что пошел запрос, выводиите лоадер, ответ пришел меняете стейт и выводите результат
?
т.е. то что я сделал через then'ы лучше так не делать?
Alexandr Drobyshev
да делайте) просто не в функции бильд в данном случае
Alexandr Drobyshev
я про проверку версии и редирект
?
а как лучше это реализовать? Просто в отдельный класс вынести? Я просто основную логику и так уже вынес по проверке, а там сделал просто проверки, что бы понять куда пользователя кидать
Alexandr Drobyshev
я вам написал, в инитстейт
Alexandr Drobyshev
функция build вызывается 100500 раз
Alexandr Drobyshev
поверунли экран, где то выше произогла перерисовка, свренулась прила, сами где то накодили или вызвали setState
Alexandr Drobyshev
каждый раз будет оптяь лететь запрос
Alexandr Drobyshev
а инитстейт 1 раз вызывается при создании виджета в дереве
?
понял. Сейчас попробую поменять логику
Alexandr Drobyshev
ну и не забудьте что у вас then
Alexandr Drobyshev
у вас нет в бильде return
?
просто проблема вот в чём. Обе проверки они идут через Future (async/await), а в initState нельзя это дело так просто задать. Мне говорили что через FutureBuilder нужно делать, но как правильно это сделать так и не дошло. Я через FutureBuilder в основном генерировал только List'ы, когда получал данные с сервера
Alexandr Drobyshev
то есть build() { func().then(() { return Widget} ) }
Alexandr Drobyshev
это ретурн внутри then а не build
?
т.е. грубо говоря виджет ничего не возвращает, т.к. тот return привязан к той функции (что в then)?
Alexandr Drobyshev
чо это нельзя Future check() async { checkUpdate()... }
initState() { super.initState(); chech(); }
Ruslan Vafin
Всем привет! Может кто сталкивался с проблемой такого характера при использовании freezed. Почему то build_runner не хочет генерировать файл, пробовал разные версии, flutter clean, ничего не помогает.
?
т.е. check() пока не отработает, дальше initState() не уйдёт? Я просто как то тут поднимал этот вопрос, и была проблема что initState не дожидался выполнения, и шёл дальше
Alexandr Drobyshev
ну и стоп
Alexandr Drobyshev
у вас then
?
понял. Сейчас попробую. Это многое меняет)
Alexandr Drobyshev
вообще пря м винит стейт можно
Alexandr Drobyshev
суть в чем
Alexandr Drobyshev
вы должны ждать ответа
Alexandr Drobyshev
а пока ждете
Alexandr Drobyshev
что то выводить
?
ну с then работает, но по коду получается "лапша"
Alexandr Drobyshev
вот вы в инитстейт можете подписаться на ожидание и длеать setState или юзать футурБильдер в build
?
подписаться - это т.е. через then(), верно? Или FutureBuilder в build, так?
Alexandr Drobyshev
ну если там то да
?
получается тогда у меня в initState() так и так будет два then'a (проверка обновлений, и что пользователь авторизован), и один внутри другого? Просто внешне выглядит ужасно. Или это норм?
Alexandr Drobyshev
ну я б так не делал)
Alexandr Drobyshev
я б сдлеал таки блок ) ну или тут асинхронную функицю и менял стейт у стейтфул виджета
Alexandr Drobyshev
ну или это длеать так но в сплеше
?
мне BLoC не посилен пока) Я бы хотел без воды что нибудь почитать, но с лёту сам не могу освоить. 3 раза пытался, и 3 раза забивал, т.к. терялся в тексте
Alexandr Drobyshev
типа build() => Center(CircularLoadingIndicator());
Alexandr Drobyshev
а в ваших then navigator.push
Alexandr Drobyshev
можете даже пистаь проверка версии. потмо проверка авторзиации
Alexandr Drobyshev
но что будет если во время работы по какой то причине произойдет выкидыванию юезра? напрмиер токен больше не дейсвителен?
Alexandr Drobyshev
вам нужно все равно отдежить и редирект сдлеать
Alexandr Drobyshev
или в бильд сдлеать тупо
?
да вот, ничего) я не знаю как это грамотно сделать. Боюсь кучу кода наворотить и потом в нём потеряться
Alexandr Drobyshev
build() => isGuest ? LoginPage() : UserPage()
Alexandr Drobyshev
и менять стейт setState(() { isGuest = ... })
Alexandr Drobyshev
в функции then от проверки автризации
Alexandr Drobyshev
ну а пока проверка версии и проверка авторизации loading = true делайте
Alexandr Drobyshev
или нулл isGuest
Alexandr Drobyshev
вот ка кто так
?
буду разбираться. Примерно уловил мысль
Alexandr Drobyshev
build() => isGuest == null ? Loader() : (isGuest ? LoginPage() : UserPage());
Alexandr Drobyshev
обявите bool? isGuest;
Alexandr Drobyshev
дальше в провреки версии не чо не меняете, там тупо пока провреяет либо все ок, и переходите к проверке авторизации
Alexandr Drobyshev
либо зафейлилась версия и выводите попап или редирект на обновление
Alexandr Drobyshev
а вот в then авторизации уже isGuest задает булеан
Alexandr Drobyshev
в итоге лоадер крутиться все время пока проверка авторизации не прйодет или не редиректниться на обнову
Alexandr Drobyshev
но нафиг это then
Alexandr Drobyshev
удобней вынести в async
?
а это всё по идее должно происходить в одном MaterialApp/Scaffold? Я в прошлом приложении просто расплодил там..
?
И маршрутизацию начал изначально всё делать в одном файле.. Всё было ок, пока это всё "не разделилось", и маршруты не перестало видеть
Alexandr Drobyshev
Future check() async { try { final version = checkVersion(); if (version < CurrentVersion) { Nav.push(); } else { setState(() { isGuest = awiat checkAuth() }); } } catch { ошибка где то } }
?
Я вот хочу примерно понять эти вещи: - Главный экран (как делать базовые проверки, и выставлять нужные экраны (обновление, авторизация и т.п.)) - Как правильно реализовать маршрутизацию (по именам, что бы все маршруты были видны глобально) - При предыдущей разработке уже начинал понимать, но уже снова позабыл.. Как правильно делать переходы по маршрутам (я помню там Replaced были, и без Replaced, и какие то баги я ловил, что переходил на какой то экран и не мог вернуться) - Как реализовать простейший crud (ну, скорее архитектуру, пример простой)
?
а проверку авторизации вот:
Alexandr Drobyshev
зачем у вас then в async функции
Alexandr Drobyshev
как то все сложно)
Alexandr Drobyshev
вы де понмиатее что функция вернут всегда фальш?
Alexandr Drobyshev
у вас запрос к апи не полетит пока функция не завершится
Alexandr Drobyshev
она отдачт isAuth котоырй фальш
Alexandr Drobyshev
и потмо полетит запрос
?
да, я вот только что понял это, когда пересмотрел.
Alexandr Drobyshev
final res = await checkApiTioken(apiToken); return res.isValidToken ?? false;
Alexandr Drobyshev
ну и не забываетй что сервер может быть недоступен или вренуть ошибку
?
но мне что то фигово совсем. Понимаю что фигню творю. И что дальше всё равно пойдёт не то, так как изначально "архитектуру" не правильно задаю)
?
т.е. статус от сервера надо чекать. И дополнительно где то делать проверку и выводить сообщение что сервер не доступен. Вот тут одно дело самому написать, или другое (более грамотное), уверен уже есть какое то готовое решение для этого)
Alexandr Drobyshev
та не надо
Alexandr Drobyshev
прсото try {}
Alexandr Drobyshev
если упал то упал
Alexandr Drobyshev
можеет чекать наличие коннекта но толку от этого мало
Alexandr Drobyshev
коннект не значит доступность сервера
?
это при каждом запросе делать?
Alexandr Drobyshev
более того на future можно ещеtimeout писать
Alexandr Drobyshev
чтоб ограничить время запроса вдруг зависло что то
Alexandr Drobyshev
или косяк в коде и зациклилось)
?
тут получается через then нужно?
Alexandr Drobyshev
я два раза написал)
Alexandr Drobyshev
делаете функуию после инитстейт ниже
Alexandr Drobyshev
Future check() async {
Alexandr Drobyshev
и пишите без then)
Alexandr Drobyshev
а в инит стейт check();
Alexandr Drobyshev
вызывваете ее просто)
?
т.е. по сути что бы функция находилась в том же классе, верно?
Kerim
Добрый вечер, подскажите пожалуйста если тип Листа виджет List smileResult =[ ] ; он сбрасывается?
?
Вроде чуть грамотней реализовал. Или всё равно не так будет работать?
Alexandr Drobyshev
зачем пистаь return globals.version != data.version ? true : false
Alexandr Drobyshev
а прсото return globals.version != data.version
Alexandr Drobyshev
что по вашему вернет?)
?
понял, тоже самое, но покороче)
?
что то я не могу print'ы отследить в этом коде (дебагера нету). И CircularBar всё равно не уходит(
Alexandr Drobyshev
вы используете нуллс сафети?
Alexandr Drobyshev
http вернет не response?
Alexandr Drobyshev
я не помню что то)
Alexandr Drobyshev
хотя подчеркнуло бы)
?
не знаю. Я недавно поставил всю среду заново, видимо в новой версии вот эта штука с проверкой на null
Alexandr Drobyshev
или то что в блке try не подчеркивает)
Alexandr Drobyshev
куда не уходит?
Alexandr Drobyshev
и где вы вызываете runnigCheck() ?
Alexandr Drobyshev
ну так
?
во, теперь исключения пошли. Сейчас сделаю апи на сервере и проверю)
?
а можно как то в virtualdevice прописать хосты? Что бы апи не в "интернет" слать, а на локальный адрес?
Alexandr Drobyshev
ну так пишите локлаьный адрес
Alexandr Drobyshev
в андроид эмуляторе прада там какой то кривой надо не помню уже)
Alexandr Drobyshev
я с телефона прсото тестирую, и пишу просто сетевой адерс компа в вайфае
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/5806220/how-to-connect-to-my-http-localhost-web-server-from-android-emulator"
}
]
Alexandr Drobyshev
хотя в дарте не знаю может там какой то обход)
Silent Bezmolvny
У меня такой вопрос. Если, представить, что у меня есть приложение с уроками, в каждой из которых есть теория, реализованная в виде объекта, включающего в себя другие объекты, представляющие разные сущности - заголовок, простой текст, пример, заметка, предупреждение и т.д., то как правильно оптимизировать: - Создать все эти объекты во время компиляции - Или создавать эти объекты именно в тот момент когда пользователь перейдет в урок?
Silent Bezmolvny
Более подробно
Silent Bezmolvny
В плане оптимизации программы как лучше: - Во время компиляции создавать все эти объекты - Или вынести это в метод, который будет создавать эти объекты только тогда, когда пользователь нажмёт на урок?
Alex Wow
Во время компиляции,у тебя уже все выделено Во время нажатия - нет Но думаю это будет заметно при огромных данных
Denys Demyanchuk
Всем привет, кто может помочь, пытаюсь получить значение из контроллера, использую GetX
Yakov K.
Не использовать GetX. Проблема решена.
Denys Demyanchuk
почему ?
Yakov K.
По причинам на скриншоте выше :))
Ruslan Vafin
Покажи код контроллера и страницы где вызываешь контроллер
Dmitry Demchenko
Видимо вы в методе build виджета вызываете изменения свойства, что дёргает перерисовку всего виджета, не надо так
Denys Demyanchuk
[
{
"type": "link",
"text": "https://gist.github.com/Adm1RalDen/098d180eb719cc7b58046211eceef8b6"
}
]
Dmitry Demchenko
[
"В методе ",
{
"type": "code",
"text": "get workout exercises"
},
" вы изменяете is loading на true что и вызывает перерисовку"
]
Denys Demyanchuk
так и есть по сути, но как это заменить
Denys Demyanchuk
в ином месте это не вызывает проблем
|