import 'dart:convert'; import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_boost/flutter_boost.dart'; import 'package:makemoney/home.dart'; import 'package:makemoney/ui/mine/msg.dart'; import 'package:makemoney/ui/mine/my_boss.dart'; import 'package:makemoney/utils/share_preference.dart'; import 'package:makemoney/utils/ui_constant.dart'; import '../../ui/common/browser.dart'; import '../../ui/mine/email_login.dart'; import '../../ui/mine/login.dart'; import '../../ui/mine/person_info.dart'; import '../../ui/mine/settings.dart'; import 'mine.dart'; import 'ui/mine/about_us.dart'; import 'ui/mine/add_team.dart'; import 'ui/mine/advice.dart'; import 'ui/mine/balance.dart'; import 'ui/mine/gold_corn.dart'; import 'ui/mine/invite_friends.dart'; import 'ui/mine/team.dart'; import 'ui/task.dart'; import 'utils/ui_utils.dart'; // void main() { // runApp(getBasePage( // MinePage(title: ""), // )); // } void _runNative() { ///添加全局生命周期监听类 PageVisibilityBinding.instance.addGlobalObserver(AppLifecycleObserver()); CustomFlutterBinding(); //window.defaultRouteName runApp(MyApp()); } void _runLocal() { runApp(getBasePage( MinePage( title: "", ), )); } void main() { if (Constant.NATIVE) { _runNative(); } else { _runLocal(); } } 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 = { 'HomePage': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return HomePage( title: "", ); }); }, 'mine': (RouteSettings settings, String? uniqueId) { return CupertinoPageRoute( settings: settings, builder: (_) { return MinePage( 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: "")); }, "BalancePage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, BalancePage(title: "")); }, "TeamPage": (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } print("获取到的参数:${settings.arguments}"); Map params = settings.arguments as Map; return _getSimpleRoute( settings, uniqueId, TeamPage( title: "", first: params["first"], nav: params["nav"] ?? true, )); }, "GoldCornPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, GoldCornPage(title: "")); }, "InviteFriendsPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, InviteFriendsPage(title: "")); }, "TaskPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute(settings, uniqueId, TaskPage(title: "")); }, //AddTeamPage "AddTeamPage": (RouteSettings settings, String? uniqueId) { if (settings.arguments == null) { return null; } Map params = settings.arguments as Map; return _getSimpleRoute( settings, uniqueId, AddTeamPage( title: "", skip: params["skip"], )); }, "MyBossPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute( settings, uniqueId, MyBossPage( title: "", )); }, "MsgPage": (RouteSettings settings, String? uniqueId) { return _getSimpleRoute( settings, uniqueId, MsgPage( title: "", )); }, '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"]); }); } }; 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, theme: ThemeData(primaryColor: ColorConstant.theme), ///必须加上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 "mine": return MinePage(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 "AboutUsPage": return AboutUsPage(title: ""); case "BrowserPage": { String title = params!["title"] ?? ""; return BrowserPage(title: title, url: params!["url"]); } case "BalancePage": { return BalancePage(title: ""); } case "TeamPage": { return TeamPage( title: "", first: params!["first"], nav: params!["nav"] ?? true, ); } case "InviteFriendsPage": { return InviteFriendsPage(title: ""); } case "AddTeamPage": { return AddTeamPage(title: "", skip: params!["skip"]); } case "GoldCornPage": { return GoldCornPage(title: ""); } case "MyBossPage": { return MyBossPage(title: ""); } case "TaskPage": { return TaskPage(title: ""); } case "MsgPage": { return MsgPage(title: ""); } } 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"); } }