Есть ли способ установить порядок рендеринга маршрутов? - PullRequest
1 голос
/ 07 мая 2019

По сути, я хочу отрендерить ModalRoute, который зависит от какого-то виджета на маршруте под ним.

Для этого я использую GlobalKey, который я прикрепляю к виджету на нижнем маршруте:

/// in LOWER route (widget that is in lower route)
@override
Widget build(BuildContext context) {
  return Container(
    key: globalKey,
    child: ..,
  );
}

/// UPPER route (different class!)
/// called using a function on tap in the lower route widget
/// `showModalRoute(globalKey)` 
@override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
  final renderBox = globalKey.currentContext.findRenderObject() as RenderBox;
  final Size size = renderBox.size;
  return SizedBox(
    width: size.width,
    height: size.height,
    child: ..,
  );
}

Я пытаюсь заставить это реагировать на изменения ориентации .Виджет в нижнем маршруте меняет размер при изменении ориентации.Проблема здесь в том, что верхний маршрут , кажется, построен до верхнего маршрута .Возможно, это не тот случай, однако size всегда является предыдущим размером, т.е. я получаю размер ландшафта при повороте на портретную полосу и наоборот, как если бы верхний маршрут был построен до нижнего маршрута (мое предположение).То же самое относится и к должности.Я в основном получаю предыдущий RenderBox.

Можно ли как-нибудь получить текущую позицию моего виджета, т.е. через renderBox.localToGlobal(0, 0)?Я полагаю, что я мог бы добиться этого с помощью рендера buildPage после того, как GlobalKey получил новый размер.

1 Ответ

1 голос
/ 14 мая 2019

Проверьте этот код, сообщите мне, работает ли он так, как ожидалось

import 'package:rxdart/rxdart.dart';
StreamController<MyWidgetStatus> firstRouteStatus =
   BehaviorSubject();

вы также должны добавить пакет RxDart в pubspec.yaml, это 0,22,0 на момент написания этой строки.

rxdart: ^0.22.0
...