IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> flutter 路由封装 -> 正文阅读

[移动开发]flutter 路由封装

import 'dart:convert';

import 'package:ecoyia_zgs/business/college/college_page.dart';

import 'package:ecoyia_zgs/business/column/big_brand/big_brand_page.dart';

import 'package:ecoyia_zgs/business/column/high_commission/high_commission_page.dart';

import 'package:ecoyia_zgs/business/column/rank/rank_page.dart';

import 'package:ecoyia_zgs/business/column/tens_billions/tens_billions_page.dart';

import 'package:ecoyia_zgs/business/favorite/favorite_list_page.dart';

import 'package:ecoyia_zgs/business/goods_detail/goods_detail_page.dart';

import 'package:ecoyia_zgs/business/income/withdraw/withdraw_record_page.dart';

import 'package:ecoyia_zgs/business/review/address_manager_page.dart';

import 'package:ecoyia_zgs/business/search/search_page.dart';

import 'package:ecoyia_zgs/business/settings/bind_alipay/bind_alipay_page.dart';

import 'package:ecoyia_zgs/business/settings/share_app/share_app_page.dart';

import 'package:ecoyia_zgs/business/splash/welcome_page.dart';

import 'package:ecoyia_zgs/widgets/webview/webview_page.dart';

import 'package:flutter/cupertino.dart';

import 'package:flutter/foundation.dart';

import 'package:flutter/material.dart';

import 'package:ecoyia_zgs/helpers/router/ui_pages.dart';

import 'package:ecoyia_zgs/app/app_state.dart';

import 'package:ecoyia_zgs/business/login/login_page.dart';

import 'package:ecoyia_zgs/business/main/main_page.dart';

import 'package:ecoyia_zgs/business/settings/settings_page.dart';

import 'package:ecoyia_zgs/business/splash/splash_page.dart';

import 'package:ecoyia_zgs/business/home/line_news/line_news_page.dart';

import 'package:ecoyia_zgs/helpers/router/back_dispatcher.dart';

class ESRouterDelegate extends RouterDelegate<PageConfiguration>

? ? with ChangeNotifier, PopNavigatorRouterDelegateMixin<PageConfiguration> {

? final List<Page> _pages = [];

? ESBackButtonDispatcher? backButtonDispatcher;

? @override

? final GlobalKey<NavigatorState> navigatorKey;

? final AppState appState;

? ESRouterDelegate(this.appState) : navigatorKey = GlobalKey() {

? ? appState.addListener(() {

? ? ? notifyListeners();

? ? });

? }

? List<MaterialPage> get pages => List.unmodifiable(_pages);

? int numPages() => _pages.length;

? @override

? PageConfiguration get currentConfiguration =>

? ? ? _pages.last.arguments as PageConfiguration;

? @override

? Widget build(BuildContext context) {

? ? return MediaQuery(

? ? ? //设置文字大小不随系统设置改变

? ? ? data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),

? ? ? child: Navigator(

? ? ? ? key: navigatorKey,

? ? ? ? onPopPage: _onPopPage,

? ? ? ? pages: buildPages(),

? ? ? ),

? ? );

? }

? bool _onPopPage(Route<dynamic> route, result) {

? ? final didPop = route.didPop(result);

? ? if (!didPop) {

? ? ? return false;

? ? }

? ? if (canPop()) {

? ? ? pop();

? ? ? return true;

? ? } else {

? ? ? return false;

? ? }

? }

? void _removePage(Page page) {

? ? _pages.remove(page);

? }

? void pop({Page? page}) {

? ? if (canPop()) {

? ? ? if (page != null) {

? ? ? ? _removePage(page);

? ? ? } else {

? ? ? ? _removePage(_pages.last);

? ? ? }

? ? }

? }

? bool canPop() {

? ? return _pages.length > 1;

? }

? @override

? Future<bool> popRoute() {

? ? // 安卓硬件返回时,如果有弹窗则不执行任何操作

? ? if (appState.isShowDialog) {

? ? ? appState.dismissDialog();

? ? ? return Future.value(true);

? ? }

? ? if (canPop()) {

? ? ? pop();

? ? ? notifyListeners();

? ? ? return Future.value(true);

? ? }

? ? return Future.value(false);

? }

? MaterialPage _createPage(Widget child, PageConfiguration pageConfig) {

? ? // print('key=${pageConfig.key}=${pageConfig.}=')

? ? return MaterialPage(

? ? ? ? child: child,

? ? ? ? // key: ValueKey(pageConfig.key),

? ? ? ? name: pageConfig.path,

? ? ? ? arguments: pageConfig);

? }

