Commit 885b3a97 authored by 林生雨's avatar 林生雨

commit

parent ac5fbef3
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="android" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> <module external.linked.project.id="android" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/../build" />
<option name="BUILDABLE" value="false" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
......
...@@ -26,29 +26,6 @@ ...@@ -26,29 +26,6 @@
</compilerArguments> </compilerArguments>
</configuration> </configuration>
</facet> </facet>
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":app" />
<option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.5.0" />
<option name="LAST_KNOWN_AGP_VERSION" value="3.5.0" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component> </component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/../../build/app/intermediates/javac/debug/classes" /> <output url="file://$MODULE_DIR$/../../build/app/intermediates/javac/debug/classes" />
...@@ -192,6 +169,6 @@ ...@@ -192,6 +169,6 @@
<orderEntry type="module" module-name="flutter_boost-0.0.420-android-flutter_boost" /> <orderEntry type="module" module-name="flutter_boost-0.0.420-android-flutter_boost" />
<orderEntry type="module" module-name="sqflite" /> <orderEntry type="module" module-name="sqflite" />
<orderEntry type="module" module-name="android-path_provider" /> <orderEntry type="module" module-name="android-path_provider" />
<orderEntry type="module" module-name="flutter_plugin-11f928f7165e76994978f521a25e89d8d25824b7-android-gengmei_flutter_plugin" /> <orderEntry type="module" module-name="android-gengmei_flutter_plugin" />
</component> </component>
</module> </module>
\ No newline at end of file
sdk.dir=/Users/apple/Library/Android/sdk sdk.dir=/Users/apple/Library/Android/sdk
flutter.sdk=/Users/apple/Downloads/flutter flutter.sdk=/Users/apple/Downloads/flutter
flutter.buildMode=debug flutter.buildMode=release
flutter.versionName=1.0.0 flutter.versionName=1.0.0
flutter.versionCode=1 flutter.versionCode=1
\ No newline at end of file
...@@ -56,6 +56,8 @@ function android_apk(){ ...@@ -56,6 +56,8 @@ function android_apk(){
cd /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/ cd /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/
unzip /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/app-${suff}.zip unzip /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/app-${suff}.zip
cp -r /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/lib/armeabi-v7a/libapp.so /Users/apple/lsy/gengmei_alpha/alpha/libs/armeabi-v7a cp -r /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/lib/armeabi-v7a/libapp.so /Users/apple/lsy/gengmei_alpha/alpha/libs/armeabi-v7a
rm -rf /Users/apple/lsy/gengmei_alpha/alpha/src/main/assets/flutter_assets
cp -r /Users/apple/lsy/gmalpha_flutter/build/app/outputs/apk/${suff}/assets/flutter_assets /Users/apple/lsy/gengmei_alpha/alpha/src/main/assets/
} }
...@@ -240,4 +242,5 @@ ios ...@@ -240,4 +242,5 @@ ios
#ios_publish #ios_publish
#notifyDingDing #notifyDingDing
exit exit
\ No newline at end of file
/Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-25c02c805d4c3bcb2f90d63b21775a4aceb146aa /Users/apple/Downloads/flutter/.pub-cache/git/flutter_plugin-17fcda9a246dbf2b8268ce5b963e96df2f54b4fa
\ No newline at end of file \ No newline at end of file
This diff is collapsed.
...@@ -8,7 +8,68 @@ ...@@ -8,7 +8,68 @@
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch. // Override point for customization after application launch.
[GeneratedPluginRegistrant registerWithRegistry:self]; [GeneratedPluginRegistrant registerWithRegistry:self];
[self flutterMethod];
return [super application:application didFinishLaunchingWithOptions:launchOptions]; return [super application:application didFinishLaunchingWithOptions:launchOptions];
} }
- (void)flutterMethod {
FlutterViewController* controller =
(FlutterViewController*)self.window.rootViewController;
FlutterMethodChannel* buryChannel = [FlutterMethodChannel
methodChannelWithName:@"flutter_bury_channel"
binaryMessenger:controller];
[buryChannel setMethodCallHandler:^(FlutterMethodCall* call,
FlutterResult result) {
NSLog(@" ME %@ argue %@",call.method,call.arguments);
if([call.method isEqualToString:@"FLUTTER_TO_H5"]){
NSLog(@"FLUTTER_TO_H5");
}else if([call.method isEqualToString:@"FLUTTER_TO_NATIVE"]){
NSLog(@"FLUTTER_TO_NATIVE");
}else if ([call.method isEqualToString:@"FLUTTER_BURIED"]){
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
//APPInfo
[dict setObject:@"alpha" forKey:@"app_name"];
[dict setObject:@"app_version_name" forKey:@"app_version_name"];
[dict setObject:@"channel" forKey:@"channel"];
[dict setObject:@"" forKey:@"current_city_id"];
[dict setObject:[[NSMutableDictionary alloc] initWithCapacity:0] forKey:@"user_type"];
[dict setObject:@"" forKey:@"grey_type"];
//DeviceInfo
[dict setObject:@"device_id" forKey:@"device_id"];
[dict setObject:@"Apple" forKey:@"manufacturer"];
[dict setObject:@"lng" forKey:@"lng"];
[dict setObject:@"lat" forKey:@"lat"];
[dict setObject:@"is_WiFi" forKey:@"is_WiFi"];
[dict setObject:@"ip" forKey:@"ip"];
[dict setObject:@"model" forKey:@"model"];
[dict setObject:@"sys_version" forKey:@"sys_version"];
[dict setObject:@"Apple" forKey:@"lng"];
[dict setObject:@"idfa" forKey:@"idfa"];
[dict setObject:@"idfv" forKey:@"idfv"];
[dict setObject:@"user_id" forKey:@"user_id"];
[dict setObject:@"" forKey:@"app_session_id"];
[dict setObject:@"create_at" forKey:@"create_at"];
[dict setObject:@"110" forKey:@"version"];
result(dict);
}else if([call.method isEqualToString:@"GET_NET_TYPE"]){
result(@"wifi");
}else if([call.method isEqualToString:@"INIT_PARAMS"]){
NSMutableDictionary * map=[[NSMutableDictionary alloc] init];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"sessionid=9odo0sov71x66ke9dlphibnq9i9gduxj;_gtid=3fbe9b78d2cb11e98bc1525400e82fab5270; _gm_token=db88861568285036" forKey:@"cookie"];
[dict setObject:@"debug" forKey:@"buildConfig"];
//HERE
[dict setObject:@"172.30.9.84:6666" forKey:@"proxy"];
result(dict);
}
}];
}
@end @end
...@@ -15,6 +15,7 @@ class BuriedImpl implements BuriedRouter { ...@@ -15,6 +15,7 @@ class BuriedImpl implements BuriedRouter {
String extra_param, String extra_param,
String referrer_tab_name, String referrer_tab_name,
String isPush}) { String isPush}) {
print("lsy !! PAGE END ");
BuriedCenter.getInstance().onPageEnd(page_name, inPage, outPage, BuriedCenter.getInstance().onPageEnd(page_name, inPage, outPage,
fake: fake, fake: fake,
business_id: business_id, business_id: business_id,
...@@ -27,11 +28,13 @@ class BuriedImpl implements BuriedRouter { ...@@ -27,11 +28,13 @@ class BuriedImpl implements BuriedRouter {
@override @override
void onEvent(String type, Map<String, String> params) { void onEvent(String type, Map<String, String> params) {
print("lsy !! ON EVENT ");
BuriedCenter.getInstance().onEvent(type, params); BuriedCenter.getInstance().onEvent(type, params);
} }
@override @override
void onClick(String pageName, String buttonName) { void onClick(String pageName, String buttonName) {
print("lsy !! ON CLICK ");
BuriedCenter.getInstance().onEvent( BuriedCenter.getInstance().onEvent(
"CLICK_EVENT", {"page_name": pageName, "button_name": buttonName}); "CLICK_EVENT", {"page_name": pageName, "button_name": buttonName});
} }
......
...@@ -26,8 +26,6 @@ class BuriedCenter { ...@@ -26,8 +26,6 @@ class BuriedCenter {
return _instance; return _instance;
} }
var normalRequest = BuryingRequest.create();
void onPageEnd(String page_name, String inPage, String outPage, void onPageEnd(String page_name, String inPage, String outPage,
{String fake, {String fake,
String business_id, String business_id,
...@@ -39,7 +37,7 @@ class BuriedCenter { ...@@ -39,7 +37,7 @@ class BuriedCenter {
if (page_name == null) { if (page_name == null) {
print("$BURIED_TAG onPageStart page_name is null"); print("$BURIED_TAG onPageStart page_name is null");
} }
normalRequest.params.clear(); var normalRequest = BuryingRequest.create();
normalRequest.type = "page_view"; normalRequest.type = "page_view";
normalRequest.params["in"] = inPage ?? ""; normalRequest.params["in"] = inPage ?? "";
normalRequest.params["out"] = outPage ?? ""; normalRequest.params["out"] = outPage ?? "";
...@@ -54,7 +52,7 @@ class BuriedCenter { ...@@ -54,7 +52,7 @@ class BuriedCenter {
} }
void onEvent(String type, Map<String, String> params) { void onEvent(String type, Map<String, String> params) {
normalRequest.params.clear(); var normalRequest = BuryingRequest.create();
normalRequest.type = type; normalRequest.type = type;
if (params != null) { if (params != null) {
normalRequest.params.addAll(params); normalRequest.params.addAll(params);
......
...@@ -22,12 +22,21 @@ class SendTask { ...@@ -22,12 +22,21 @@ class SendTask {
} }
void _sendBuriedData(BuryingRequest request) { void _sendBuriedData(BuryingRequest request) {
_client.dataReport(Stream.fromFuture(Future.value(request))); getNetType().listen((value) {
// .listen((data) { _deviceInfo.netType = value;
// print("DATAWWWW $data"); request.device = _deviceInfo;
// }).onError((error) { print("FLUTTER 埋点 --> $request");
// print(error); _client
// }); .dataReport(Stream.fromFuture(Future.value(request)))
.listen((data) {
print("埋点响应 --> $data");
}).onError((error) {
print(error);
});
}).onError((error) {
print("FLUTTER 埋点ERROR --> $error");
_client.dataReport(Stream.fromFuture(Future.value(request)));
});
} }
void sendBuried(BuryingRequest request) { void sendBuried(BuryingRequest request) {
...@@ -49,7 +58,7 @@ class SendTask { ...@@ -49,7 +58,7 @@ class SendTask {
BuryingRequest assemRequset(BuryingRequest request) { BuryingRequest assemRequset(BuryingRequest request) {
if (_deviceInfo == null) { if (_deviceInfo == null) {
_deviceInfo = new DeviceInfo(); _deviceInfo = DeviceInfo.create();
_deviceInfo.deviceId = _deviceInfo.deviceId =
CacheManager.getInstance().get(MEMORY_CACHE).get("device_id") ?? ""; CacheManager.getInstance().get(MEMORY_CACHE).get("device_id") ?? "";
_deviceInfo.manufacturer = _deviceInfo.manufacturer =
...@@ -75,7 +84,7 @@ class SendTask { ...@@ -75,7 +84,7 @@ class SendTask {
CacheManager.getInstance().get(MEMORY_CACHE).get("idfa") ?? ""; CacheManager.getInstance().get(MEMORY_CACHE).get("idfa") ?? "";
} }
if (_appInfo == null) { if (_appInfo == null) {
_appInfo = new AppInfo(); _appInfo = AppInfo.create();
_appInfo.name = _appInfo.name =
CacheManager.getInstance().get(MEMORY_CACHE).get("app_name") ?? ""; CacheManager.getInstance().get(MEMORY_CACHE).get("app_name") ?? "";
_appInfo.version = CacheManager.getInstance() _appInfo.version = CacheManager.getInstance()
...@@ -99,9 +108,8 @@ class SendTask { ...@@ -99,9 +108,8 @@ class SendTask {
_appInfo.greyType = _appInfo.greyType =
CacheManager.getInstance().get(MEMORY_CACHE).get("grey_type") ?? ""; CacheManager.getInstance().get(MEMORY_CACHE).get("grey_type") ?? "";
} }
//TODO!! // _deviceInfo.netType =
_deviceInfo.netType = // CacheManager.getInstance().get(MEMORY_CACHE).get("net_type") ?? "";
CacheManager.getInstance().get(MEMORY_CACHE).get("net_type") ?? "";
request.userId = request.userId =
CacheManager.getInstance().get(MEMORY_CACHE).get("user_id") ?? ""; CacheManager.getInstance().get(MEMORY_CACHE).get("user_id") ?? "";
request.appSessionId = request.appSessionId =
......
...@@ -19,17 +19,6 @@ abstract class BasePage<T extends StatefulWidget> extends State<T> { ...@@ -19,17 +19,6 @@ abstract class BasePage<T extends StatefulWidget> extends State<T> {
void initState() { void initState() {
super.initState(); super.initState();
startTime = DateTime.now().millisecondsSinceEpoch; startTime = DateTime.now().millisecondsSinceEpoch;
if (CacheManager.getInstance().get(MEMORY_CACHE).get("version") == null) {
getBuriedInfo().then((value) {
Map temp=new Map<String, dynamic>.from(value);
print("lsy $temp");
temp.forEach((k, v) {
CacheManager.getInstance().get(MEMORY_CACHE).save(k, v);
});
}).catchError((error) {
print(error);
});
}
} }
void pageStop(){ void pageStop(){
......
...@@ -3,9 +3,14 @@ ...@@ -3,9 +3,14 @@
* @date 2019-09-24 * @date 2019-09-24
**/ **/
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:gmalpha_flutter/commonModel/cache/CacheManager.dart';
import 'package:gmalpha_flutter/commonModel/net/Api.dart';
import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart';
import 'package:rxdart/rxdart.dart'; import 'package:rxdart/rxdart.dart';
const BURIED_METHOD = "FLUTTER_BURIED"; const BURIED_METHOD = "FLUTTER_BURIED";
const NET_TYPE = "GET_NET_TYPE";
const INIT_PARAMS = "INIT_PARAMS";
const platform = const MethodChannel('flutter_bury_channel'); const platform = const MethodChannel('flutter_bury_channel');
void jumpToH5(String jumpToName, Map params) { void jumpToH5(String jumpToName, Map params) {
...@@ -28,6 +33,32 @@ Future getBuriedInfo() async { ...@@ -28,6 +33,32 @@ Future getBuriedInfo() async {
return await platform.invokeMethod(BURIED_METHOD, null); return await platform.invokeMethod(BURIED_METHOD, null);
} }
Observable getNetType() {
return Observable.fromFuture(platform.invokeMethod(NET_TYPE, null));
}
void initParams() {
platform.invokeMethod(INIT_PARAMS, null).then((value) {
print("lsy INITPARAMS !! $value");
Api.getInstance().initBuildConfig(value);
initBuried();
}).catchError((error) {
print(error);
});
}
void initBuried() {
getBuriedInfo().then((value) {
Map temp = new Map<String, dynamic>.from(value);
print("lsy INITBURIED !! $temp");
temp.forEach((k, v) {
CacheManager.getInstance().get(MEMORY_CACHE).save(k, v);
});
}).catchError((error) {
print(error);
});
}
String getNowTimeSecond() { String getNowTimeSecond() {
return "${DateTime.now().millisecondsSinceEpoch}"; return "${DateTime.now().millisecondsSinceEpoch}";
// String year = "${DateTime.now().year}".length == 4 // String year = "${DateTime.now().year}".length == 4
......
...@@ -32,11 +32,23 @@ class Api { ...@@ -32,11 +32,23 @@ class Api {
} }
bool initBuildConfig(Map params) { bool initBuildConfig(Map params) {
print("PARAMS!! ${params}"); if (params == null) {
String baseUrl = getBaseUrl(params["buildConfig"]) + "/"; return false;
}
String buildConfig = params["buildConfig"];
if (buildConfig == null) {
return false;
}
String baseUrl = getBaseUrl(buildConfig) + "/";
if (baseUrl == null) { if (baseUrl == null) {
return false; return false;
} }
if (buildConfig == "debug" || buildConfig == "dev") {
String httpProxy = params["proxy"];
if (httpProxy != null && httpProxy.isNotEmpty) {
DioUtil().setProxy(httpProxy);
}
}
var cookie = params["cookie"] == null ? params["Cookie"] : params["cookie"]; var cookie = params["cookie"] == null ? params["Cookie"] : params["cookie"];
Map cookieMap = {}; Map cookieMap = {};
cookieMap.putIfAbsent("Cookie", () => cookie); cookieMap.putIfAbsent("Cookie", () => cookie);
......
...@@ -195,6 +195,15 @@ class DioUtil { ...@@ -195,6 +195,15 @@ class DioUtil {
} }
} }
void setProxy(String proxy) {
(_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(client) {
client.findProxy = (url) {
return 'PROXY $proxy';
};
};
}
/// set Config. /// set Config.
void setConfig(HttpConfig config) { void setConfig(HttpConfig config) {
_statusKey = config.status ?? _statusKey; _statusKey = config.status ?? _statusKey;
......
...@@ -14,6 +14,7 @@ import 'comment_suggest.dart'; ...@@ -14,6 +14,7 @@ import 'comment_suggest.dart';
void main() async { void main() async {
runApp(MyApp()); runApp(MyApp());
initParams();
} }
class MyApp extends StatefulWidget { class MyApp extends StatefulWidget {
...@@ -44,11 +45,10 @@ class _MyAppState extends State<MyApp> { ...@@ -44,11 +45,10 @@ class _MyAppState extends State<MyApp> {
: params["selectedPath"] as List<String>); : params["selectedPath"] as List<String>);
}, },
"prestige": (pageName, params, _) { "prestige": (pageName, params, _) {
print("ERROR , PRESTIGE"); print("PARAMS!! ${params}");
String fromPage = params["fromPage"]; String fromPage = params["fromPage"];
if (params == null || if (params == null ||
fromPage == null || fromPage == null) {
Api.getInstance().initBuildConfig(params) == null) {
return ErrorPage("出错:需要传递的参数为空"); return ErrorPage("出错:需要传递的参数为空");
} }
int userId = int.parse(params["userId"]); int userId = int.parse(params["userId"]);
...@@ -59,8 +59,7 @@ class _MyAppState extends State<MyApp> { ...@@ -59,8 +59,7 @@ class _MyAppState extends State<MyApp> {
"activity_report": (pageName, params, _) { "activity_report": (pageName, params, _) {
String fromPage = params["fromPage"]; String fromPage = params["fromPage"];
if (params == null || if (params == null ||
fromPage == null || fromPage == null) {
Api.getInstance().initBuildConfig(params) == null) {
return ErrorPage("出错:需要传递的参数为空"); return ErrorPage("出错:需要传递的参数为空");
} }
return RouterCenterImpl() return RouterCenterImpl()
...@@ -90,13 +89,13 @@ class _MyAppState extends State<MyApp> { ...@@ -90,13 +89,13 @@ class _MyAppState extends State<MyApp> {
// '_gm_token=72ee1c1569466411; _gtid=58d3cc14df8711e99736525400e82fab81; sessionid=vhksn66854pejzjwi8ljhrmcew3domh2', // '_gm_token=72ee1c1569466411; _gtid=58d3cc14df8711e99736525400e82fab81; sessionid=vhksn66854pejzjwi8ljhrmcew3domh2',
// "buildConfig": "debug" // "buildConfig": "debug"
// }); // });
//// return RouterCenterImpl()
//// .findActivityReportRouter()
//// ?.getActivityReportPage(279, 1, '');
//// return RouterCenterImpl().findPrestigeRouter()?.getReputationsPage(1, "ww", "ww");
// return RouterCenterImpl() // return RouterCenterImpl()
// .findAlbumRouter() // .findActivityReportRouter()
// .getAlbumPage("com.example.gengmei_flutter_plugin_example",true, 2, null); // ?.getActivityReportPage(279, 1, '');
//// return RouterCenterImpl().findPrestigeRouter()?.getReputationsPage(1, "ww", "ww");
//// return RouterCenterImpl()
//// .findAlbumRouter()
//// .getAlbumPage("com.example.gengmei_flutter_plugin_example",true, 2, null);
// }, // },
// }, // },
builder: FlutterBoost.init(postPush: _onRoutePushed), builder: FlutterBoost.init(postPush: _onRoutePushed),
......
...@@ -218,8 +218,8 @@ packages: ...@@ -218,8 +218,8 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
path: "." path: "."
ref: "25c02c805d4c3bcb2f90d63b21775a4aceb146aa" ref: "17fcda9a246dbf2b8268ce5b963e96df2f54b4fa"
resolved-ref: "25c02c805d4c3bcb2f90d63b21775a4aceb146aa" resolved-ref: "17fcda9a246dbf2b8268ce5b963e96df2f54b4fa"
url: "git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git" url: "git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git"
source: git source: git
version: "0.0.735" version: "0.0.735"
......
...@@ -34,7 +34,7 @@ dependencies: ...@@ -34,7 +34,7 @@ dependencies:
gengmei_flutter_plugin: gengmei_flutter_plugin:
git: git:
url: 'git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git' url: 'git@git.wanmeizhensuo.com:linshengyu/flutter_plugin.git'
ref: "25c02c805d4c3bcb2f90d63b21775a4aceb146aa" ref: "17fcda9a246dbf2b8268ce5b963e96df2f54b4fa"
protobuf: ^0.14.4 protobuf: ^0.14.4
grpc: ^2.1.2 grpc: ^2.1.2
flutter_svg: ^0.14.1 flutter_svg: ^0.14.1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment