Size: a a a

Dart & Flutter по-русски

2020 November 29

MK

Maks Kravchenko in Dart & Flutter по-русски
Да, но didChangeDependencies может выполниться несколько раз
Поэтому если речь о действии после отрисовки - лучше initState + addPostFrameCallback
Там тоже доступен контекст, но вызывается один раз после первого рендера виджета
источник

M

MiT in Dart & Flutter по-русски
Maks Kravchenko
Да, но didChangeDependencies может выполниться несколько раз
Поэтому если речь о действии после отрисовки - лучше initState + addPostFrameCallback
Там тоже доступен контекст, но вызывается один раз после первого рендера виджета
Есть моменты когда initState + addPostFrameCallback не помогут и нужно будет использовать didChangedDependencies с проверкой.
источник

MK

Maks Kravchenko in Dart & Flutter по-русски
Например?
источник

V

Vadim in Dart & Flutter по-русски
Maks Kravchenko
Да, но didChangeDependencies может выполниться несколько раз
Поэтому если речь о действии после отрисовки - лучше initState + addPostFrameCallback
Там тоже доступен контекст, но вызывается один раз после первого рендера виджета
Верно, он больше для inheritedWidget предназначен, с другой стороны он говорит, что у виджета изменились зависимости и, зачастую, необходимо и код выполнить который используется при 'инициализации', для меня didPostframecallback выглядит небольшим костылем, который не  учитывает конкретный вопрос, а просто в лоб решает задачу
источник

M

MiT in Dart & Flutter по-русски
Maks Kravchenko
Например?
всякие controller'ы и данные для них из контекста
источник

MK

Maks Kravchenko in Dart & Flutter по-русски
Maks Kravchenko
не уверен на 100% но я бы попробовал следующее:

в виджете хранить угол поворота, который по дефолту равняется 0

в Image прокинуть GlobalKey чтобы можно было получить размеры из RenderBox
например:
final box = keyContext.findRenderObject() as RenderBox;
box.size.height

и в initState в зависимости от соотношения сторон поменять угол поворота
Вот тут был конкретный вопрос когда нужно было после первой отрисовки выполнить действие
источник

V

Vadim in Dart & Flutter по-русски
Maks Kravchenko
Вот тут был конкретный вопрос когда нужно было после первой отрисовки выполнить действие
Сама подвязка на "после первой отрисовки", для фреймворка в котором отрисовка вызывается "снаружи" и 60 раз в секунду, имхо не очень подход. Для этого как раз  и есть didChangedDependencies, который контролируется фреймворком, а не нашими "хитрыми" перехватами рендеринга, один раз вызвал, и если зависимости не меняются, больше вызываться не будет.
источник

ЕБ

Евгений Баладжа... in Dart & Flutter по-русски
Vadim
Сама подвязка на "после первой отрисовки", для фреймворка в котором отрисовка вызывается "снаружи" и 60 раз в секунду, имхо не очень подход. Для этого как раз  и есть didChangedDependencies, который контролируется фреймворком, а не нашими "хитрыми" перехватами рендеринга, один раз вызвал, и если зависимости не меняются, больше вызываться не будет.
+
источник

MK

Maks Kravchenko in Dart & Flutter по-русски
Vadim
Сама подвязка на "после первой отрисовки", для фреймворка в котором отрисовка вызывается "снаружи" и 60 раз в секунду, имхо не очень подход. Для этого как раз  и есть didChangedDependencies, который контролируется фреймворком, а не нашими "хитрыми" перехватами рендеринга, один раз вызвал, и если зависимости не меняются, больше вызываться не будет.
Но если цель именно «после первой отрисовки» -  не вижу смысла в didChangedDependencies
источник

V

Vadim in Dart & Flutter по-русски
Maks Kravchenko
Но если цель именно «после первой отрисовки» -  не вижу смысла в didChangedDependencies
Может пересмотреть цель)) иногда бывают, конечно, цель - запихнуть бизнес-логику в виджет, например, но, тут имхо хозяин барин конечно.
источник

MK

Maks Kravchenko in Dart & Flutter по-русски
Vadim
Может пересмотреть цель)) иногда бывают, конечно, цель - запихнуть бизнес-логику в виджет, например, но, тут имхо хозяин барин конечно.
В том примере, который присылал - как раз и пересмотрели в сторону FutureBuilder<ui.Image> 🙂
источник

