Major UI/UX and architecture improvements
- Implemented new navigation system with NavigationProvider and route management - Added adaptive theme system with ThemeProvider for better theme handling - Introduced glassmorphism design elements (app bars, scaffolds, cards) - Added advanced animations (spring animations, page transitions, staggered lists) - Implemented performance optimizations (memory manager, lazy loading) - Refactored Analysis screen into modular components - Added floating navigation bar with haptic feedback - Improved subscription cards with swipe actions - Enhanced skeleton loading with better animations - Added cached network image support - Improved overall app architecture and code organization 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
106
lib/routes/app_routes.dart
Normal file
106
lib/routes/app_routes.dart
Normal file
@@ -0,0 +1,106 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:submanager/screens/main_screen.dart';
|
||||
import 'package:submanager/screens/add_subscription_screen.dart';
|
||||
import 'package:submanager/screens/detail_screen.dart';
|
||||
import 'package:submanager/screens/sms_scan_screen.dart';
|
||||
import 'package:submanager/screens/analysis_screen.dart';
|
||||
import 'package:submanager/screens/settings_screen.dart';
|
||||
import 'package:submanager/screens/splash_screen.dart';
|
||||
import 'package:submanager/models/subscription_model.dart';
|
||||
|
||||
class AppRoutes {
|
||||
static const String splash = '/splash';
|
||||
static const String main = '/';
|
||||
static const String addSubscription = '/add-subscription';
|
||||
static const String subscriptionDetail = '/subscription-detail';
|
||||
static const String smsScanner = '/sms-scanner';
|
||||
static const String analysis = '/analysis';
|
||||
static const String settings = '/settings';
|
||||
|
||||
static Map<String, WidgetBuilder> getRoutes() {
|
||||
return {
|
||||
splash: (context) => const SplashScreen(),
|
||||
main: (context) => const MainScreen(),
|
||||
addSubscription: (context) => const AddSubscriptionScreen(),
|
||||
smsScanner: (context) => const SmsScanScreen(),
|
||||
analysis: (context) => const AnalysisScreen(),
|
||||
settings: (context) => const SettingsScreen(),
|
||||
};
|
||||
}
|
||||
|
||||
static Route<dynamic> generateRoute(RouteSettings routeSettings) {
|
||||
switch (routeSettings.name) {
|
||||
case splash:
|
||||
return _buildRoute(const SplashScreen(), routeSettings);
|
||||
|
||||
case main:
|
||||
return _buildRoute(const MainScreen(), routeSettings);
|
||||
|
||||
case addSubscription:
|
||||
return _buildRoute(const AddSubscriptionScreen(), routeSettings);
|
||||
|
||||
case subscriptionDetail:
|
||||
final subscription = routeSettings.arguments as SubscriptionModel?;
|
||||
if (subscription != null) {
|
||||
return _buildRoute(DetailScreen(subscription: subscription), routeSettings);
|
||||
}
|
||||
return _errorRoute();
|
||||
|
||||
case smsScanner:
|
||||
return _buildRoute(const SmsScanScreen(), routeSettings);
|
||||
|
||||
case analysis:
|
||||
return _buildRoute(const AnalysisScreen(), routeSettings);
|
||||
|
||||
case settings:
|
||||
return _buildRoute(const SettingsScreen(), routeSettings);
|
||||
|
||||
default:
|
||||
return _errorRoute();
|
||||
}
|
||||
}
|
||||
|
||||
static Route<dynamic> _buildRoute(Widget page, RouteSettings settings) {
|
||||
return MaterialPageRoute(
|
||||
builder: (_) => page,
|
||||
settings: settings,
|
||||
);
|
||||
}
|
||||
|
||||
static Route<dynamic> _errorRoute() {
|
||||
return MaterialPageRoute(
|
||||
builder: (_) => const Scaffold(
|
||||
body: Center(
|
||||
child: Text('페이지를 찾을 수 없습니다'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
static void navigateTo(BuildContext context, String routeName, {Object? arguments}) {
|
||||
Navigator.pushNamed(context, routeName, arguments: arguments);
|
||||
}
|
||||
|
||||
static void navigateAndReplace(BuildContext context, String routeName, {Object? arguments}) {
|
||||
Navigator.pushReplacementNamed(context, routeName, arguments: arguments);
|
||||
}
|
||||
|
||||
static void navigateAndRemoveUntil(BuildContext context, String routeName, {Object? arguments}) {
|
||||
Navigator.pushNamedAndRemoveUntil(
|
||||
context,
|
||||
routeName,
|
||||
(route) => false,
|
||||
arguments: arguments,
|
||||
);
|
||||
}
|
||||
|
||||
static void pop(BuildContext context, {dynamic result}) {
|
||||
if (Navigator.canPop(context)) {
|
||||
Navigator.pop(context, result);
|
||||
}
|
||||
}
|
||||
|
||||
static bool canPop(BuildContext context) {
|
||||
return Navigator.canPop(context);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user