import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_boost/flutter_boost.dart'; import '../../home.dart'; import '../../model/video/video_model.dart'; import '../../ui/common/browser.dart'; import '../../ui/demo_page.dart'; import '../../ui/mine/email_login.dart'; import '../../ui/mine/login.dart'; import '../../ui/mine/person_info.dart'; import '../../ui/mine/settings.dart'; import '../../ui/video/video_collected_list.dart'; import '../../ui/video/video_detail.dart'; import '../../ui/video/video_list.dart'; import '../../ui/video/video_scan_record_list.dart'; import 'mine.dart'; import 'ui/mine/about_us.dart'; import 'ui/mine/advice.dart'; import 'ui/search/search.dart'; import 'ui/video/video_attention_list.dart'; import 'ui/video/video_download_list.dart'; import 'ui/video/video_player_browser.dart'; // void main() { // runApp(getBasePage( // AboutUsPage(title: ""), // )); // } void main() { ///添加全局生命周期监听类 PageVisibilityBinding.instance.addGlobalObserver(AppLifecycleObserver()); CustomFlutterBinding(); //window.defaultRouteName runApp(MyApp()); } class CustomFlutterBinding extends WidgetsFlutterBinding with BoostFlutterBinding {} class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State { /// 由于很多同学说没有跳转动画,这里是因为之前exmaple里面用的是 [PageRouteBuilder], /// 其实这里是可以自定义的,和Boost没太多关系,比如我想用类似iOS平台的动画, /// 那么只需要像下面这样写成 [CupertinoPageRoute] 即可 /// (这里全写成[MaterialPageRoute]也行,这里只不过用[CupertinoPageRoute]举例子) /// /// 注意,如果需要push的时候,两个页面都需要动的话, /// (就是像iOS native那样,在push的时候,前面一个页面也会向左推一段距离) /// 那么前后两个页面都必须是遵循CupertinoRouteTransitionMixin的路由 /// 简单来说,就两个页面都是CupertinoPageRoute就好 /// 如果用MaterialPageRoute的话同理 static Route? _getSimpleRoute( RouteSettings settings, String? uniqueId, Widget page) { return CupertinoPageRoute( settings: settings, builder: (_) { return page; }); } Map routerMap = { '/': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { // Map map = settings.arguments as Map ; // String data = map['data'] as String; return HomePage( title: "", ); }); }, 'home': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { // Map map = settings.arguments as Map ; // String data = map['data'] as String; return HomePage( title: "", ); }); }, 'mine': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return MinePage( title: "", ); }); }, 'VideoDetailPage': (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } return CupertinoPageRoute( settings: settings, builder: (_) { Map params = settings.arguments as Map; int position = params["position"] ?? 0; return VideoDetailPage( videoInfo: VideoInfoModel.fromJson(params["video"]), position: position, ); }); }, 'VideoCollectedPage': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return VideoCollectedPage( title: "", ); }); }, 'VideoAttentionPage': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return VideoAttentionPage( title: "", ); }); }, 'VideoScanRecordPage': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return VideoScanRecordPage( title: "", ); }); }, 'VideoDownloadPage': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return VideoDownloadPage( title: "", ); }); }, "PersonInfoPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, PersonInfoPage(title: "")); }, "SettingPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, SettingPage(title: "")); }, "EmailLoginPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, EmailLoginPage(title: "")); }, "LoginPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, LoginPage(title: "")); }, "AdvicePage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, AdvicePage(title: "")); }, "AboutUsPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, AboutUsPage(title: "")); }, 'SearchPage': (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } Map params = settings.arguments as Map; return CupertinoPageRoute( settings: settings, builder: (_) { return SearchPage( title: params["title"] ?? "", ); }); }, 'VideoListPage': (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } Map params = settings.arguments as Map; return CupertinoPageRoute( settings: settings, builder: (_) { String kw = params["kw"]!; String title = params["title"] ?? ""; return VideoListPage( title: title, kw: kw, ); }); }, 'BrowserPage': (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } Map params = settings.arguments as Map; return CupertinoPageRoute( settings: settings, builder: (_) { String title = params["title"] ?? ""; return BrowserPage(title: title, url: params["url"]); }); }, 'VideoPlayerWebPage': (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } Map params = settings.arguments as Map; return CupertinoPageRoute( settings: settings, builder: (_) { String title = params["title"] ?? ""; return VideoPlayerWebPage(title: title, url: params["url"]); }); }, }; Route? routeFactory(RouteSettings settings, String? uniqueId) { print("路由构造:${settings}"); FlutterBoostRouteFactory? func = routerMap[settings.name!]; if (func == null) { return null; } return func(settings, uniqueId); } Widget appBuilder(Widget home) { return MaterialApp( home: home, debugShowCheckedModeBanner: true, ///必须加上builder参数,否则showDialog等会出问题 builder: (_, __) { return home; }, ); } @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return FlutterBoostApp( routeFactory, appBuilder: appBuilder, ); } } Widget widgetForRoute(String route) { print("flutter page: $route"); Map json = jsonDecode(route); String page = json["page"]; dynamic params = json["params"]; switch (page) { case "DemoPage": return DemoPage( title: '', ); case "home": return HomePage( title: '', ); case "mine": return MinePage(title: ""); case "VideoCollectedPage": return VideoCollectedPage(title: ""); case "VideoAttentionPage": return VideoAttentionPage(title: ""); case "VideoScanRecordPage": return VideoScanRecordPage(title: ""); case "VideoDownloadPage": return VideoDownloadPage(title: ""); case "PersonInfoPage": return PersonInfoPage(title: ""); case "SettingPage": return SettingPage(title: ""); case "EmailLoginPage": return EmailLoginPage(title: ""); case "LoginPage": return LoginPage(title: ""); case "AdvicePage": return AdvicePage(title: ""); case "SearchPage": return SearchPage(title: params!["title"]); case "AboutUsPage": return AboutUsPage(title: ""); case "VideoDetailPage": { int position = params!["position"] ?? 0; return VideoDetailPage( videoInfo: VideoInfoModel.fromJson(params!["video"]), position: position, ); } case "VideoListPage": { String kw = params!["kw"]!; String title = params!["title"] ?? ""; return VideoListPage( title: title, kw: kw, ); } case "BrowserPage": { String title = params!["title"] ?? ""; return BrowserPage(title: title, url: params!["url"]); } case "VideoPlayerWebPage": { String title = params!["title"] ?? ""; return VideoPlayerWebPage(title: title, url: params!["url"]); } } return Container(); } ///全局生命周期监听示例 class AppLifecycleObserver with GlobalPageVisibilityObserver { @override void onBackground(Route route) { super.onBackground(route); print("AppLifecycleObserver - ${route.settings.name} - onBackground"); } @override void onForeground(Route route) { super.onForeground(route); print("AppLifecycleObserver ${route.settings.name} - onForground"); } @override void onPagePush(Route route) { super.onPagePush(route); print("AppLifecycleObserver - ${route.settings.name}- onPagePush"); } @override void onPagePop(Route route) { super.onPagePop(route); print("AppLifecycleObserver - ${route.settings.name}- onPagePop"); } @override void onPageHide(Route route) { super.onPageHide(route); print("AppLifecycleObserver - ${route.settings.name}- onPageHide"); } @override void onPageShow(Route route) { super.onPageShow(route); print("AppLifecycleObserver - ${route.settings.name}- onPageShow"); } }