feat(permissions): add SMS permission screen and settings button; route from splash on Android

This commit is contained in:
JiWoong Sul
2025-09-07 19:33:11 +09:00
parent 2a90e7c377
commit f812d4b9fd
5 changed files with 249 additions and 15 deletions

View File

@@ -6,6 +6,7 @@ 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/screens/sms_permission_screen.dart';
import 'package:submanager/models/subscription_model.dart';
class AppRoutes {
@@ -16,6 +17,7 @@ class AppRoutes {
static const String smsScanner = '/sms-scanner';
static const String analysis = '/analysis';
static const String settings = '/settings';
static const String smsPermission = '/sms-permission';
static Map<String, WidgetBuilder> getRoutes() {
return {
@@ -25,6 +27,7 @@ class AppRoutes {
smsScanner: (context) => const SmsScanScreen(),
analysis: (context) => const AnalysisScreen(),
settings: (context) => const SettingsScreen(),
smsPermission: (context) => const SmsPermissionScreen(),
};
}
@@ -32,29 +35,33 @@ class AppRoutes {
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 _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);
case smsPermission:
return _buildRoute(const SmsPermissionScreen(), routeSettings);
default:
return _errorRoute();
}
@@ -77,15 +84,18 @@ class AppRoutes {
);
}
static void navigateTo(BuildContext context, String routeName, {Object? arguments}) {
static void navigateTo(BuildContext context, String routeName,
{Object? arguments}) {
Navigator.pushNamed(context, routeName, arguments: arguments);
}
static void navigateAndReplace(BuildContext context, String routeName, {Object? 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}) {
static void navigateAndRemoveUntil(BuildContext context, String routeName,
{Object? arguments}) {
Navigator.pushNamedAndRemoveUntil(
context,
routeName,
@@ -103,4 +113,4 @@ class AppRoutes {
static bool canPop(BuildContext context) {
return Navigator.canPop(context);
}
}
}