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<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 = {
|
'/': (RouteSettings settings, String? uniqueId) {
|
return CupertinoPageRoute(
|
settings: settings,
|
builder: (_) {
|
// Map<String, Object> map = settings.arguments as Map<String, Object> ;
|
// String data = map['data'] as String;
|
return HomePage(
|
title: "",
|
);
|
});
|
},
|
'home': (RouteSettings settings, String? uniqueId) {
|
return CupertinoPageRoute(
|
settings: settings,
|
builder: (_) {
|
// Map<String, Object> map = settings.arguments as Map<String, Object> ;
|
// 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<String, dynamic> params =
|
settings.arguments as Map<String, dynamic>;
|
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<String, dynamic> params = settings.arguments as Map<String, dynamic>;
|
return CupertinoPageRoute(
|
settings: settings,
|
builder: (_) {
|
return SearchPage(
|
title: params["title"] ?? "",
|
);
|
});
|
},
|
'VideoListPage': (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 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<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"]);
|
});
|
},
|
'VideoPlayerWebPage': (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 VideoPlayerWebPage(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,
|
|
///必须加上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 "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");
|
}
|
}
|