import 'dart:io'; import 'package:fluro/fluro.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:yumi/modules/room/background/room_background_preview_page.dart'; import 'package:yumi/modules/room/background/room_background_select_page.dart'; import 'package:yumi/modules/room/background/room_background_upload_page.dart'; import 'package:yumi/modules/room/edit/room_edit_page.dart'; import 'package:yumi/modules/room/music/room_music_page.dart'; import 'package:yumi/modules/room/them/room_theme_page.dart'; import 'package:yumi/modules/room/voice_room_page.dart'; import 'package:yumi/app/routes/sc_router_init.dart'; class VoiceRoomRoute implements SCIRouterProvider { static String voiceRoom = '/room'; static String roomEdit = '/room/roomEdit'; static String roomTheme = '/room/roomTheme'; static String roomBackgroundSelect = '/room/background/select'; static String roomBackgroundPreview = '/room/background/preview'; static String roomBackgroundUpload = '/room/background/upload'; static String roomMusic = '/room/music'; static Route _buildRoute(Widget page, {RouteSettings? settings}) { if (Platform.isIOS) { return CupertinoPageRoute(builder: (_) => page, settings: settings); } return MaterialPageRoute(builder: (_) => page, settings: settings); } static Route _buildDarkRoute(Widget page, {RouteSettings? settings}) { return PageRouteBuilder( settings: settings, opaque: true, barrierColor: const Color(0xFF071F1B), transitionDuration: const Duration(milliseconds: 180), reverseTransitionDuration: const Duration(milliseconds: 160), pageBuilder: (context, animation, secondaryAnimation) => ColoredBox(color: const Color(0xFF071F1B), child: page), transitionsBuilder: (context, animation, secondaryAnimation, child) { final tween = Tween( begin: const Offset(1, 0), end: Offset.zero, ).chain(CurveTween(curve: Curves.easeOutCubic)); return SlideTransition(position: animation.drive(tween), child: child); }, ); } static Future openVoiceRoom( BuildContext context, { bool replace = false, bool rootNavigator = false, }) { final navigator = Navigator.of(context, rootNavigator: rootNavigator); final route = _buildRoute( const VoiceRoomPage(), settings: RouteSettings(name: voiceRoom), ); if (replace) { return navigator.pushReplacement(route); } return navigator.push(route); } static Future openRoomEdit( BuildContext context, { required bool needRestCurrentRoomInfo, bool rootNavigator = true, }) { return Navigator.of(context, rootNavigator: rootNavigator).push( _buildRoute( RoomEditPage( needRestCurrentRoomInfo: needRestCurrentRoomInfo ? "true" : "false", ), ), ); } static Future openRoomTheme( BuildContext context, { bool rootNavigator = false, }) { return Navigator.of( context, rootNavigator: rootNavigator, ).push(_buildRoute(RoomThemePage())); } static Future openRoomBackgroundSelect( BuildContext context, { bool rootNavigator = false, }) { return Navigator.of(context, rootNavigator: rootNavigator).push( _buildDarkRoute( const RoomBackgroundSelectPage(), settings: RouteSettings(name: roomBackgroundSelect), ), ); } static Future openRoomBackgroundUpload( BuildContext context, { bool rootNavigator = false, }) { return Navigator.of(context, rootNavigator: rootNavigator).push( _buildDarkRoute( const RoomBackgroundUploadPage(), settings: RouteSettings(name: roomBackgroundUpload), ), ); } static Future openRoomBackgroundPreview( BuildContext context, { String? backgroundPath, bool rootNavigator = false, }) { return Navigator.of(context, rootNavigator: rootNavigator).push( _buildDarkRoute( RoomBackgroundPreviewPage(backgroundPath: backgroundPath), settings: RouteSettings(name: roomBackgroundPreview), ), ); } static Future openRoomMusic( BuildContext context, { bool rootNavigator = false, }) { return Navigator.of(context, rootNavigator: rootNavigator).push( _buildDarkRoute( const RoomMusicPage(), settings: RouteSettings(name: roomMusic), ), ); } @override void initRouter(FluroRouter router) { router.define( voiceRoom, handler: Handler(handlerFunc: (_, params) => VoiceRoomPage()), ); router.define( roomTheme, handler: Handler(handlerFunc: (_, params) => RoomThemePage()), ); router.define( roomBackgroundSelect, handler: Handler( handlerFunc: (_, params) => const RoomBackgroundSelectPage(), ), ); router.define( roomBackgroundPreview, handler: Handler( handlerFunc: (_, params) => const RoomBackgroundPreviewPage(), ), ); router.define( roomBackgroundUpload, handler: Handler( handlerFunc: (_, params) => const RoomBackgroundUploadPage(), ), ); router.define( roomMusic, handler: Handler(handlerFunc: (_, params) => const RoomMusicPage()), ); router.define( roomEdit, handler: Handler( handlerFunc: (_, params) => RoomEditPage( needRestCurrentRoomInfo: params['need']?.first ?? "false", ), ), ); } }