Программирование : Dart & Flutter по-русски
Влод
+ используй какие-нибудь адекватные по размеру плейсхолдеры
Яўген
про немецкий это понятно, я не понимаю как работает история после "then" там метод, или что....
Яўген
или это вообще не нужно...
Я решил проблему через способ описанный выше
(Рез функции прописать через setState)
Ну эта кнопка тебе откроет md на гитхабе вроде, не?
Влод
ну она откроет сорцы. то что я и хотел
Она в 99.99% не нужна, насколько я понимаю
А, она сорцы открывает?
Через setState в конце асинк функции
Влод
мб элемент который вызывает форматтер не обернут в FutureBuilder?
Влод
типа где-то вне рисуется
Влод
динамически как-нибудь. то сё
Влод
[
"ну и FutureBuilder также работает. \n",
{
"type": "link",
"text": "https://github.com/flutter/flutter/blob/b712a172f9/packages/flutter/lib/src/widgets/async.dart#L586"
},
" \nв ините он говорит что .then … setState(() {\n",
{
"type": "link",
"text": "https://github.com/flutter/flutter/blob/b712a172f9/packages/flutter/lib/src/widgets/async.dart#L614"
},
""
]
Кину пример, когда это не так как нужно работает
Только вечером, если не забуду, счас нет ноута с собой
Влод
а я надеялся на ещё какой-нибудь тупняк придется покурить и начать уже работать
Яўген
пришел к такому коду, не работает. Я сдаюсь.
Яўген
я понятия не имею что туда писать, несмотря на примеры, где туда что-то было записано...
Влод
но тем не менее интересно откуда у тебя нул берется в билдере
Яўген
это как раз таки я понял, но я не могу понять, что, конкретно в моем случае, туда нужно прописывать... попробую дэйтформаттер но хз, вроде уже пробовал...
Влод
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/date_symbol_data_local/initializeDateFormatting.html"
},
"\nона возвращает future"
]
Влод
ты её пробовал уже использовать?
Яўген
я ее видел, но не юзал.... не понимаю, что писать в игноред, что за валуе она возвращает...
Яўген
такой вариант с future тоже не пашет
Влод
[
{
"type": "link",
"text": "https://www.growingwiththeweb.com/2013/05/optional-parameters-in-dart.html#optional-positional-parameters"
}
]
Влод
не пашет потому что сыпится с нулом как на скрине выше?
Влод
и ещё я рекомендовал тебе запихнуть как можно выше в корень приложения
Влод
ты это делаешь в buildItem
Яўген
в модели, как раз таки и храниться дата, на которую изначально ругалось. А снапшот я просто из примера взял, я вообще понятия не имею, что с ней делать...
Яўген
прямо с первого экрана?
Влод
если есть сплешскрин то вон там самое место
Влод
никакого вэлью не возвращает. она просто завершается и тем самым говорит что всё ок можно работать с либой. вызывать форматированние
Ivan Semenov
Я делаю ставку на bloc паттерн для flutter. Надеюсь Provider не понадобится.
Влод
я бы сделал ставку на редукс, но не знаю как вы будете выйгрышь считать
Влод
ну там последнее выражение стейтмент без ретурна, так что нул
???????
Блок и Провайдер пользуют вместе
???????
Тк БЛоК это отделение логики от интерфейса
???????
А провайдер это засовывание значений и ссылок на объекты в контекст дерева виджетов
???????
Это не взаимоисключающие пакеты, а взаимодополняющие
Ivan Semenov
Хорошо. Спасибо. Увижу это походу.
???????
Да, вы можете для засовывания блока в контекст дерева виджетов взять flutter_bloc, но зачем?
Serge Shkurko
Provider.of (context)
???????
К томуже flutter_bloc от provider толком вообще не отличается
???????
Это идентичная хрень, к томуже крайне простая, тупо оберточка над InheritingWidget
Serge Shkurko
Там только приходится доп параметр писать listen: false
???????
Вся разница в том, что во флатер_блок вы можете засовывать только блок, а в провайдер - вообще все что угодно.
???????
В общем это не взаимоисключающие пакеты. И ни разу не стоит вопрос или ТО или ТО.
???????
и да, не путайте bloc и flutter_bloc)
Ivan Semenov
ммм т.е. стоит использовать библиотеки: bloc и provider
Serge Shkurko
Ещё flutter_bloc
Влод
можно вкратце. как так получилось
Яўген
Unsupported operation: Cannot set value in unmodifiable Map Засунул в самое начало и сразу все здохло??
???????
flutter_bloc не про архитектуру, как кажется из названия
Ivan Semenov
круто. Спасибо от новичка
???????
И не реализация bloc под нужды флатера)
???????
Просто название вводит в заблуждение
Влод
ну скинь че там у тебя вокруг той строки где ошибка
Ivan Semenov
Тогда в догонку какой пример лучше взять?
???????
Там пару простецких виджетов которые работают также как и Provider
Ivan Semenov
todo list подойдет
Serge Shkurko
[
{
"type": "pre",
"text": "BlocBuilder(\n bloc: BlocProvider.of (context),\n builder: (context, state) {\n // return widget here based on BlocA's state\n }\n)",
"language": ""
}
]
Serge Shkurko
Писать велосипеды не мой выбор
Serge Shkurko
речь тут не о provider'e, а о builder'e
???????
> Стримбилдер из коробки > велосипед
Влод
вообще не могу предсказать что произошло
???????
[
{
"type": "pre",
"text": "StreamBuilder(\n stream: Provider.of (context).state,\n builder: (context, state) {\n // return widget here based on BlocA's state\n }\n)",
"language": ""
}
]
???????
Мне настолько лень, что я просто у тебя пару букв сменил
Игорь Кравченко
[
{
"type": "link",
"text": "https://github.com/felangel/bloc"
},
" - это про что получается?)"
]
???????
Это про архитектуру
Влод
ну давай мб стектрейс
???????
Люди тут упорно сравнивают BLOC с PROVIDER и так день за днем
???????
Не стоит выбор или то или то.
Игорь Кравченко
кстати, а насколько на и правильно и когда надо использовать bloc: BlocProvider.of (context)? и BlocProvider.value ?
???????
Лучше вообще не брать flutter_bloc
???????
Но это мой субъективный вкус
Игорь Кравченко
ну мне нравится
???????
Провайдер даст большую свободу
???????
А работать будет также
Игорь Кравченко
я его как-то не совсем вкурил, по пересечению данных
???????
Да там все тоже самое, даже на ютубе про него ролик был, в виджетах недели
Игорь Кравченко
не, на фиг, у меня один проект и он в принципе минимально написан)) не буду менять))
???????
Ага, если уже есть и все устраивает
???????
Провайдишь только блок
???????
Там и то и то это просто класс хелпер над Inheriting Widget
Влод
по проекту глобально поищи localizationsDelegates
Игорь Кравченко
я всегда bloc создаю сам а не , BlocProvider.of (context) делаю
???????
Прост провайдер появился значительно позже и его явно слизали с флатер блока
Яўген
Пусто, только библиотеки
Игорь Кравченко
я не понял как там глобальные вещи типа авторизации зафигачить
???????
Ты делаешь это на блоке
Игорь Кравченко
я это синглтоном сделал)
???????
А провайдером ты просто провайдишь блоки по дереву виджетов
???????
Ага, также готовлю)
???????
Синглтоном блок приложения, настроек и пользователя
???????
А блоки экранов уже провайдю через провайдер (раньше через флатер_блок)
Игорь Кравченко
BlocProvider.of (context) - для меня больше на магию похоже то ли придет и норм будет, то ли нет, причем ешще может null Быть и как я понимаю зависит от места вызова,. лучше я четко пропишу время жизни)
northelks
какие данные отправишь, такие и получишь) где тут магия?)
Игорь Кравченко
мне нравится реализация BlocBuilder, event и перерисовка при изменниии стейта.
Влод
попробуй в MaterialApp поставить localizationsDelegates: []
Serge Shkurko
если блок по дереву лежит выше и не разрушается вместе с разрушением родительского экрана то проблем не каких не возникнет
Яўген
Спасибо, извините за потраченное время...
???????
Почему вы сравниваете BlocBuilder с Провайдер?)
Яўген
да, тоже не сработало. все равно, спасибо.
???????
Если и хотите сравнивать две либы, то сравнивайте Provider с BlocProvider
Игорь Кравченко
я не сравниваю)
???????
А BlocBuilder это элементарнейшая обертка над StreamBuilder
???????
Вы вообще можете его не использовать и разницы не заметите
???????
[
{
"type": "pre",
"text": "StreamBuilder(\n stream: myBloc.state,\n builder: (....) {...},\n)",
"language": ""
}
]
Игорь Кравченко
вот мне это обертка нравится) я понимаю что можно без нее и вообще там кода 30 строчек, но код притяный в итоге)
???????
Найдите 10 отличий
???????
Строчек столькоже
Игорь Кравченко
я про весь проект либы)
???????
В одном месте только пишете myBloc.state вместо myBloc
???????
Алсо, стримбилдер к томуже позволяет писать where
???????
чтоб не перерендеривать НА КАЖДОМ состоянии
???????
а только на определенных
Игорь Кравченко
там только при изменнии стейта рендеинг
???????
Так у вас стейт может быть из 100500 состояний
???????
Вот вам надо нарисовать картинку когда она загружена
???????
Зачем вам перерендеривать когда НАЧАТА ЗАГРУЗКА, когда ЗАГРУЗКА ИДЕТ
???????
Вам надо только ЗАГРУЗКА ЗАВЕРШЕНА
Игорь Кравченко
не включаешь эти параметры в сравнение и все ок)
???????
И что происходит, нука нука
???????
[
{
"type": "pre",
"text": "StreamBuilder(\n stream: myBloc.state.where((BlocState state) => state is RightBlocState),\n builder: (....) {...},\n)",
"language": ""
}
]
Игорь Кравченко
все стейты от Equatable наследуются и если изменения не было -рендеринга не ьудет
???????
Вот как это делается на стримбилдере
???????
Покажи как это сделать на блок билдере)
Игорь Кравченко
не понял что надо сделать)
???????
Что тут происходит, понятненько?)
Игорь Кравченко
выполнять если RightBlocState
???????
Как это делается также просто и изящно на БлокБилдере и в чем плюс его использования над ванильным СтримБилдером?)
???????
[
"В том, что не надо дописывать ",
{
"type": "code",
"text": ".state"
},
" в одном месте?)"
]
Игорь Кравченко
[
"class UpdateSettingsEvent extends SettingsEvent {\n ",
{
"type": "mention",
"text": "@override"
},
"\n String toString() => 'LoadSettings';\n final AuthenticationBloc _authenticationBloc = new AuthenticationBloc();\n\n ",
{
"type": "mention",
"text": "@override"
},
"\n Future applyAsync({SettingsState currentState, SettingsBloc bloc}) async {\n try {\n \n if (currentState is LoadedSettingsState) {\n var auth = this._authenticationBloc.getAuth();\n return new LoadedSettingsState(currentState.strofronts, auth.chosedStoreFront);\n }\n return currentState;\n } catch (_, stackTrace) {\n print('$_ $stackTrace');\n return new ErrorSettingsState(_?.toString());\n }\n }\n}"
]
???????
У вас крайне примитивный пример, когда 1 событие порождает 1 состояние
???????
Обычно 1 событие порождает целую кучу состояний.
???????
Яж вам пример привел
???????
Событие: myBloc.dispatch(ЗагрузиКартинку);
???????
Состояния: yield НачатаЗагрузкаКартинки(); yield КартинкаЗагружается(); yield КартинкаЗагружена();
Игорь Кравченко
у меня состояние будет одно - загрузка данных, а дальше там могутьменяться переменные, могут нет, и может рендериться ui, может нет
???????
Если вы думаете, что подобный кейс надуманый, то вот вам реальнейший пример: у вас есть БлокПриложения
Игорь Кравченко
я не стал делать кучу стейтов. у меня другой подход
???????
и пользователь может менять локализацию, тему оформления и еще что то
Игорь Кравченко
это настройки)
Игорь Кравченко
есть такие
???????
И при изменении локализации вы будете перерисовывать и там, где нужно менять тему оформления?)
???????
а при изменении темы оформления - там где локализацию?)
Игорь Кравченко
да, потомучто это одна страница
???????
Это плохой подход
???????
Идея как раз в том, что одно единственное событие может породить целую кучу состояний
???????
Смотрели "Эффект Бабочки"?
???????
Вот это как раз и есть реактивный подход.
Игорь Кравченко
перерисовка будет только там где зависит от этого BloC
???????
У вас 1 блок и 1 состояние?)
Игорь Кравченко
по разному
???????
Смысле 1 состояние на блок?)
Игорь Кравченко
чаще всего три
???????
И при каждой смене состояния вы вызываете перерисовку везде где этот блок задействован, даже если данный виджет плевать хотел на данное состояние?)
Игорь Кравченко
Widget - это и есть Bloc
Игорь Кравченко
карточка песни -это отдельный блок
???????
Вот тебе пример как должно работать: Вася хочет пойти за молоком, чтоб мама сделала кашу. Он говорит маме: МА, Я СОБИРАЮСЬ ЗА ХЛЕБОМ
Игорь Кравченко
страница плелиста - это блок страницы с кучей блоков песен
???????
Потом говорит: МА, Я ОБУВАЮСЬ
???????
Потом говорит: МА, Я ВЫХОЖУ
???????
Потом говорит: МА, Я ПРИШЕЛ
???????
Потом говорит: МА, Я РАЗОБРАЛ СУМКИ, МОЛОКО В ХОЛОДИЛЬНИКЕ
???????
На это, интерфейс-мама выходит из комнаты, оторвавшись от сериала и идет готовить кашу
???????
Как это сделано у вас: На каждое "МА*" У вас мамка сломя голову бежит на кухню
???????
И покс, что молоко еще в магазине
???????
В итоге мамка (напомню, это интерфейс) - за@бана в усмерть.
Valentyn Stepanov
Есть материалы где это четко описано с примерами?
Игорь Кравченко
очень абстрактно) может оффлайн, пиво и обсудить код на примере проекта?)
???????
Да, в примерах блока Могу сейчас дать собраный мной плейграунд, где можете поэксперементировать без вреда для здоровья остальных)
???????
[
{
"type": "link",
"text": "https://dartpad.dartlang.org/e3710bbb18d5b201a656811e5ef46ad8"
}
]
Valentyn Stepanov
Буду очень признателен
Daniil Kolyasnikov
Ребят, есть вариант собрать one_signal push для ios без мака ?
???????
Самый верхний класс только не трогайте, это схематичное представление блока переписаное с RX на ванильные стримы
|