? void _addPageData(Widget child, PageConfiguration pageConfig) {

? ? _pages.add(

? ? ? _createPage(child, pageConfig),

? ? );

? }

? void addPage(PageConfiguration? pageConfig) {

? ? if (pageConfig == null) {

? ? ? return;

? ? }

? ? switch (pageConfig.uiPage) {

? ? ? case Pages.Splash:

? ? ? ? _addPageData(SplashPage(), SplashPageConfig);

? ? ? ? break;

? ? ? case Pages.Main:

? ? ? ? _addPageData(MainPage(), MainPageConfig);

? ? ? ? break;

? ? ? case Pages.Login:

? ? ? ? _addPageData(LoginPage(), LoginPageConfig);

? ? ? ? break;

? ? ? case Pages.Settings:

? ? ? ? _addPageData(SettingsPage(), SettingsPageConfig);

? ? ? ? break;

? ? ? case Pages.SearchList:

? ? ? ? if (pageConfig.currentPageAction?.widget != null) {

? ? ? ? ? _addPageData(pageConfig.currentPageAction!.widget!, pageConfig);

? ? ? ? } else {

? ? ? ? ? _addPageData(SearchListPage(), SearchListPageConfig);

? ? ? ? }

? ? ? ? break;

? ? ? case Pages.Details:

? ? ? case Pages.ConfirmOrder:

? ? ? case Pages.PhoneLogin:

? ? ? case Pages.PhoneCode:

? ? ? case Pages.AliWeb:

? ? ? case Pages.ImgGallery:

? ? ? case Pages.NetWorkImgGallery:

? ? ? case Pages.WithDraw:

? ? ? case Pages.Webview:

? ? ? ? if (pageConfig.currentPageAction?.widget != null) {

? ? ? ? ? _addPageData(pageConfig.currentPageAction!.widget!, pageConfig);

? ? ? ? }

? ? ? ? break;

? ? ? case Pages.FavoriteList:

? ? ? ? _addPageData(FavoriteListPage(), FavoriteListPageConfig);

? ? ? ? break;

? ? ? case Pages.AddressManager:

? ? ? ? _addPageData(AddressManagerPage(), AddressManagerPageConfig);

? ? ? ? break;

? ? ? case Pages.WelCome:

? ? ? ? _addPageData(WelComePage(), WelComePageConfig);

? ? ? ? break;

? ? ? case Pages.WithDrawRecord:

? ? ? ? _addPageData(WithDrawRecordPage(), WihtDrawRecordPageConfig);

? ? ? ? break;

? ? ? case Pages.BindAlipay:

? ? ? ? _addPageData(BindAlipayPage(), BindAlipayPageConfig);

? ? ? ? break;

? ? ? case Pages.ShareApp:

? ? ? ? _addPageData(ShareAppPage(), ShareAppPageConfig);

? ? ? ? break;

? ? ? case Pages.LineNews:

? ? ? ? _addPageData(LineNewsPage(), LineNewsPageConfig);

? ? ? ? break;

? ? ? case Pages.TensBillions:

? ? ? ? _addPageData(TensBillionsPage(), TensBillionsPageConfig);

? ? ? ? break;

? ? ? case Pages.RankList:

? ? ? ? _addPageData(RankPage(), rankListPageConfig);

? ? ? ? break;

? ? ? case Pages.HighCommission: //高佣必推

? ? ? ? _addPageData(HighCommissionPage(), HighCommissionPageConfig);

? ? ? ? break;

? ? ? case Pages.BrandList:

? ? ? ? _addPageData(BigBrandPage(), brandListPageConfig);

? ? ? ? break;

? ? ? case Pages.College:

? ? ? ? _addPageData(CollegePage(), CollegePageConfig);

? ? ? ? break;

? ? ? default:

? ? ? ? break;

? ? }

? }

? void replace(PageConfiguration? newRoute) {

? ? if (newRoute == null) {

? ? ? return;

? ? }

? ? if (_pages.isNotEmpty) {

? ? ? _pages.removeLast();

? ? }

? ? addPage(newRoute);

? }

? void setPath(List<MaterialPage> path) {

? ? _pages.clear();

? ? _pages.addAll(path);

? }

? void replaceAll(PageConfiguration? newRoute) {

? ? if (newRoute == null) {

? ? ? return;

? ? }

? ? setNewRoutePath(newRoute);

? }

? void push(PageConfiguration newRoute) {

? ? addPage(newRoute);

? }

? void pushWidget(Widget child, PageConfiguration newRoute) {

? ? _addPageData(child, newRoute);

? }

