From 03250d6409b2fce089398eda751fad3ea3dcd4ad Mon Sep 17 00:00:00 2001 From: Weller <1812208341@qq.com> Date: Wed, 2 Sep 2020 17:08:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0widget=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ZhiyingFlutterCommNativable.java | 9 +- .../zhiying_comm_example/MainActivity.java | 36 +++++++- example/lib/main.dart | 25 ++++-- ios/Classes/ZhiyingCommNative.h | 6 -- ios/Classes/ZhiyingCommNative.m | 9 +- ios/Classes/ZhiyingCommNativeProtocol.h | 15 +--- ios/Classes/ZhiyingCommNativeResult.h | 6 -- ios/Classes/ZhiyingCommNativeResult.m | 6 -- lib/native/native_router.dart | 20 ----- lib/pages/empty_page.dart | 11 ++- lib/util/enum_util.dart | 9 -- lib/util/native_util.dart | 85 +++---------------- lib/util/navigator_observer.dart | 2 - lib/util/net_util.dart | 33 +++---- lib/util/page_factory.dart | 8 -- lib/util/router_util.dart | 8 -- lib/util/widget_factory.dart | 56 ++++++++++++ lib/zhiying_comm.dart | 1 + 18 files changed, 148 insertions(+), 197 deletions(-) create mode 100644 lib/util/widget_factory.dart diff --git a/android/src/main/java/cn/zhios/zhiying_comm/ZhiyingFlutterCommNativable.java b/android/src/main/java/cn/zhios/zhiying_comm/ZhiyingFlutterCommNativable.java index afa9193..fbe9d30 100644 --- a/android/src/main/java/cn/zhios/zhiying_comm/ZhiyingFlutterCommNativable.java +++ b/android/src/main/java/cn/zhios/zhiying_comm/ZhiyingFlutterCommNativable.java @@ -1,11 +1,4 @@ -/* - * @Author: your name - * @Date: 2020-06-16 15:37:18 - * @LastEditTime: 2020-06-19 17:13:52 - * @LastEditors: your name - * @Description: In User Settings Edit - * @FilePath: /hairuyi_flutter_comm/android/src/main/kotlin/com/fnuoos/hairuyi_flutter_comm/HairuyiFlutterCommNativable.java - */ + package cn.zhios.zhiying_comm; import java.util.Map; diff --git a/example/android/app/src/main/java/cn/zhios/zhiying_comm_example/MainActivity.java b/example/android/app/src/main/java/cn/zhios/zhiying_comm_example/MainActivity.java index 6f2a7c8..15e7451 100644 --- a/example/android/app/src/main/java/cn/zhios/zhiying_comm_example/MainActivity.java +++ b/example/android/app/src/main/java/cn/zhios/zhiying_comm_example/MainActivity.java @@ -1,13 +1,47 @@ package cn.zhios.zhiying_comm_example; +import cn.zhios.zhiying_comm.ZhiyingFlutterCommHandler; +import cn.zhios.zhiying_comm.ZhiyingFlutterCommNativable; +import cn.zhios.zhiying_comm.ZhiyingFlutterCommNative; +import cn.zhios.zhiying_comm.ZhiyingFlutterCommNativeResult; + +import java.util.HashMap; +import java.util.Map; + import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugins.GeneratedPluginRegistrant; -public class MainActivity extends FlutterActivity { +public class MainActivity extends FlutterActivity implements ZhiyingFlutterCommNativable { @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine); + ZhiyingFlutterCommNative.getInstance().regist((ZhiyingFlutterCommNativable) this); } + + boolean localDebug = false; + + @Override + public void openPage(Map params) { + + } + + @Override + public void openNativePage(Map params) { + + } + + @Override + public Map getSetting() { + Map map = new HashMap(); + map.put("domain", "http://120.76.175.204:8989"); + return map; + } + + @Override + public void invokeMethod(String method, Map params, ZhiyingFlutterCommHandler handler) { + return ; + } + } diff --git a/example/lib/main.dart b/example/lib/main.dart index 9c9a6a1..dd6a537 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -21,13 +21,24 @@ class _MyAppState extends State { Widget build(BuildContext context) { return MaterialApp( home: Scaffold( - appBar: AppBar( - title: const Text('智莺-基础库'), - ), - body: Center( - child: Text('123'), - ), - ), + appBar: AppBar( + title: const Text('智莺-基础库'), + ), + body: Wrap( + direction: Axis.horizontal, + spacing: 5, + children: [ + RaisedButton( + onPressed: () { + NetUtil.post('/siteapi/v1/ucenter/login/', params: { + 'username': 'xiangguohui', + 'password': 'fnuo123com' + }); + }, + child: Text('登录请求'), + ) + ], + )), ); } } diff --git a/ios/Classes/ZhiyingCommNative.h b/ios/Classes/ZhiyingCommNative.h index 0d4fa0f..0acf1f9 100644 --- a/ios/Classes/ZhiyingCommNative.h +++ b/ios/Classes/ZhiyingCommNative.h @@ -1,9 +1,3 @@ -// -// ZhiyingCommNative.h -// hairuyi_flutter_comm -// -// Created by Weller on 2020/5/16. -// #import #import "ZhiyingCommNativeProtocol.h" diff --git a/ios/Classes/ZhiyingCommNative.m b/ios/Classes/ZhiyingCommNative.m index 50041ea..618b7e9 100644 --- a/ios/Classes/ZhiyingCommNative.m +++ b/ios/Classes/ZhiyingCommNative.m @@ -1,9 +1,4 @@ -// -// ZhiyingCommNative.m -// hairuyi_flutter_comm -// -// Created by Weller on 2020/5/16. -// + #import #import "ZhiyingCommNative.h" #import "ZhiyingCommNativeResult.h" @@ -15,7 +10,7 @@ static id _delegate; + (void)registerWithRegistrar:(NSObject*)registrar { FlutterMethodChannel* channel = [FlutterMethodChannel - methodChannelWithName:@"hairuyi_flutter_comm://method" + methodChannelWithName:@"zhiying_comm://method" binaryMessenger:[registrar messenger]]; ZhiyingCommNative* instance = [[ZhiyingCommNative alloc] init]; [registrar addMethodCallDelegate:instance channel:channel]; diff --git a/ios/Classes/ZhiyingCommNativeProtocol.h b/ios/Classes/ZhiyingCommNativeProtocol.h index 671955b..d4b112e 100644 --- a/ios/Classes/ZhiyingCommNativeProtocol.h +++ b/ios/Classes/ZhiyingCommNativeProtocol.h @@ -1,17 +1,4 @@ -/* - * @Author: your name - * @Date: 2020-06-16 15:37:18 - * @LastEditTime: 2020-06-20 11:28:22 - * @LastEditors: Please set LastEditors - * @Description: In User Settings Edit - * @FilePath: /hairuyi_flutter_comm/ios/Classes/HairuyiFlutterCommNativeProtocol.h - */ -// -// ZhiyingCommNativeProtocol.h -// hairuyi_flutter_comm -// -// Created by Weller on 2020/5/16. -// + #import "ZhiyingCommNativeResult.h" diff --git a/ios/Classes/ZhiyingCommNativeResult.h b/ios/Classes/ZhiyingCommNativeResult.h index 96e9e21..ed1dcc2 100644 --- a/ios/Classes/ZhiyingCommNativeResult.h +++ b/ios/Classes/ZhiyingCommNativeResult.h @@ -1,9 +1,3 @@ -// -// ZhiyingCommNativeResult.h -// hairuyi_flutter_comm -// -// Created by Weller on 2020/5/16. -// #import diff --git a/ios/Classes/ZhiyingCommNativeResult.m b/ios/Classes/ZhiyingCommNativeResult.m index 67e7344..4cbf778 100644 --- a/ios/Classes/ZhiyingCommNativeResult.m +++ b/ios/Classes/ZhiyingCommNativeResult.m @@ -1,9 +1,3 @@ -// -// ZhiyingCommNativeResult.m -// hairuyi_flutter_comm -// -// Created by Weller on 2020/5/16. -// #import "ZhiyingCommNativeResult.h" diff --git a/lib/native/native_router.dart b/lib/native/native_router.dart index d7a89e5..5d47f81 100644 --- a/lib/native/native_router.dart +++ b/lib/native/native_router.dart @@ -1,12 +1,3 @@ -/* - * @Author: your name - * @Date: 2020-06-19 14:59:26 - * @LastEditTime: 2020-06-24 16:37:35 - * @LastEditors: Please set LastEditors - * @Description: In User Settings Edit - * @FilePath: /hairuyi_flutter_comm/lib/native/native_router.dart - */ - // 重要!!!!! // 重要!!!!! // 重要!!!!! @@ -20,15 +11,4 @@ enum NativeRouter { openModifyPayPassword, // 打开修改支付密码 - openVerifyByAlipay, // 打开支付宝实名认证 - openSettingAlipay, // 打开支付宝绑定页面 - openContacts, // 打开人脉 - openLiveAnchor, //打开主播开播页面 - openLiveWatch, //打开观看直播页面 - openLiveRecord, // 打开会看(录播) - openWeChatShare, // 分享到微信 - openSharePop, //打开分享弹窗 - openSearchKeyword, // 关键词搜索 - openWithdrawal, // 打开提现页面 - showIntegralPop, // 展示获得积分弹窗 } diff --git a/lib/pages/empty_page.dart b/lib/pages/empty_page.dart index a4f8693..901eecf 100644 --- a/lib/pages/empty_page.dart +++ b/lib/pages/empty_page.dart @@ -1,10 +1,13 @@ +import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; class EmptyPage extends StatelessWidget { @override Widget build(BuildContext context) { - - return Center(child: Text('Page has no regist'),); + return Scaffold( + body: Center( + child: Text('页面未注册'), + ), + ); } - -} \ No newline at end of file +} diff --git a/lib/util/enum_util.dart b/lib/util/enum_util.dart index 3c0e213..798b22e 100644 --- a/lib/util/enum_util.dart +++ b/lib/util/enum_util.dart @@ -1,12 +1,3 @@ -/* - * @Author: your name - * @Date: 2020-06-19 15:09:28 - * @LastEditTime: 2020-06-19 15:09:38 - * @LastEditors: Please set LastEditors - * @Description: In User Settings Edit - * @FilePath: /hairuyi_flutter_comm/lib/utils/enum_util.dart - */ - ///枚举类型转string String enumToString(o) => o.toString().split('.').last; diff --git a/lib/util/native_util.dart b/lib/util/native_util.dart index 308c7fe..5cd8ab9 100644 --- a/lib/util/native_util.dart +++ b/lib/util/native_util.dart @@ -1,15 +1,7 @@ -/* - * 与原生app进行交互 - * @Author: fnuoos - * @Date: 2020-05-15 11:53:06 - * @Last Modified by: mikey.zhaopeng - * @Last Modified time: 2020-05-15 11:53:58 - */ - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; +import 'package:zhiying_comm/pages/empty_page.dart'; class NativeUtil { // 工厂模式 @@ -20,7 +12,7 @@ class NativeUtil { MethodChannel _methodChannel; NativeUtil._internal() { // 初始化 - _methodChannel = MethodChannel('hairuyi_flutter_comm://method'); + _methodChannel = MethodChannel('zhiying_comm://method'); } static NativeUtil _getInstance() { if (_instance == null) { @@ -52,16 +44,14 @@ class NativeUtil { } // 公共跳转方法 - static Future openPage(BuildContext context, Map params) { - // if (params.containsKey('is_to_flutter') && - // params['is_to_flutter'].toString() == '1') { - // BasePageModel model = BasePageModel.fromJson(params); - // return Navigator.of(context).push(MaterialPageRoute( - // builder: (BuildContext context) => - // PageFactory.create(model.SkipUIIdentifier, model))); - // } - return NativeUtil._invokeChannel('openPage', - params: new Map.from(params)); + static Future openPage(BuildContext context, Map params) { + return Navigator.of(context) + .push(MaterialPageRoute(builder: (BuildContext context) { + if (!params.containsKey('SkipUIIdentifier')) { + return EmptyPage(); + } + return PageFactory.create(params['SkipUIIdentifier'], params); + })); } //跳转原生普通页面,非公共跳转 @@ -78,65 +68,10 @@ class NativeUtil { NativeUtil._invokeChannel('openGoodsDetail', params: params); } - static Future getToken() async { - Map data = await NativeUtil._invokeChannel('getToken'); - if (data.containsKey('token')) { - return data['token']; - } - return ''; - } - static Future> getSetting() async { return NativeUtil._invokeChannel('getSetting'); } - // 打开支付宝支付 - static Future payByAlipay(String payCode) async { - Map params = {"code": payCode}; - Map result = await NativeUtil._invokeChannel('openAliPay', - params: new Map.from(params)); - if (result.containsKey('msg')) { - Fluttertoast.showToast( - msg: result['msg'], - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.BOTTOM, - ); - } - if (result.containsKey('success') && result['success'] == '1') { - return true; - } - return false; - } - - // 打开微信支付 - static Future payByWechat(Map params) async { - Map result = await NativeUtil._invokeChannel( - 'openWechatPay', - params: new Map.from(params)); - - if (result.containsKey('msg')) { - Fluttertoast.showToast( - msg: result['msg'], - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.BOTTOM, - ); - } - if (result.containsKey('success') && result['success'] == '1') { - return true; - } - return false; - } - - static Future> onPagePop(bool isTop) async { - NativeUtil._invokeChannel('pageDidPop', - params: new Map.from({'isTop': isTop})); - } - - static Future> onPagePush(bool isTop) async { - NativeUtil._invokeChannel('pageDidPush', - params: new Map.from({'isTop': isTop})); - } - static Future> invokeMethod( String method, Map params) { Map request = {"method": method, "params": params}; diff --git a/lib/util/navigator_observer.dart b/lib/util/navigator_observer.dart index 548a0e6..2fcbff4 100644 --- a/lib/util/navigator_observer.dart +++ b/lib/util/navigator_observer.dart @@ -21,13 +21,11 @@ class FNNavigatorObserver extends NavigatorObserver { void didPush(Route route, Route previousRoute) { notifyHide(previousRoute); notifyShow(route); - NativeUtil.onPagePush(previousRoute == null ? true : previousRoute.isFirst); } void didPop(Route route, Route previousRoute) { notifyHide(route); notifyShow(previousRoute); - NativeUtil.onPagePush(previousRoute == null ? true : previousRoute.isFirst); } void didRemove(Route route, Route previousRoute) { diff --git a/lib/util/net_util.dart b/lib/util/net_util.dart index 10f0bd8..2bc9bce 100644 --- a/lib/util/net_util.dart +++ b/lib/util/net_util.dart @@ -31,7 +31,6 @@ class NetUtil { if (_dio == null) { var setting = await NativeUtil.getSetting(); String domain = setting['domain']; //'http://www.hairuyi.com/'; - String version = setting['version']; //'42'; _config(domain, apiVersion: _apiVersion); } return _dio; @@ -45,9 +44,10 @@ class NetUtil { baseUrl: baseUrl, connectTimeout: 15000, receiveTimeout: 15000, - contentType: Headers.formUrlEncodedContentType, + contentType: Headers.jsonContentType, followRedirects: true)); _dio.interceptors.add(_NetInterceptors()); + _dio.interceptors.add(LogInterceptor()); _apiVersion = apiVersion; const bool inProduction = const bool.fromEnvironment("dart.vm.product"); @@ -93,7 +93,7 @@ class NetUtil { int height = window.physicalSize.height.floor(); params["resolutionRatio"] = "$width*$height"; - String token = await NativeUtil.getToken(); + String token = ''; if (token != null && token != '' && (!params.containsKey('token') || params['token'] == '')) { @@ -144,13 +144,13 @@ class NetUtil { return "$timestamp"; } - @Deprecated('方法弃用,建议使用 NetUtil.requet') static Future post(String path, {Map params}) async { if (params == null) { params = {}; } - Map sign = await signParams(params); + // Map sign = await signParams(params); + Map sign = params; Response response; try { Dio dio = await NetUtil.getInstance().dio; @@ -163,6 +163,7 @@ class NetUtil { } if (response.statusCode != 200) { + // 请求错误 const bool inProduction = const bool.fromEnvironment("dart.vm.product"); if (!inProduction) { Fluttertoast.showToast(msg: response.statusMessage); @@ -171,18 +172,18 @@ class NetUtil { return {}; } - var result = jsonDecode(response.data); + var result = response.data; - if (result['success'] == 0 || result['success'] == '0') { - print('error: ' + result['msg']); - Fluttertoast.showToast( - msg: result['msg'], - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.BOTTOM, - ); - return {}; - } - return result['data']; + // if (result['success'] == 0 || result['success'] == '0') { + // print('error: ' + result['msg']); + // Fluttertoast.showToast( + // msg: result['msg'], + // toastLength: Toast.LENGTH_SHORT, + // gravity: ToastGravity.BOTTOM, + // ); + // return {}; + // } + return result; } static Future post2(String path, diff --git a/lib/util/page_factory.dart b/lib/util/page_factory.dart index d4286e7..b871450 100644 --- a/lib/util/page_factory.dart +++ b/lib/util/page_factory.dart @@ -1,11 +1,3 @@ -/* - * @Author: Weller - * @Date: 2020-05-16 17:26:40 - * @LastEditTime: 2020-06-16 15:40:43 - * @LastEditors: Please set LastEditors - * @Description: In User Settings Edit - * @FilePath: /hairuyi_flutter_comm/lib/router/page_factory.dart - */ import 'package:flutter/material.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; diff --git a/lib/util/router_util.dart b/lib/util/router_util.dart index ec3ebab..584a952 100644 --- a/lib/util/router_util.dart +++ b/lib/util/router_util.dart @@ -1,11 +1,3 @@ -/* - * @Author: your name - * @Date: 2020-05-16 17:50:31 - * @LastEditTime: 2020-06-17 18:27:00 - * @LastEditors: Please set LastEditors - * @Description: In User Settings Edit - * @FilePath: /hairuyi_flutter_comm/lib/router/router_util.dart - */ import 'package:flutter/material.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; diff --git a/lib/util/widget_factory.dart b/lib/util/widget_factory.dart new file mode 100644 index 0000000..ff31c1c --- /dev/null +++ b/lib/util/widget_factory.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +import 'package:zhiying_comm/zhiying_comm.dart'; + +typedef Widget CreateWidget(Map model); + +/* Widget生成工厂, 用于生成flutter端组件 */ +class WidgetFactory { + static Map widgetCreater = Map(); + + /** + * @description: 注册组件 + * @param {name} 组件名,唯一 + * @return: + */ + static void regist(String name, CreateWidget creater) { + if (widgetCreater.containsKey(name)) { + return; + } + + widgetCreater[name] = creater; + } + + /** + * @description: 创建组件 + * @param {String} 组件注册的名字 + * @return: + */ + static Widget create(String name, Map model) { + if (widgetCreater.containsKey(name)) { + return widgetCreater[name](model); + } + const bool inProduction = const bool.fromEnvironment("dart.vm.product"); + if (!inProduction) { + return Container(); + } else { + return Container( + width: double.infinity, + height: 100, + color: Colors.redAccent, + child: Center( + child: Text('当前组件尚未注册'), + ), + ); + } + } + + /** + * @description: 是否注册组件 + * @param {bool} + * @return: + */ + static bool hasRegisted(String name) { + return widgetCreater.containsKey(name); + } +} diff --git a/lib/zhiying_comm.dart b/lib/zhiying_comm.dart index ad28c70..1600c0b 100644 --- a/lib/zhiying_comm.dart +++ b/lib/zhiying_comm.dart @@ -9,6 +9,7 @@ export 'util/native_util.dart'; export 'util/navigator_observer.dart'; export 'util/net_util.dart'; export 'util/page_factory.dart'; +export 'util/widget_factory.dart'; export 'util/router_util.dart'; export 'util/enum_util.dart';