import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:zhiying_comm/pages/login_page/account/login_account_page.dart'; import 'package:zhiying_comm/pages/login_page/login_page.dart'; import 'package:zhiying_comm/util/event_util/event_util.dart'; import 'package:zhiying_comm/util/event_util/login_success_event.dart'; import 'package:zhiying_comm/util/shared_prefe_util.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; class RouterUtil { /*公共跳转 * skipModel 跳转参数 * data 额外参数 * */ static Future route(SkipModel skipModel, Map data, BuildContext context) async { if (skipModel.skipIdentifier == null || skipModel.skipIdentifier == '') { print('skipIdentifier 参数不存在,无法跳转页面'); return Future.error('skipIdentifier 参数不存在,无法跳转页面'); } // is_jump等于0不跳转 if (!EmptyUtil.isEmpty(skipModel.isJump) && skipModel.isJump == '0') { return; } print('skipIdentifier: ${skipModel.skipIdentifier}'); hideKeyboard(context); if (skipModel?.requiredLogin == '1') { UserInfoModel user = await Provider.of(context, listen: false).getUserInfoModel(); print(user.toString()); if (user?.token == null || user.token == '') { print('need login...'); return RouterUtil.goLogin(context); } } if (skipModel?.requiredTaobaoAuth == '1') { UserInfoModel user = await Provider.of(context, listen: false).getUserInfoModel(); if (!user?.isTBAuth ?? false) { TaobaoAuth.auth(context); return; } } // TODO webView 临时代码,IOS添加原生WebView需要改动这里 if (skipModel?.skipIdentifier == 'pub.flutter.url') { RouterUtil.openWebview(skipModel?.url, context); return; } Widget page = EmptyPage(); if (PageFactory.hasRegisted(skipModel.skipIdentifier)) { page = PageFactory.create(skipModel.skipIdentifier, data); } else { if (Application.hasStringMethod(skipModel.skipIdentifier.toString())) { Application.doStringMethod(skipModel.skipIdentifier.toString()); return null; } var result = await NetUtil.post('/api/v1/mod/${skipModel.skipIdentifier.toString()}', method: NetMethod.GET); Logger.debug(result); page = PageFactory.create('index', Map.from(result)); } return Navigator.of(context).push(CupertinoPageRoute(builder: (BuildContext context) { return page; })); } // 跳转登录 static Future goLogin(BuildContext context) async { String isIosReview = await SharedPreferencesUtil.getStringValue(GlobalConfig.IS_IOS_REVIEW, defaultVal: '0'); return Navigator.of(context).push(CupertinoPageRoute(builder: (BuildContext context) { // 苹果审核登录样式 if (Platform.isIOS && isIosReview == '1') { return LoginAccountPage(null); } return LoginPage(); })); } // 打开网页 static Future openWebview(String url, BuildContext context) { if (url == null || url == '') { Logger.error('跳转链接不能为空'); return Future.error('跳转链接不能为空'); } SkipModel model = SkipModel(); model.skipIdentifier = 'pub.flutter.url'; model.url = url; Application.doStringParamsMethod("openUrl", data: {"url": model.url}); return null; // // RouterUtil.route(model, model.toJson(), context); } // 回到首页 static Future goBackHomePage(BuildContext context, {bool needUpdateAuth = true}) async { if (needUpdateAuth) { await TaobaoAuth.initAuth(context); EventUtil.instance.fire(LoginSuccessEvent()); } Navigator.popUntil(context, ModalRoute.withName('/homePage')); } // 隐藏键盘 static void hideKeyboard(BuildContext context) { try { FocusScopeNode currentFocus = FocusScope.of(context); if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) { FocusManager.instance.primaryFocus.unfocus(); } // SystemChannels.textInput.invokeMethod('TextInput.hide'); // FocusScope.of(context).requestFocus(FocusNode()); } catch (e, s) { Logger.error(e, s); } } }