V

Vadim in Dart & Flutter по-русски
Да, я на самом деле, не топлю, прям против didPostframecallback, просто раньше тоже использовал в некоторых случаях при инициализации виджетов, но, из практики, оказалось он не нужен нигде был, все решалось "стандартными" механизмами фреймворка.
источник

AZ

Alexey Z in Dart & Flutter по-русски
Vadim
Да, я на самом деле, не топлю, прям против didPostframecallback, просто раньше тоже использовал в некоторых случаях при инициализации виджетов, но, из практики, оказалось он не нужен нигде был, все решалось "стандартными" механизмами фреймворка.
Согласен, в 99% случаях didPostframecallback используется с костылями
источник

ZR

Ziber Ratch in Dart & Flutter по-русски
Всем привет) Хочется узнать у чатика. Я делаю приложение чисто на http запросах. Вся инфа грузится с запросов на сервак. Я слышал что используется firebase, знаю что это бд нереялционная, но зачем какая то промежуочная бд между сервером и мобилкой не понимаю. Мб к http запросам надо кеширование каких то данных? Есть ультимативные фреймворки для кеширования ?
источник

ДЩ

Дмитрий Щербаков... in Dart & Flutter по-русски
Кеширование нужно если отдаешь много статики, чтобы не нагружать сервер
источник

ДЩ

Дмитрий Щербаков... in Dart & Flutter по-русски
Например цены меняются раз в день, соотв логично и кешировать их на сутки
источник

V

Vadim in Dart & Flutter по-русски
Alexey Z
Согласен, в 99% случаях didPostframecallback используется с костылями
Да, в принципе, сейчас когда возникает "необходимость" подвязок на рендер слой, через didPostframeCallback или RenderObject,  я сразу думаю, где я свернул не туда))
Количество "стандартных" виджетов, и виджетов общающихся с рендерслоем, через делегаты например, просто намекает, на то, что я чего-то не знаю о всех виджетах, или у меня прям исключительный случай, который в 99,99%)) никто не использовал до этого
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Vadim
Сама подвязка на "после первой отрисовки", для фреймворка в котором отрисовка вызывается "снаружи" и 60 раз в секунду, имхо не очень подход. Для этого как раз  и есть didChangedDependencies, который контролируется фреймворком, а не нашими "хитрыми" перехватами рендеринга, один раз вызвал, и если зависимости не меняются, больше вызываться не будет.
Тоже не очень нравится постфрейм коллбэк. Но бывают ситуации когда других вариантов нет. Например недавно у меня была проблема, когда нужно было определить размер виджета. Другого способа не нашел.
источник

V

Vadim in Dart & Flutter по-русски
Evgeny Cherkasov
Тоже не очень нравится постфрейм коллбэк. Но бывают ситуации когда других вариантов нет. Например недавно у меня была проблема, когда нужно было определить размер виджета. Другого способа не нашел.
конечно, от таски надо смотреть, но стараюсь чтобы задач по "определению размеров виджетов" было как можно меньшье, для лэйаутов че сейчас только нет, и фиксированных и флексибл, и с делегатами до рендерслоя как например,  CustomSingleChildLayout.
Но, реально, фреймворк развивается, если возникла потребность к доступу в рендер слой из слоя виджетов, может какого виджета и не хватает для полного счастья))
источник

EC

Evgeny Cherkasov in Dart & Flutter по-русски
Vadim
конечно, от таски надо смотреть, но стараюсь чтобы задач по "определению размеров виджетов" было как можно меньшье, для лэйаутов че сейчас только нет, и фиксированных и флексибл, и с делегатами до рендерслоя как например,  CustomSingleChildLayout.
Но, реально, фреймворк развивается, если возникла потребность к доступу в рендер слой из слоя виджетов, может какого виджета и не хватает для полного счастья))
У меня был виджет с двумя состояниями, в первом он отрисовывается с ограничениями родителя, а во втором должен сохранить размеры, которые получил в первом состоянии. Кроме как взять размеры из рендер объекта в постфрейм коллбэке не нашел варианта, хотя были подозрения что может как то ещё можно.
источник