fix: never use a transition on the shell route

Changing the PageBuilder here based on a MediaQuery causes the child to briefly
be rendered twice with the same GlobalKey, blowing up the rendering.

I believe this fixes https://github.com/krille-chan/fluffychat/issues/1534.
This commit is contained in:
Rafał Hirsch 2025-02-24 21:33:09 +01:00
commit 7b3c1ada03
No known key found for this signature in database

View file

@ -87,7 +87,10 @@ abstract class AppRoutes {
), ),
), ),
ShellRoute( ShellRoute(
pageBuilder: (context, state, child) => defaultPageBuilder( // Never use a transition on the shell route. Changing the PageBuilder
// here based on a MediaQuery causes the child to briefly be rendered
// twice with the same GlobalKey, blowing up the rendering.
pageBuilder: (context, state, child) => noTransitionPageBuilder(
context, context,
state, state,
FluffyThemes.isColumnMode(context) && FluffyThemes.isColumnMode(context) &&
@ -458,17 +461,24 @@ abstract class AppRoutes {
), ),
]; ];
static Page noTransitionPageBuilder(
BuildContext context,
GoRouterState state,
Widget child,
) =>
NoTransitionPage(
key: state.pageKey,
restorationId: state.pageKey.value,
child: child,
);
static Page defaultPageBuilder( static Page defaultPageBuilder(
BuildContext context, BuildContext context,
GoRouterState state, GoRouterState state,
Widget child, Widget child,
) => ) =>
FluffyThemes.isColumnMode(context) FluffyThemes.isColumnMode(context)
? NoTransitionPage( ? noTransitionPageBuilder(context, state, child)
key: state.pageKey,
restorationId: state.pageKey.value,
child: child,
)
: MaterialPage( : MaterialPage(
key: state.pageKey, key: state.pageKey,
restorationId: state.pageKey.value, restorationId: state.pageKey.value,