基础库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

152 lines
5.5 KiB

  1. import 'dart:io';
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_alibc/alibc_const_key.dart';
  5. import 'package:flutter_alibc/flutter_alibc.dart';
  6. import 'package:jdsdk/jdsdk.dart';
  7. import 'package:provider/provider.dart';
  8. import 'package:zhiying_comm/pages/login_page/account/login_account_page.dart';
  9. import 'package:zhiying_comm/pages/login_page/login_page.dart';
  10. import 'package:zhiying_comm/util/dialog/loading/loading.dart';
  11. import 'package:zhiying_comm/util/event_util/event_util.dart';
  12. import 'package:zhiying_comm/util/event_util/login_success_event.dart';
  13. import 'package:zhiying_comm/util/pdd_auth/pdd_auth.dart';
  14. import 'package:zhiying_comm/util/shared_prefe_util.dart';
  15. import 'package:zhiying_comm/zhiying_comm.dart';
  16. class RouterUtil {
  17. /*公共跳转
  18. * skipModel 跳转参数
  19. * data 额外参数
  20. * */
  21. static Future route(SkipModel skipModel, Map<String, dynamic> data, BuildContext context) async {
  22. if (skipModel.skipIdentifier == null || skipModel.skipIdentifier == '') {
  23. print('skipIdentifier 参数不存在,无法跳转页面');
  24. return Future.error('skipIdentifier 参数不存在,无法跳转页面');
  25. }
  26. // is_jump等于0不跳转
  27. if (!EmptyUtil.isEmpty(skipModel.isJump) && skipModel.isJump == '0') {
  28. return;
  29. }
  30. print('skipIdentifier: ${skipModel.skipIdentifier}');
  31. hideKeyboard(context);
  32. if (skipModel?.requiredLogin == '1') {
  33. UserInfoModel user = await Provider.of<UserInfoNotifier>(context, listen: false).getUserInfoModel();
  34. print(user.toString());
  35. if (user?.token == null || user.token == '') {
  36. print('need login...');
  37. return RouterUtil.goLogin(context);
  38. }
  39. }
  40. if (skipModel?.requiredTaobaoAuth == '1') {
  41. UserInfoModel user = await Provider.of<UserInfoNotifier>(context, listen: false).getUserInfoModel();
  42. if (!user?.isTBAuth ?? false) {
  43. TaobaoAuth.auth(context);
  44. return;
  45. }
  46. }
  47. // TODO webView 临时代码,IOS添加原生WebView需要改动这里
  48. if (skipModel?.skipIdentifier == 'pub.flutter.url') {
  49. if (skipModel?.url?.contains("sourceType=jd") ?? false) {
  50. Loading.show(context);
  51. Dio dio = Dio();
  52. var responds = await dio.get(skipModel.url);
  53. var detailUrl = responds?.realUri?.toString();
  54. Logger.debug(detailUrl ?? "");
  55. Loading.dismiss();
  56. Jdsdk.openUrl(url: detailUrl);
  57. return;
  58. }
  59. RouterUtil.openWebview(skipModel?.url, context);
  60. return;
  61. }
  62. if (skipModel?.skipIdentifier == 'pub.flutter.taobao_url') {
  63. print("淘宝链接" + skipModel.url);
  64. Loading.show(context);
  65. Dio dio = Dio();
  66. var responds = await dio.get(skipModel.url);
  67. var detailUrl = responds?.realUri?.toString();
  68. Logger.debug(detailUrl ?? "");
  69. Loading.dismiss();
  70. FlutterAlibc.openByUrl(url: detailUrl, schemeType: AlibcSchemeType.AlibcSchemeTaoBao);
  71. return;
  72. }
  73. Widget page = EmptyPage();
  74. if (PageFactory.hasRegisted(skipModel.skipIdentifier)) {
  75. page = PageFactory.create(skipModel.skipIdentifier, data);
  76. } else {
  77. if (Application.hasStringMethod(skipModel.skipIdentifier.toString())) {
  78. Application.doStringMethod(skipModel.skipIdentifier.toString());
  79. return null;
  80. }
  81. var result = await NetUtil.post('/api/v1/mod/${skipModel.skipIdentifier.toString()}', method: NetMethod.GET);
  82. Logger.debug(result);
  83. page = PageFactory.create('index', Map<String, dynamic>.from(result));
  84. }
  85. return Navigator.of(context).push(CupertinoPageRoute(builder: (BuildContext context) {
  86. return page;
  87. }));
  88. }
  89. // 跳转登录
  90. static Future goLogin(BuildContext context) async {
  91. String isIosReview = await SharedPreferencesUtil.getStringValue(GlobalConfig.IS_IOS_REVIEW, defaultVal: '0');
  92. return Navigator.of(context).push(CupertinoPageRoute(builder: (BuildContext context) {
  93. // 苹果审核登录样式
  94. if (Platform.isIOS && isIosReview == '1') {
  95. return LoginAccountPage(null);
  96. }
  97. return LoginPage();
  98. }));
  99. }
  100. // 打开网页
  101. static Future openWebview(String url, BuildContext context) {
  102. if (url == null || url == '') {
  103. Logger.error('跳转链接不能为空');
  104. return Future.error('跳转链接不能为空');
  105. }
  106. SkipModel model = SkipModel();
  107. model.skipIdentifier = 'pub.flutter.url';
  108. model.url = url;
  109. if (model.url.contains("official/redirect_url")) {
  110. model.url = model.url + "&zuid=" + (UserInfoNotifier?.staitcUserInfo?.userId ?? "");
  111. }
  112. Application.doStringParamsMethod("openUrl", data: {"url": model.url});
  113. return null;
  114. //
  115. // RouterUtil.route(model, model.toJson(), context);
  116. }
  117. // 回到首页
  118. static Future goBackHomePage(BuildContext context, {bool needUpdateAuth = true}) async {
  119. if (needUpdateAuth) {
  120. await TaobaoAuth.initAuth(context);
  121. EventUtil.instance.fire(LoginSuccessEvent());
  122. }
  123. Navigator.popUntil(context, ModalRoute.withName('/homePage'));
  124. }
  125. // 隐藏键盘
  126. static void hideKeyboard(BuildContext context) {
  127. try {
  128. FocusScopeNode currentFocus = FocusScope.of(context);
  129. if (!currentFocus.hasPrimaryFocus && currentFocus.focusedChild != null) {
  130. FocusManager.instance.primaryFocus.unfocus();
  131. }
  132. // SystemChannels.textInput.invokeMethod('TextInput.hide');
  133. // FocusScope.of(context).requestFocus(FocusNode());
  134. } catch (e, s) {
  135. Logger.error(e, s);
  136. }
  137. }
  138. }