? void addAll(List<PageConfiguration>? routes) {

? ? if (routes == null || routes.isEmpty) {

? ? ? return;

? ? }

? ? _pages.clear();

? ? routes.forEach((route) {

? ? ? addPage(route);

? ? });

? }

? @override

? Future<void> setNewRoutePath(PageConfiguration configuration) {

? ? _pages.clear();

? ? addPage(configuration);

? ? return SynchronousFuture(null);

? }

? void _setPageAction(PageAction action) {

? ? if (action.page?.uiPage == null) {

? ? ? return;

? ? }

? ? switch (action.page!.uiPage) {

? ? ? case Pages.Splash:

? ? ? ? SplashPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.Login:

? ? ? ? LoginPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.Settings:

? ? ? ? SettingsPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.Details:

? ? ? ? DetailsPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.Webview:

? ? ? ? WebviewPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.SearchList:

? ? ? ? SearchListPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.PhoneLogin:

? ? ? ? PhoneLoginPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.PhoneCode:

? ? ? ? PhoneCodePageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.FavoriteList:

? ? ? ? FavoriteListPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.ConfirmOrder:

? ? ? ? ConfirmOrderPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.AddressManager:

? ? ? ? AddressManagerPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.AliWeb:

? ? ? ? AliWebPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.ImgGallery:

? ? ? ? ImgGalleryPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.NetWorkImgGallery:

? ? ? ? NetWorkImgGalleryPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.WelCome:

? ? ? ? WelComePageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.WithDraw:

? ? ? ? WihtDrawPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.WithDrawRecord:

? ? ? ? WihtDrawRecordPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.BindAlipay:

? ? ? ? BindAlipayPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.LineNews:

? ? ? ? LineNewsPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.TensBillions:

? ? ? ? TensBillionsPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.TensBillions: //高佣必推

? ? ? ? HighCommissionPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.RankList:

? ? ? ? rankListPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.BrandList:

? ? ? ? brandListPageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? case Pages.College:

? ? ? ? CollegePageConfig.currentPageAction = action;

? ? ? ? break;

? ? ? default:

? ? ? ? break;

? ? }

? }

