refactor: remove redundant AnimatedSwitcher and update routing transitions to use slide animations for detail screens
This commit is contained in:
@@ -83,23 +83,8 @@ class _AppShellState extends State<AppShell> {
|
||||
child: const HomeHeader(),
|
||||
),
|
||||
Expanded(
|
||||
child: AnimatedSwitcher(
|
||||
duration: const Duration(milliseconds: 250),
|
||||
switchInCurve: Curves.easeOut,
|
||||
switchOutCurve: Curves.easeIn,
|
||||
transitionBuilder: (child, animation) {
|
||||
return FadeTransition(
|
||||
opacity: animation,
|
||||
child: child,
|
||||
);
|
||||
},
|
||||
child: SizedBox(
|
||||
key: ValueKey(widget.child.runtimeType.hashCode ^
|
||||
widget.child.hashCode),
|
||||
child: widget.child,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: const AppBottomNavBar(),
|
||||
|
||||
@@ -132,17 +132,7 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
);
|
||||
},
|
||||
),
|
||||
GoRoute(
|
||||
path: '/agents/detail/:id',
|
||||
pageBuilder: (context, state) {
|
||||
final id = state.pathParameters['id']!;
|
||||
return CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: AgentDetailScreen(agentId: id),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
);
|
||||
},
|
||||
),
|
||||
// ── Tab routes (fade) ──
|
||||
GoRoute(
|
||||
path: '/messages',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
@@ -153,6 +143,51 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/agent/network',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const AgentNetworkScreen(),
|
||||
transitionDuration: const Duration(milliseconds: 200),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 150),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/profile',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const ProfileSettingsScreen(),
|
||||
transitionDuration: const Duration(milliseconds: 200),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 150),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/notifications',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const NotificationsScreen(),
|
||||
transitionDuration: const Duration(milliseconds: 200),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 150),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
|
||||
// ── Detail/push routes (slide from right) ──
|
||||
GoRoute(
|
||||
path: '/agents/detail/:id',
|
||||
pageBuilder: (context, state) {
|
||||
final id = state.pathParameters['id']!;
|
||||
return CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: AgentDetailScreen(agentId: id),
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
);
|
||||
},
|
||||
),
|
||||
GoRoute(
|
||||
path: '/messages/chat/:id',
|
||||
pageBuilder: (context, state) {
|
||||
@@ -171,7 +206,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const FaqScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
@@ -179,7 +216,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const ContactScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
@@ -187,23 +226,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const AboutScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/agent/network',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const AgentNetworkScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/profile',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const ProfileSettingsScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
@@ -211,15 +236,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const AgentEditProfileScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/notifications',
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const NotificationsScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
@@ -227,7 +246,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
pageBuilder: (context, state) => CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: const SupportChatScreen(),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
),
|
||||
),
|
||||
GoRoute(
|
||||
@@ -237,7 +258,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
||||
return CustomTransitionPage(
|
||||
key: state.pageKey,
|
||||
child: PaymentSuccessScreen(sessionId: sessionId),
|
||||
transitionsBuilder: _fadeTransition,
|
||||
transitionDuration: const Duration(milliseconds: 250),
|
||||
reverseTransitionDuration: const Duration(milliseconds: 200),
|
||||
transitionsBuilder: _slideTransition,
|
||||
);
|
||||
},
|
||||
),
|
||||
@@ -286,11 +309,15 @@ Widget _slideTransition(
|
||||
begin: const Offset(1, 0),
|
||||
end: Offset.zero,
|
||||
).animate(CurvedAnimation(parent: animation, curve: Curves.easeOut)),
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Smooth fade transition for tab-to-tab navigation.
|
||||
/// Uses a white container behind to prevent content overlap during transition.
|
||||
Widget _fadeTransition(
|
||||
BuildContext context,
|
||||
Animation<double> animation,
|
||||
@@ -298,8 +325,11 @@ Widget _fadeTransition(
|
||||
Widget child,
|
||||
) {
|
||||
return FadeTransition(
|
||||
opacity: CurveTween(curve: Curves.easeInOut).animate(animation),
|
||||
opacity: CurveTween(curve: Curves.easeIn).animate(animation),
|
||||
child: Container(
|
||||
color: Colors.white,
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user