Программирование : Dart & Flutter по-русски
Adel Gilyazeev
Такая же, это то что по два значения?
Вадим Резниченко
попробуй сделать override на dispose и в нем закрывать прослушку
Adel Gilyazeev
Показывай как стрим создаёшь, как данные туда пихаешь, где у тебя фигурирует виджет который вот initState содержит который ты показал, и да в диспосе отписывай слушателя
?iriu?
Закрывать прослушка нельзя. Прослушка я поставил на главном скрине чтобы уведомления тоже приходили. Я слушаю поток только из одного места.
Adel Gilyazeev
Stream.listen этого слушателя как раз и возвращает так что сохряняй его в Стейт
Вадим Резниченко
тогда снеси бродкаст
Вадим Резниченко
и по ошибке мб найдешь где проблема
Adel Gilyazeev
Ты наверное с этого скрина уходишь на другой, а потом возвращаешься и у тебя такое вот поведение
Вадим Резниченко
снеси asBroadcastStream
Adel Gilyazeev
Ты сначала подписываешься на броадкастстрим, а потом его задаёшь когда-то где-то?!
Вадим Резниченко
не, это нормально
?iriu?
Давай я на пастебине код скину
Вадим Резниченко
оно так нормально работает, у меня есть места с такими штуками
Adel Gilyazeev
Разве? Подписаться на один объект, а потом его заменить другим, на который мы не подписались ничего?
Вадим Резниченко
он не заменяет, он линкует, это нормально
Вадим Резниченко
а если бы заменял, то обновления бы вообще не приходили
Вадим Резниченко
а там что то приходит, еще и два раза
Adel Gilyazeev
То есть там оператор присвоения как то переписан?
Adel Gilyazeev
Я думал стрим это обычный объект как любой другой и оператор присвоения везде одинаков
Вадим Резниченко
а где ты видишь новое присвоение?
?iriu?
[
{
"type": "link",
"text": "https://pastebin.pl/view/7065dc7d"
}
]
Adel Gilyazeev
В коллбеке сет стейта Который точно никогда не выполняется до initState
Adel Gilyazeev
И в самом инит стейте он не вызывается
?iriu?
Я тут его определю и слушаю его из скрина чат-рума
Adel Gilyazeev
Почему он не умеет в подсветку синтаксиса? Я предпочитаю гисты на гитхабе)
Adel Gilyazeev
А к тому же это ещё и глобальная переменная
?iriu?
Ок щас сделаю гист)что не вызывается?
Вадим Резниченко
начать использовать хоть какое то подобие архитектуры
Adel Gilyazeev
Да думаем ещё, не торопись)
?iriu?
Я так его слушаю из других скрин
Вадим Резниченко
не делать вообще ничего через setState и использовать stateless по максимуму
Вадим Резниченко
мне кажется это
Вадим Резниченко
противоречит этому
Вадим Резниченко
так его много где слушаешь или в одном месте?
?iriu?
Много где. Если закрываю его то уведомления не приходят.
?iriu?
Есть идея как исправить ?
Adel Gilyazeev
Тут каждая строка это отдельное поле ввода( и она слетает когда он ребилдит, почти после остановки ввода
Вадим Резниченко
ты при каждом инитстейт делаешь новый стрим
Вадим Резниченко
через getSharedPrefs
Вадим Резниченко
и у тебя все летит
Вадим Резниченко
стрим создается один раз
Вадим Резниченко
точнее должен
Вадим Резниченко
а у тебя каждый раз новый
Вадим Резниченко
так низзя делать
Adel Gilyazeev
У него она асинхронная, и там аваит до присвоения стрима, так что в итоге стрим послн инитстнйта создан не будет
Вадим Резниченко
он будет создан. у него там еще и сетстейт в функции
Вадим Резниченко
в общем там на самом деле каша из ui и логики
Вадим Резниченко
поэтому могу посоветовать лишь одно
?iriu?
Так.. моя ошибка это поставление getSharedPrefs внутри стейта ?
Adel Gilyazeev
Создан то будет, но не сразу после инитстнйта, я это имел ввиду, а через время
Maksus
Ребят, подскажите пожалуйста, как лучше хранить конфигурацию темы для переиспользования в других приложениях Флаттера
Вадим Резниченко
твоя ошибка это отсутствие хоть какой либо архитектуры
Adel Gilyazeev
А чё здесь у него тоже аватарка слетела?! Как так?! Что за магия?
Вадим Резниченко
в каком нибудь файле dart в const Map-е
Adel Gilyazeev
Отдельным дарт файлом, я думаю
Maksus
Спасибо, ребят, я больше спрашиваю в каком формате, чтоб просто передать инстанс в МатериалАпп
Вадим Резниченко
и даже не думай хранить это в json
Adel Gilyazeev
И ещё можно запихнуть его в пакет, опубликовать в пабдеве, и в каждом новом проекте подключать его)
Adel Gilyazeev
MaterialThemeData
Вадим Резниченко
[
"ну хспд, \nconst theme = {\n 'mainColor': ",
{
"type": "link",
"text": "Colors.black"
},
",\n}"
]
Adel Gilyazeev
В том же типе что и требует твой виджетАпп
Maksus
Значит Мапу с ключами названия ThemeData ы?
Вадим Резниченко
а если у меня не материал?
Adel Gilyazeev
Ещё как вариант расширить его если тебе нужны там доп поля
Adel Gilyazeev
В том же типе что и требует твой виджетАпп
Adel Gilyazeev
а если у меня не материал?
Вадим Резниченко
зачем, если можно так
Вадим Резниченко
не надо два конфига под разные аппы
Вадим Резниченко
смысл изобретать велосипед
Вадим Резниченко
theme тянет за собой тонну ненужного
Вадим Резниченко
а так для чего угодно можно что угодно сделать
Adel Gilyazeev
Сделай примесь со своей темой и расширяй класс который требует твой виджетАпп с этой примесью, и соответственно этот расширенный класс кидай дальше в виджетАпп
Maksus
Расширить? Всмысле унаследовать и сделать новый класс с новыми свойствами?
Вадим Резниченко
так очень сильно страдает гибкость
Adel Gilyazeev
Потом при получении из контекста апкасть, или в своем классе реализуй .of
Maksus
А зачем такая дрочка...
Вадим Резниченко
а если нет контекста
Maksus
Это по сути изобретение своей ThemeData
Вадим Резниченко
вот именно поэтому старый добрый map проще
Adel Gilyazeev
Зато нет танцев с бубном для вызова всяких пикеров, диалоговых окон и других многокомпонентных виджетов из материала/купертины
Maksus
Просто создам Мапу и передать её в ThemeData(map)
Вадим Резниченко
вот именно тупо пробрасываешь цвет
Adel Gilyazeev
Ты её дополняешь
Вадим Резниченко
зачем? глобальной переменной и вперед
Вадим Резниченко
да куда угодно и без контекста
Adel Gilyazeev
Ты же сам там что-то за архитектуру заикался) не надо так(
Вадим Резниченко
а это как то противоречит mvc?
Вадим Резниченко
это модель темы
Maksus
Чувак... Ты уже реально споришь ради спора везде, ну хорош
Adel Gilyazeev
В showCupertinoDataPicker как мне свои цвета пробросить? Я видел лишь что там могу настроить только тему текста и всё
Adel Gilyazeev
Ладно, осадили с архитектурой, я мб не прав
Maksus
Мне не важно тут особо глубина проблемы Темы, мне нужна просто конфигурация, мап идеально подходит
Вадим Резниченко
даже не знаю
Adel Gilyazeev
А селектора?
Adel Gilyazeev
Который по середине
Adel Gilyazeev
Как серый цвет поменять на другой?
Adel Gilyazeev
Я в доке не нашёл (
Вадим Резниченко
его уже через тему
Вадим Резниченко
но это как бы ничего не меняет
Вадим Резниченко
через map все равно удобнее
Вадим Резниченко
и через map можно это изменить в логике, а не только считать через контекст через тему
Вадим Резниченко
плюс изменение через тему затрачивает чуть больше производительности, потому что notifyListeners вызовется на эту переменную
Вадим Резниченко
и придется прочекать всю тему
Adel Gilyazeev
Мне не удобно, когда ключей много и не помню их названий, а туда сюда файлы смотреть время тратит... Хотя ладно, я предложил, вы отказались)
Вадим Резниченко
через модель можно хоть по одной переменной на каждую затычку
Maksus
Так называй их также как поля в темедате
Вадим Резниченко
но ты же запоминаешь что куда положил в themeData, какая вообще разница?
Adel Gilyazeev
Так глобальная тема не должна часто меняться
Вадим Резниченко
и все же
Adel Gilyazeev
Нет) я это делаю один раз и потом вообще к теме не обращаюсь
Adel Gilyazeev
Я могу опечататься при вводе, и потом словить эксепшон что типы нее совпадают
Adel Gilyazeev
А через ctrl + probel он мне подскажет
Adel Gilyazeev
Да я из Англии)
Adel Gilyazeev
Потому я сейчас начинаю смотреть в сторону генерации дарт кода для l10n вместо загрузки их из файла
Adel Gilyazeev
Ах, ладно, извините что я говнокодинг пытаюсь продвигать
Adel Gilyazeev
Тут я ошибся, стиль текста только через тему можно задать...
Adel Gilyazeev
И да тема выделение серым не меняет никак, тут ты прав
Adel Gilyazeev
Ну я не нашёл по крайней мере тогда
Yakov K.
[
"Решил открыть код пока без стрелок, всем спасибо за помощь :) \n\n",
{
"type": "link",
"text": "https://github.com/purplenoodlesoop/simple-dart-repl"
},
""
]
Adel Gilyazeev
Ну я это тут может быть тоже поморосил... Я всё таки зачастую спорю, чтобы мне как-то аргументы/факты накидали, раскрыли полезные и плохие аспекты обеих сторон... Потому что иногда получается, что я вот так вот спорю спорю а в итоге думаю, что "Вау, а это ведь действительно будет удобнее и правильнее, плюс производительнее" и всё, я считай принял на вооружение и когда ещё примеры приводят в таких случаях это вообще бомба, но я буду продолжать своё мнение отстаивать пока не надоест ибо ещё чё можно полезного узнать... Хотя с Фоксом это не прокатывает, но от него другого интересно понабраться
Yakov K.
Чёт я не вовремя кажется))
Adel Gilyazeev
REPL аббревиатура кажется знакомой... Это случаем не интерпритатор ввода?
Yakov K.
Он самый Read Eval Print Loop
Dmitry
Кто тесты умеет писать, можете подсказать, как коллбэки мокать? Если конкретно, то пытаюсь написать тесты для класса авторизации, где используется Firebase
Adel Gilyazeev
Я так понимаю сам пишешь парсер/токенизатор кода дарт?
Yakov K.
Нет, просто REPL :)
Adel Gilyazeev
Ну тебе же надо разобрать как то строку чтобы понять где идентификатор, где что? Советую показаться в исходниках дарт анализатора, форматировщика, кодогенератора... В общем парсера... Могу помочь найти функцию которая строку кода дарт парсит в дерево токенов/лексем
Yakov K.
Так это в одну функцию на 20 строк делается, уже готово всё :)
Yakov K.
[
{
"type": "link",
"text": "https://github.com/purplenoodlesoop/simple-dart-repl/blob/master/lib/modules/code_generation.dart"
},
"\n\nС 10 строки"
]
Adel Gilyazeev
Постой что у тебя оно должно делать? Считать строку кода дарт исполнить её, напечатать результат, повторить сначала
Yakov K.
То же, что делают все REPLы
Adel Gilyazeev
А дарт код ты зачем генерируешь?
Yakov K.
Считать введённую строку, исполнить её, сохранить и повторить
Yakov K.
Почитай как работает REPL :)
Adel Gilyazeev
У тебя то есть считается строка, она оборачивается в код void main() => print($lineCode); и потом ты этот код запускаешь через ВМ дарта и получаешь результат и его печатаешь у себя?
Yakov K.
[
{
"type": "link",
"text": "https://github.com/purplenoodlesoop/simple-dart-repl/blob/master/lib/modules/repl.dart"
},
"\n\nФункция _evaluate"
]
Adel Gilyazeev
А как ты тогда Eval делаешь?
Yakov K.
Ничего своего не придумал, это классический repl
Adel Gilyazeev
А то есть изолят вместо ВМ запускает сгенереный код?
Adel Gilyazeev
Не знал о таком
Yakov K.
Результаты через порты принимается
Adel Gilyazeev
Я лишь знал что где-то в закромах Дарта можно найти функцию eval
Adel Gilyazeev
Но где искать я не имел понятия
Yakov K.
этим лучше не злоупотреблять, можно в ногу себе выстрелить :)
Adel Gilyazeev
В смысле, чем?
Yakov K.
Выполнением кода из строк через изоляты
Yakov K.
Как и eval в JS, небезопасная штука
Adel Gilyazeev
Потому предлагаю отыскать злощастную функцию eval()
Adel Gilyazeev
Они кроме эксепшона ничего не поламают
Adel Gilyazeev
Ну и файловой системы если там с ио работа
Yakov K.
Её не существует
Yakov K.
Аналог eval это как раз uri изоляты
Adel Gilyazeev
В дебагере существует же, он же эксепшон выбрасывает, и там в стектрейсе функция eval
Adel Gilyazeev
Значит где-то в закромах есть
Yakov K.
[
{
"type": "link",
"text": "https://www.geeksforgeeks.org/is-javascripts-eval-evil/"
}
]
Yakov K.
Похоже чисто штука дебаггера, я не нашёл её когда искал для этого проекта
Adel Gilyazeev
Ну это дело понятное, но этим ты в ногу себе не выстрелишь
Adel Gilyazeev
Хотя если ты другим даешь контроль над своим eval то да
Adel Gilyazeev
А так ты сам себе враг что ль)
Yakov K.
Я именно об этом :)
Adel Gilyazeev
А парсеры не искал? Которые анализатором, кодогенератором, форматерром используются
Adel Gilyazeev
Жаль что дебагер Дарта это часть Дарта, а он опенсорсный)))
Eldar
Ребя, Подскажите либу по Локализации без доступа к контексту плз !
Вадим Резниченко
выше обсуждали. делаешь Map с данными и ставишь его глобальной переменной
Eldar
[
{
"type": "link",
"text": "https://www.fluttericon.com/"
},
" - 502 Bad GateWay. Че то страшно"
]
MiT
Тема в map, локалка в map… Все глобальное. Вы из js? Не рекомендую так делать, выстрел в ноги (хотя и не явный)
Вадим Резниченко
нет, я из бэка на питоне а почему выстрел в ногу?
Константин Бобров
почему текст не может отобразиться нужным шрифтом, хотя все делаю, как в доках (вроде все так)
Maksus
А как лучше хранить и передавать конфигурацию темы в приложения
4??uzhoy .
ThemeData не ?
4??uzhoy .
или не о том вопрос
Вадим Резниченко
нет, именно о том
Maksus
То есть мне создать файл с инстансом ThemeData и импортировать его в апку?
MiT
В моем случае это либо кастомная тема с доступом через контекст, либо расширение существующих в sdk. Проблему с конфигурацией (даже если приходит с бэка) не вижу вообще
Вадим Резниченко
так почему в глобальной переменной выстрел в ногу то?
Вадим Резниченко
если это как конфиг
Вадим Резниченко
если как модель, то в отдельную модель запихнуть
Alex Wow
Потому что имеют доступ все желаюшие
Alex Wow
Сделай класс и доступ по полям
MiT
А почему нет то? Почему он должен быть виден во всем приложении? А почему тупо синглтоны не делать?
Вадим Резниченко
так все равно доступ у всех желающих будет
4??uzhoy .
[
{
"type": "code",
"text": " theme: context.settings.themeEntity.current,"
}
]
Alex Wow
Тебе надо его инициализировать чтобы был доступ
MiT
Смотря как сделаешь… Принцип открытости/закрытости
Вадим Резниченко
переменную тоже) в чем разница то?
4??uzhoy .
с цветами уже сам решишь, можешь сделать свою тему и от нее наследовать все все в своих приложениях будущих
Andrew Shalaev
Поделитесь опытом использования Firebase realtime database, кто использовал ее в продакшене, хватает ли 100 бесплатных коннекций? Сколько платите если вылазите за лимиты? Правильно ли понимаю, что на бесплатном пакете подойдет только для прототипа приложения?
Maksus
Не не, я понял, мне главное принцип, спасибл
|