基础库
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.
 
 
 
 
 

81 lines
2.4 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'package:zhiying_comm/zhiying_comm.dart';
  4. import 'package:zhiying_comm/pages/empty_page.dart';
  5. class NativeUtil {
  6. // 工厂模式
  7. factory NativeUtil() => _getInstance();
  8. static NativeUtil get instance => _getInstance();
  9. static NativeUtil _instance;
  10. MethodChannel _methodChannel;
  11. NativeUtil._internal() {
  12. // 初始化
  13. _methodChannel = MethodChannel('zhiying_comm://method');
  14. }
  15. static NativeUtil _getInstance() {
  16. if (_instance == null) {
  17. _instance = new NativeUtil._internal();
  18. }
  19. return _instance;
  20. }
  21. static Future<Map<String, dynamic>> _invokeChannel(String method,
  22. {Map<String, dynamic> params}) async {
  23. var res;
  24. try {
  25. res =
  26. await NativeUtil.instance._methodChannel.invokeMethod(method, params);
  27. } catch (e) {
  28. res = {'Failed': e.message};
  29. }
  30. print(res);
  31. return Map<String, dynamic>.from(res);
  32. }
  33. // 通过原生webview打开url
  34. static Future openUrl(BuildContext context, String url) {
  35. Map<String, dynamic> params = Map<String, dynamic>();
  36. params['url'] = url ?? '';
  37. params['SkipUIIdentifier'] = 'pub_wailian';
  38. NativeUtil.openPage(context, params);
  39. }
  40. // 公共跳转方法
  41. static Future openPage(BuildContext context, Map<String, dynamic> params) {
  42. return Navigator.of(context)
  43. .push(MaterialPageRoute(builder: (BuildContext context) {
  44. if (!params.containsKey('SkipUIIdentifier')) {
  45. return EmptyPage();
  46. }
  47. return PageFactory.create(params['SkipUIIdentifier'], params);
  48. }));
  49. }
  50. //跳转原生普通页面,非公共跳转
  51. static Future openNativePage(NativeRouter router, {Map params}) {
  52. String method = enumToString(router);
  53. return NativeUtil._invokeChannel('openNativePage', params: {
  54. 'method': method,
  55. 'params': params == null ? {} : Map<String, dynamic>.from(params)
  56. });
  57. }
  58. // 跳转原生商品详情
  59. static openGoodsDetail(Map<String, dynamic> params) async {
  60. NativeUtil._invokeChannel('openGoodsDetail', params: params);
  61. }
  62. static Future<Map<String, dynamic>> getSetting() async {
  63. return NativeUtil._invokeChannel('getSetting');
  64. }
  65. static Future<Map<String, dynamic>> invokeMethod(
  66. String method, Map<String, dynamic> params) {
  67. Map<String, dynamic> request = {"method": method, "params": params};
  68. return NativeUtil._invokeChannel('invokeMethod', params: request);
  69. }
  70. }