import 'dart:convert';
|
|
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/material.dart';
|
import 'package:flutter_boost/flutter_boost.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/advice.dart';
|
import 'utils/ui_constant.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<MyApp> {
|
/// 由于很多同学说没有跳转动画,这里是因为之前exmaple里面用的是 [PageRouteBuilder],
|
/// 其实这里是可以自定义的,和Boost没太多关系,比如我想用类似iOS平台的动画,
|
/// 那么只需要像下面这样写成 [CupertinoPageRoute] 即可
|
/// (这里全写成[MaterialPageRoute]也行,这里只不过用[CupertinoPageRoute]举例子)
|
///
|
/// 注意,如果需要push的时候,两个页面都需要动的话,
|
/// (就是像iOS native那样,在push的时候,前面一个页面也会向左推一段距离)
|
/// 那么前后两个页面都必须是遵循CupertinoRouteTransitionMixin的路由
|
/// 简单来说,就两个页面都是CupertinoPageRoute就好
|
/// 如果用MaterialPageRoute的话同理
|
static Route<dynamic>? _getSimpleRoute(
|
RouteSettings settings, String? uniqueId, Widget page) {
|
return CupertinoPageRoute(
|
settings: settings,
|
builder: (_) {
|
return page;
|
});
|
}
|
|
Map<String, FlutterBoostRouteFactory> routerMap = {
|
'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: ""));
|
},
|
'BrowserPage': (RouteSettings settings, String? uniqueId) {
|
if (settings.arguments == null) {
|
return null;
|
}
|
Map<String, dynamic> params = settings.arguments as Map<String, dynamic>;
|
return CupertinoPageRoute(
|
settings: settings,
|
builder: (_) {
|
String title = params["title"] ?? "";
|
return BrowserPage(title: title, url: params["url"]);
|
});
|
}
|
};
|
|
Route<dynamic>? 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<String, dynamic> 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"]);
|
}
|
}
|
|
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");
|
}
|
}
|