import 'dart:io'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import '../models/data_models.dart'; import 'slide_up_page_route.dart'; import '../pages/movies/movie_form_page.dart'; import '../pages/book/book_form_page.dart'; import '../pages/note/note_form_page.dart'; import '../pages/game/game_form_page.dart'; import '../pages/movies/movie_detail_page.dart'; import '../pages/book/book_detail_page.dart'; import '../pages/note/note_detail_page.dart'; import '../pages/game/game_detail_page.dart'; import '../pages/movies/douban_webview_page.dart'; import '../pages/people/person_form_page.dart'; import '../pages/character/character_form_page.dart'; /// 路由生成器 class AppRouter { static Route? generateRoute(RouteSettings settings) { switch (settings.name) { case '/movie-form': final args = settings.arguments; final Movie? movie = args is Movie ? args : null; final String? initialStatus = args is Map ? (args['initialStatus'] as String?) : null; return SlideUpPageRoute( page: MovieFormPage(movie: movie, initialStatus: initialStatus), ); case '/book-form': final args = settings.arguments; final Book? book = args is Book ? args : null; final String? initialStatus = args is Map ? (args['initialStatus'] as String?) : null; return SlideUpPageRoute( page: BookFormPage(book: book, initialStatus: initialStatus), ); case '/note-form': final args = settings.arguments; final Note? note = args is Note ? args : null; return SlideUpPageRoute(page: NoteFormPage(note: note)); case '/movie-detail': final movie = settings.arguments is Movie ? settings.arguments as Movie : null; if (movie == null) { return _buildUnknownRoute(settings.name); } return SlideUpPageRoute(page: MovieDetailPage(movie: movie)); case '/book-detail': final book = settings.arguments is Book ? settings.arguments as Book : null; if (book == null) { return _buildUnknownRoute(settings.name); } return SlideUpPageRoute(page: BookDetailPage(book: book)); case '/note-detail': final note = settings.arguments is Note ? settings.arguments as Note : null; if (note == null) { return _buildUnknownRoute(settings.name); } return SlideUpPageRoute(page: NoteDetailPage(note: note)); case '/game-form': final args = settings.arguments; final Game? game = args is Game ? args : null; final String? initialStatus = args is Map ? (args['initialStatus'] as String?) : null; return SlideUpPageRoute( page: GameFormPage(game: game, initialStatus: initialStatus), ); case '/game-detail': final game = settings.arguments is Game ? settings.arguments as Game : null; if (game == null) { return _buildUnknownRoute(settings.name); } return SlideUpPageRoute(page: GameDetailPage(game: game)); case '/douban-webview': final url = settings.arguments is String ? settings.arguments as String : null; if (url == null) { return _buildUnknownRoute(settings.name); } if (Platform.isWindows) { // Windows 无 webview 支持,用系统浏览器打开 launchUrl(Uri.parse(url)); return null; } return SlideUpPageRoute(page: DoubanWebViewPage(url: url)); case '/person-form': final args = settings.arguments; final Person? person = args is Person ? args : null; return SlideUpPageRoute(page: PersonFormPage(person: person)); case '/character-form': final args = settings.arguments as Map; return SlideUpPageRoute( page: CharacterFormPage( entityType: args['entityType'] as String, entityId: args['entityId'] as String, character: args['character'], ), ); default: return _buildUnknownRoute(settings.name); } } static Route _buildUnknownRoute(String? name) { return MaterialPageRoute( builder: (_) => Scaffold( body: Center(child: Text('未找到页面:${name ?? ''}')), ), ); } }