? List<Page> buildPages() {

? ? if (!appState.splashFinished) {

? ? ? replaceAll(SplashPageConfig);

? ? } else {

? ? ? switch (appState.currentAction.state) {

? ? ? ? case PageState.none:

? ? ? ? ? break;

? ? ? ? case PageState.addPage:

? ? ? ? ? _setPageAction(appState.currentAction);

? ? ? ? ? addPage(appState.currentAction.page);

? ? ? ? ? break;

? ? ? ? case PageState.pop:

? ? ? ? ? var popPages = appState.currentAction.pages;

? ? ? ? ? if (popPages != null && popPages.isNotEmpty) {

? ? ? ? ? ? popPages.forEach((element) {

? ? ? ? ? ? ? for (int i = pages.length - 1; i >= 0; --i) {

? ? ? ? ? ? ? ? var deletePage = pages[i];

? ? ? ? ? ? ? ? if (deletePage.name == element.path) {

? ? ? ? ? ? ? ? ? pop(page: deletePage);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? ? } else {

? ? ? ? ? ? pop();

? ? ? ? ? }

? ? ? ? ? break;

? ? ? ? case PageState.replace:

? ? ? ? ? _setPageAction(appState.currentAction);

? ? ? ? ? replace(appState.currentAction.page);

? ? ? ? ? break;

? ? ? ? case PageState.replaceAll:

? ? ? ? ? _setPageAction(appState.currentAction);

? ? ? ? ? replaceAll(appState.currentAction.page);

? ? ? ? ? break;

? ? ? ? case PageState.addWidget:

? ? ? ? ? _setPageAction(appState.currentAction);

? ? ? ? ? pushWidget(

? ? ? ? ? ? ? appState.currentAction.widget!, appState.currentAction.page!);

? ? ? ? ? break;

? ? ? ? case PageState.addAll:

? ? ? ? ? addAll(appState.currentAction.pages);

? ? ? ? ? break;

? ? ? }

? ? }

? ? appState.resetCurrentAction();

? ? return List.of(_pages);

? }

? void parseRoute(Uri uri) {

? ? print(

? ? ? ? 'uri=${uri.pathSegments}=${uri.queryParameters}=${uri.pathSegments.isEmpty}=${uri.pathSegments.length}=');

? ? // 不处理淘宝和微信的回调

? ? if (uri.scheme.contains('tbopen') ||

? ? ? ? uri.scheme.contains('wxc15014d378f06a10')) {

? ? ? return;

? ? }

? ? if (uri.pathSegments.isEmpty) {

? ? ? setNewRoutePath(SplashPageConfig);

? ? ? return;

? ? }

? ? if (uri.pathSegments.length == 1) {

? ? ? final path = uri.pathSegments[0];

? ? ? switch (path) {

? ? ? ? case 'splash':

? ? ? ? ? replaceAll(SplashPageConfig);

? ? ? ? ? break;

? ? ? ? case 'login':

? ? ? ? ? addPage(LoginPageConfig);

? ? ? ? ? break;

? ? ? ? case 'details':

? ? ? ? ? String goodsID = uri.queryParameters['goodsid'] ?? '0';

? ? ? ? ? int platform = int.parse(uri.queryParameters['platform'] ?? '1');

? ? ? ? ? pushWidget(GoodsDetailPage(goodsID, platformType: platform),

? ? ? ? ? ? ? DetailsPageConfig);

? ? ? ? ? break;

? ? ? ? case 'settings':

? ? ? ? ? addPage(SettingsPageConfig);

? ? ? ? ? break;

? ? ? ? case 'webview':

? ? ? ? ? String url = uri.queryParameters['url'] ?? '';

? ? ? ? ? String title = uri.queryParameters['title'] ?? '';

? ? ? ? ? pushWidget(WebviewPage(url: url, title: title), WebviewPageConfig);

? ? ? ? ? break;

? ? ? ? case 'html':

? ? ? ? ? String body = uri.queryParameters['body'] ?? '';

? ? ? ? ? String title = uri.queryParameters['title'] ?? '';

? ? ? ? ? String urlStr = Uri.dataFromString(body,

? ? ? ? ? ? ? mimeType: 'text/html', encoding: Encoding.getByName('utf-8'))

? ? ? ? ? ? ? .toString();

? ? ? ? ? pushWidget(WebviewPage(url: urlStr, title: title), WebviewPageConfig);

? ? ? ? ? break;

? ? ? ? case 'search_list':

? ? ? ? ? addPage(SearchListPageConfig);

? ? ? ? ? break;

? ? ? ? case 'phone_login':

? ? ? ? ? addPage(PhoneLoginPageConfig);

? ? ? ? ? break;

? ? ? ? case 'phone_code':

? ? ? ? ? addPage(PhoneCodePageConfig);

? ? ? ? ? break;

? ? ? ? case 'favorite_list':

? ? ? ? ? addPage(FavoriteListPageConfig);

? ? ? ? ? break;

? ? ? ? case 'confirm_order':

? ? ? ? ? addPage(ConfirmOrderPageConfig);

? ? ? ? ? break;

? ? ? ? case 'address_manager':

? ? ? ? ? addPage(AddressManagerPageConfig);

? ? ? ? ? break;

? ? ? ? case 'ali_web':

? ? ? ? ? addPage(AliWebPageConfig);

? ? ? ? ? break;

? ? ? ? case 'img_gallery':

? ? ? ? ? addPage(ImgGalleryPageConfig);

? ? ? ? ? break;

? ? ? ? case 'network_gallery':

? ? ? ? ? addPage(NetWorkImgGalleryPageConfig);

? ? ? ? ? break;

? ? ? ? case 'welcome':

? ? ? ? ? addPage(WelComePageConfig);

? ? ? ? ? break;

? ? ? ? case 'withdraw_page':

? ? ? ? ? addPage(WihtDrawPageConfig);

? ? ? ? ? break;

? ? ? ? case 'withdraw_record':

? ? ? ? ? addPage(WihtDrawRecordPageConfig);

? ? ? ? ? break;

? ? ? ? case 'bind_alipay':

? ? ? ? ? addPage(BindAlipayPageConfig);

? ? ? ? ? break;

? ? ? ? case 'column_discount':

? ? ? ? ? addPage(LineNewsPageConfig);

? ? ? ? ? break;

? ? ? ? case 'column_tens_millions':

? ? ? ? ? addPage(TensBillionsPageConfig);

? ? ? ? ? break;

? ? ? ? case 'column_high_brokerage': //高佣必推

? ? ? ? ? addPage(HighCommissionPageConfig);

? ? ? ? ? break;

? ? ? ? case 'column_big_brand':

? ? ? ? ? addPage(brandListPageConfig);

? ? ? ? ? break;

? ? ? ? case 'column_hot':

? ? ? ? ? addPage(rankListPageConfig);

? ? ? ? ? break;

? ? ? ? case 'college':

? ? ? ? ? addPage(CollegePageConfig);

? ? ? ? ? break;

? ? ? }

? ? }

? }

}

配置方法

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:24:43  更:2021-12-15 18:25:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:40:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码