#flutter #user-interface #flutter-layout
#flutter #пользовательский интерфейс #flutter-layout
Вопрос:
У меня есть MultiChildRenderObjectWidget, который будет размещать некоторые дочерние элементы выше или ниже нижней части измерения высоты экрана. Я передаю дочерние элементы в свой виджет и изначально размещаю дочерние элементы на основе размеров экрана, к которым я могу получить доступ, потому что мне передано a BuildContext
в RenderObject createRenderObject(BuildContext context)
функции. Кажется, он работает хорошо.
Однако, когда размер экрана изменяется, как я могу повторно выполнить performLayout
on my RenderObject
, чтобы он передавал дочерние элементы для нового размера экрана?
class AuthContent extends MultiChildRenderObjectWidget {
AuthContent({
Key key,
this.background,
this.actionBar,
this.loginForm,
this.disclosure,
}) : assert(background != null),
assert(actionBar != null),
assert(loginForm != null),
assert(disclosure != null),
super(
key: key, children: [background, actionBar, disclosure, loginForm]);
final Background background;
final ActionBar actionBar;
final Disclosure disclosure;
final LoginForm loginForm;
@override
RenderObject createRenderObject(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return RenderAuthContent(screenSize: screenSize);
}
}
Комментарии:
1. Что вы подразумеваете под изменением размера экрана? Переключаться с портретной ориентации на альбомную, поворачивая экран?
2. Конечно, это может быть один из сценариев, но также подумайте о рабочем столе или Интернете, и я изменю размер браузера / окна.
Ответ №1:
Нашел хороший пример работы с RenderObject в статье Ника «Как создать виджет Flutter с помощью RenderObject«.
Чего мне не хватало, так это updateRenderObject
метода. Переопределяя это, я могу передавать новые свойства RenderObject
, которые он может использовать во время performLayout
метода.
@override
void updateRenderObject(
BuildContext context, RenderAuthContent renderObject) {
renderObject..screenSize = screenSize;
}
В моем случае меня волнует изменение размера экрана.