mirror of
https://github.com/zapstore/zapstore.git
synced 2026-10-05 12:38:24 +00:00
Disable GoRouter page transitions to reduce weird navigation glitches
Switch GoRouter routes from builder to pageBuilder and wrap pages with CustomTransitionPage using zero-duration/no-op transitions. This removes default Material route animations to reduce the weird transitions reported on low-performance scenarios in issue #310.
This commit is contained in:
+44
-13
@@ -20,6 +20,19 @@ final rootNavigatorKey = GlobalKey<NavigatorState>();
|
|||||||
|
|
||||||
typedef _ResolvedRoute = ({String identifier, String? author});
|
typedef _ResolvedRoute = ({String identifier, String? author});
|
||||||
|
|
||||||
|
CustomTransitionPage<void> _noTransitionPage({
|
||||||
|
required GoRouterState state,
|
||||||
|
required Widget child,
|
||||||
|
}) {
|
||||||
|
return CustomTransitionPage<void>(
|
||||||
|
key: state.pageKey,
|
||||||
|
child: child,
|
||||||
|
transitionsBuilder: (context, animation, secondaryAnimation, child) => child,
|
||||||
|
transitionDuration: Duration.zero,
|
||||||
|
reverseTransitionDuration: Duration.zero,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
_ResolvedRoute _resolveNaddrRouteId(String rawId) {
|
_ResolvedRoute _resolveNaddrRouteId(String rawId) {
|
||||||
if (rawId.startsWith('naddr1')) {
|
if (rawId.startsWith('naddr1')) {
|
||||||
try {
|
try {
|
||||||
@@ -38,12 +51,15 @@ _ResolvedRoute _resolveNaddrRouteId(String rawId) {
|
|||||||
GoRoute _appDetailRoute() {
|
GoRoute _appDetailRoute() {
|
||||||
return GoRoute(
|
return GoRoute(
|
||||||
path: 'app/:id',
|
path: 'app/:id',
|
||||||
builder: (context, state) {
|
pageBuilder: (context, state) {
|
||||||
final rawId = state.pathParameters['id']!;
|
final rawId = state.pathParameters['id']!;
|
||||||
final resolved = _resolveNaddrRouteId(rawId);
|
final resolved = _resolveNaddrRouteId(rawId);
|
||||||
return AppDetailScreen(
|
return _noTransitionPage(
|
||||||
appId: resolved.identifier,
|
state: state,
|
||||||
authorPubkey: resolved.author,
|
child: AppDetailScreen(
|
||||||
|
appId: resolved.identifier,
|
||||||
|
authorPubkey: resolved.author,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -53,12 +69,15 @@ GoRoute _appDetailRoute() {
|
|||||||
GoRoute _stackDetailRoute() {
|
GoRoute _stackDetailRoute() {
|
||||||
return GoRoute(
|
return GoRoute(
|
||||||
path: 'stack/:id',
|
path: 'stack/:id',
|
||||||
builder: (context, state) {
|
pageBuilder: (context, state) {
|
||||||
final rawId = state.pathParameters['id']!;
|
final rawId = state.pathParameters['id']!;
|
||||||
final resolved = _resolveNaddrRouteId(rawId);
|
final resolved = _resolveNaddrRouteId(rawId);
|
||||||
return AppStackScreen(
|
return _noTransitionPage(
|
||||||
stackId: resolved.identifier,
|
state: state,
|
||||||
authorPubkey: resolved.author,
|
child: AppStackScreen(
|
||||||
|
stackId: resolved.identifier,
|
||||||
|
authorPubkey: resolved.author,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -68,9 +87,12 @@ GoRoute _stackDetailRoute() {
|
|||||||
GoRoute _userRoute() {
|
GoRoute _userRoute() {
|
||||||
return GoRoute(
|
return GoRoute(
|
||||||
path: 'user/:pubkey',
|
path: 'user/:pubkey',
|
||||||
builder: (context, state) {
|
pageBuilder: (context, state) {
|
||||||
final pubkey = state.pathParameters['pubkey']!;
|
final pubkey = state.pathParameters['pubkey']!;
|
||||||
return UserScreen(pubkey: pubkey);
|
return _noTransitionPage(
|
||||||
|
state: state,
|
||||||
|
child: UserScreen(pubkey: pubkey),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -104,7 +126,10 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/search',
|
path: '/search',
|
||||||
builder: (context, state) => const SearchScreen(),
|
pageBuilder: (context, state) => _noTransitionPage(
|
||||||
|
state: state,
|
||||||
|
child: const SearchScreen(),
|
||||||
|
),
|
||||||
routes: [_appDetailRoute(), _stackDetailRoute(), _userRoute()],
|
routes: [_appDetailRoute(), _stackDetailRoute(), _userRoute()],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -114,7 +139,10 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/updates',
|
path: '/updates',
|
||||||
builder: (context, state) => const UpdatesScreen(),
|
pageBuilder: (context, state) => _noTransitionPage(
|
||||||
|
state: state,
|
||||||
|
child: const UpdatesScreen(),
|
||||||
|
),
|
||||||
routes: [_appDetailRoute(), _stackDetailRoute(), _userRoute()],
|
routes: [_appDetailRoute(), _stackDetailRoute(), _userRoute()],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -124,7 +152,10 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/profile',
|
path: '/profile',
|
||||||
builder: (context, state) => const ProfileScreen(),
|
pageBuilder: (context, state) => _noTransitionPage(
|
||||||
|
state: state,
|
||||||
|
child: const ProfileScreen(),
|
||||||
|
),
|
||||||
routes: [_appDetailRoute(), _stackDetailRoute(), _userRoute()],
|
routes: [_appDetailRoute(), _stackDetailRoute(), _userRoute()],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user