Commit f052ccef2cf8fd293edaad4082aafb242b9d06b5

Authored by wdn127929
1 parent 93533c26

gi tgit

... ... @@ -4,7 +4,7 @@ source 'https://github.com/CocoaPods/Specs.git'
# source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
# source 'https://cdn.cocoapods.org/'
platform :ios, '9.0'
platform :ios, '11.0'
... ...
... ... @@ -255,7 +255,7 @@ SPEC CHECKSUMS:
core_location_fluttify: 9466a411ea7d22c6349c7e6a767ae4623f01eb1d
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_app_badger: b87fc231847b03b92ce1412aa351842e7e97932f
flutter_app_update: 65f61da626cb111d1b24674abc4b01728d7723bc
flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
... ... @@ -289,6 +289,6 @@ SPEC CHECKSUMS:
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
webview_flutter: 3603125dfd3bcbc9d8d418c3f80aeecf331c068b
PODFILE CHECKSUM: 1574ae4cc03174899add0135a43cdaf8019bd5fd
PODFILE CHECKSUM: 583d0874d9843cb84ef3a723537d644f42b3ebab
COCOAPODS: 1.11.3
... ...
... ... @@ -467,7 +467,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
SDKROOT = iphoneos;
... ... @@ -561,7 +561,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
... ... @@ -612,7 +612,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
SDKROOT = iphoneos;
... ... @@ -636,7 +636,7 @@
CURRENT_PROJECT_VERSION = 393;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
FLUTTER_BUILD_MODE = debug;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
... ...
... ... @@ -92,5 +92,7 @@
<string>INUIMFK21WGH</string>
<key>io.flutter.embedded_views_preview</key>
<string>YES</string>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
</dict>
</plist>
... ...
... ... @@ -2433,7 +2433,7 @@ class InvicationPageState extends State<InvicationPage>
child: Container(
child: Stack(
alignment: Alignment.bottomCenter,
overflow: Overflow.visible,
// overflow: Overflow.visible,
children: [
Container(
margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(18)),
... ... @@ -2597,7 +2597,7 @@ class InvicationPageState extends State<InvicationPage>
child: Container(
child: Stack(
alignment: Alignment.bottomCenter,
overflow: Overflow.visible,
// overflow: Overflow.visible,
children: [
Container(
margin: EdgeInsets.only(bottom: ScreenUtil().setWidth(18)),
... ...
import 'dart:async';
import 'package:device_info/device_info.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/widgets/app_bar.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:webview_flutter/webview_flutter.dart';
// import 'dart:async';
// import 'package:device_info/device_info.dart';
// import 'package:dio/dio.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:collection';
// import 'package:open_file/open_file.dart';
// import 'package:flutter_downloader/flutter_downloader.dart';
class WebPage extends StatefulWidget {
final String title;
final String url;
final bool need;
const WebPage({Key key, this.title, this.url, this.need = false})
: super(key: key);
@override
_WebPageState createState() => _WebPageState();
}
// import 'package:one_key/net/dio_util.dart';
// import 'package:one_key/res/colors.dart';
// import 'package:one_key/utils/event_bus.dart';
// import 'package:one_key/utils/utils.dart';
// import 'package:one_key/widgets/system_app_bar.dart';
// import 'package:path_provider/path_provider.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:webview_flutter/webview_flutter.dart';
class _WebPageState extends State<WebPage> {
final GlobalKey webViewKey = GlobalKey();
// import 'dart:async';
// import 'dart:convert';
// import 'dart:io';
InAppWebViewController webViewController;
InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
useShouldOverrideUrlLoading: true,
useOnDownloadStart: true,
mediaPlaybackRequiresUserGesture: false,
),
android: AndroidInAppWebViewOptions(
useHybridComposition: true,
),
ios: IOSInAppWebViewOptions(
allowsInlineMediaPlayback: true,
));
// import 'package:flutter/material.dart';
// import 'package:one_key/utils/event_bus.dart';
// import 'package:one_key/widgets/app_bar.dart';
// import 'package:one_key/widgets/system_app_bar.dart';
// import 'package:webview_flutter/webview_flutter.dart';
PullToRefreshController pullToRefreshController;
ContextMenu contextMenu;
String url = "";
double progress = 0;
final urlController = TextEditingController();
// Future<void> openFile(filePath) async {
// final _result = await OpenFile.open(filePath);
// print(_result.message);
// // import 'package:flutter_inappwebview/flutter_inappwebview.dart';
// import 'package:url_launcher/url_launcher.dart';
// import 'dart:collection';
// // import 'package:open_file/open_file.dart';
// // import 'package:flutter_downloader/flutter_downloader.dart';
// // setState(() {
// // _openResult = "type=${_result.type} message=${_result.message}";
// // });
// }
@override
void initState() {
super.initState();
// class WebPage extends StatefulWidget {
// final String title;
// final String url;
// final bool need;
// Enable hybrid composition.
_init();
}
// const WebPage({Key key, this.title, this.url, this.need = false})
// : super(key: key);
// @override
// _WebPageState createState() => _WebPageState();
// }
Future<bool> _checkPermission() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
if (Platform.isAndroid && androidInfo.version.sdkInt <= 28) {
final status = await Permission.storage.status;
if (status != PermissionStatus.granted) {
final result = await Permission.storage.request();
if (result == PermissionStatus.granted) {
return true;
}
} else {
return true;
}
} else {
return true;
}
return false;
}
// class _WebPageState extends State<WebPage> {
// final GlobalKey webViewKey = GlobalKey();
Future<bool> checkPermissionStorage() async {
var status = await Permission.storage.status;
if (!status.isGranted) {
status = await Permission.storage.request();
if (status.isGranted) {
return true;
}
} else {
return true;
}
return false;
}
// InAppWebViewController webViewController;
// InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
// crossPlatform: InAppWebViewOptions(
// useShouldOverrideUrlLoading: true,
// useOnDownloadStart: true,
// mediaPlaybackRequiresUserGesture: false,
// ),
// android: AndroidInAppWebViewOptions(
// useHybridComposition: true,
// ),
// ios: IOSInAppWebViewOptions(
// allowsInlineMediaPlayback: true,
// ));
_init() async {
// WidgetsFlutterBinding.ensureInitialized();
// await FlutterDownloader.initialize(debug: true);
if (Platform.isAndroid) {
await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);
// // PullToRefreshController pullToRefreshController;
// ContextMenu contextMenu;
// String url = "";
// double progress = 0;
// final urlController = TextEditingController();
// // Future<void> openFile(filePath) async {
// // final _result = await OpenFile.open(filePath);
// // print(_result.message);
var swAvailable = await AndroidWebViewFeature.isFeatureSupported(
AndroidWebViewFeature.SERVICE_WORKER_BASIC_USAGE);
var swInterceptAvailable = await AndroidWebViewFeature.isFeatureSupported(
AndroidWebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST);
// // // setState(() {
// // // _openResult = "type=${_result.type} message=${_result.message}";
// // // });
// // }
if (swAvailable && swInterceptAvailable) {
AndroidServiceWorkerController serviceWorkerController =
AndroidServiceWorkerController.instance();
// @override
// void initState() {
// super.initState();
serviceWorkerController.serviceWorkerClient =
AndroidServiceWorkerClient(
shouldInterceptRequest: (request) async {
print(request);
return null;
},
);
}
}
// await FlutterDownloader.initialize(
// debug: true // optional: set false to disable printing logs to console
// );
// await Permission.storage.request();
}
// // Enable hybrid composition.
// _init();
// }
@override
Widget build(BuildContext context) {
return Scaffold(
// We're using a Builder here so we have a context that is below the Scaffold
// to allow calling Scaffold.of(context) so we can show a snackbar.
appBar: SystemAppBar(
widget.title,
onTap: () {
if (widget.need) {
Utils.changeStatusColor(color: MyColours.color_199095);
}
Navigator.of(context).pop();
},
),
body: WillPopScope(
onWillPop: () async {
if (widget.need) {
Utils.changeStatusColor(color: MyColours.color_199095);
}
return true;
},
child: Column(
children: [
Expanded(
child: InAppWebView(
key: webViewKey,
// contextMenu: contextMenu,
initialUrlRequest: URLRequest(
url: Uri.parse("http://colorcun.com/privacy1.html")),
// initialFile: "assets/index.html",
initialUserScripts: UnmodifiableListView<UserScript>([]),
initialOptions: options,
pullToRefreshController: pullToRefreshController,
onWebViewCreated: (controller) {
webViewController = controller;
},
onLoadStart: (controller, url) {
setState(() {
this.url = url.toString();
urlController.text = this.url;
});
},
androidOnPermissionRequest:
(controller, origin, resources) async {
return PermissionRequestResponse(
resources: resources,
action: PermissionRequestResponseAction.GRANT);
},
shouldOverrideUrlLoading:
(controller, navigationAction) async {
var uri = navigationAction.request.url;
// Future<bool> _checkPermission() async {
// DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
// AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
// if (Platform.isAndroid && androidInfo.version.sdkInt <= 28) {
// final status = await Permission.storage.status;
// if (status != PermissionStatus.granted) {
// final result = await Permission.storage.request();
// if (result == PermissionStatus.granted) {
// return true;
// }
// } else {
// return true;
// }
// } else {
// return true;
// }
// return false;
// }
if (![
"http",
"https",
"file",
"chrome",
"data",
"javascript",
"about"
].contains(uri.scheme)) {
if (await canLaunch(url)) {
// Launch the App
await launch(
url,
);
// and cancel the request
return NavigationActionPolicy.CANCEL;
}
}
// Future<bool> checkPermissionStorage() async {
// var status = await Permission.storage.status;
// if (!status.isGranted) {
// status = await Permission.storage.request();
// if (status.isGranted) {
// return true;
// }
// } else {
// return true;
// }
// return false;
// }
return NavigationActionPolicy.ALLOW;
},
onLoadStop: (controller, url) async {
pullToRefreshController.endRefreshing();
setState(() {
this.url = url.toString();
urlController.text = this.url;
});
},
onLoadError: (controller, url, code, message) {
pullToRefreshController.endRefreshing();
},
onProgressChanged: (controller, progress) {
if (progress == 100) {
pullToRefreshController.endRefreshing();
}
setState(() {
this.progress = progress / 100;
urlController.text = this.url;
});
},
onUpdateVisitedHistory: (controller, url, androidIsReload) {
setState(() {
this.url = url.toString();
urlController.text = this.url;
});
},
onConsoleMessage: (controller, consoleMessage) {
print(consoleMessage);
},
onDownloadStart: (controller, url) async {
print("onDownloadStart $url");
Utils.showToast('开始下载...');
// final taskId = await FlutterDownloader.enqueue(
// url: url.toString(),
// savedDir: (await getExternalStorageDirectory()).path,
// showNotification:
// true, // show download progress in status bar (for Android)
// openFileFromNotification:
// true, // click on notification to open downloaded file (for Android)
// );
final dir = await getExternalStorageDirectory();
String savePath = dir.path + "/one_key";
// _init() async {
// // WidgetsFlutterBinding.ensureInitialized();
// // await FlutterDownloader.initialize(debug: true);
// if (Platform.isAndroid) {
// await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);
Directory directory = new Directory(savePath);
if (directory.existsSync()) {
//删除历史apk
final List<FileSystemEntity> files = directory.listSync();
for (FileSystemEntity file in files) {
file.deleteSync();
}
}
DioUtil().download(url.toString(), savePath,
onProgress: (received, total) {
// if (_progress != 100) {
// int progress = ((received / total) * 100).round();
// _progress = progress;
// _setState(() {});
// }
if (received == total) {
print('object');
Utils.showToast('文件已保存在${savePath}');
// openFile(savePath);
//下载完成
// InstallPlugin.installApk(savePath, "com.naji.one_key");
}
});
// },
// DioUtil().download(url.toString(),
// (await getExternalStorageDirectory()).path,
// onProgress: (received, total) {
// // if (_progress != 100) {
// // int progress = ((received / total) * 100).round();
// // _progress = progress;
// // _setState(() {});
// // }
// if (received == total) {
// //下载完成
// // InstallPlugin.installApk(savePath, "com.naji.one_key");
// }
// });
},
))
],
)
// Builder(builder: (BuildContext context) {
// return WebView(
// initialUrl: "http://colorcun.com/privacy1.html",
// javascriptMode: JavascriptMode.unrestricted,
// onWebViewCreated: (WebViewController webViewController) {
// _controller.complete(webViewController);
// },
// // TODO(iskakaushik): Remove this when collection literals makes it to stable.
// // ignore: prefer_collection_literals
// javascriptChannels: <JavascriptChannel>[
// _toasterJavascriptChannel(context),
// ].toSet(),
// navigationDelegate: (NavigationRequest request) {
// if (request.url.startsWith('https://www.youtube.com/')) {
// print('blocking navigation to $request}');
// return NavigationDecision.prevent;
// }
// print('allowing navigation to $request');
// return NavigationDecision.navigate;
// },
// onPageStarted: (String url) {
// print('Page started loading: $url');
// },
// onPageFinished: (String url) async {
// print('Page finished loading: $url');
// // showDownloadProgress(context);
// final dir = await getExternalStorageDirectory();
// String savePath = dir.path + "/one_key";
// DioUtil().download(url, savePath,
// onProgress: (received, total) {
// // if (_progress != 100) {
// // int progress = ((received / total) * 100).round();
// // _progress = progress;
// // _setState(() {});
// // }
// if (received == total) {
// print('object');
// //下载完成
// // InstallPlugin.installApk(savePath, "com.naji.one_key");
// }
// });
// },
// gestureNavigationEnabled: true,
// );
// }),
));
}
// var swAvailable = await AndroidWebViewFeature.isFeatureSupported(
// AndroidWebViewFeature.SERVICE_WORKER_BASIC_USAGE);
// var swInterceptAvailable = await AndroidWebViewFeature.isFeatureSupported(
// AndroidWebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST);
// JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
// return JavascriptChannel(
// name: 'Toaster',
// onMessageReceived: (JavascriptMessage message) {
// Scaffold.of(context).showSnackBar(
// SnackBar(content: Text(message.message)),
// );
// });
// }
}
// if (swAvailable && swInterceptAvailable) {
// AndroidServiceWorkerController serviceWorkerController =
// AndroidServiceWorkerController.instance();
// class WebPage extends StatelessWidget {
// final String title;
// final String url;
// final bool need;
// serviceWorkerController.serviceWorkerClient =
// AndroidServiceWorkerClient(
// shouldInterceptRequest: (request) async {
// print(request);
// return null;
// },
// );
// }
// }
// // await FlutterDownloader.initialize(
// // debug: true // optional: set false to disable printing logs to console
// // );
// // await Permission.storage.request();
// }
// const WebPage({Key key, this.title, this.url, this.need = false})
// : super(key: key);
// @override
// Widget build(BuildContext context) {
// final Completer<WebViewController> _controller =
// Completer<WebViewController>();
// return Scaffold(
// appBar: SystemAppBar(title, onTap: () {
// if (need) {
// Utils.changeStatusColor(color: MyColours.color_199095);
// }
// Navigator.of(context).pop();
// }),
// body: WillPopScope(
// onWillPop: () async {
// if (need) {
// // We're using a Builder here so we have a context that is below the Scaffold
// // to allow calling Scaffold.of(context) so we can show a snackbar.
// appBar: SystemAppBar(
// widget.title,
// onTap: () {
// if (widget.need) {
// Utils.changeStatusColor(color: MyColours.color_199095);
// }
// return true;
// Navigator.of(context).pop();
// },
// child: WebView(
// initialUrl: "http://colorcun.com/privacy1.html",
// javascriptMode: JavascriptMode.unrestricted,
// onWebViewCreated: (WebViewController webViewController) {
// // Loading.showLoading(context);
// _controller.complete(webViewController);
// },
// javascriptChannels: <JavascriptChannel>[
// _toasterJavascriptChannel(context),
// ].toSet(),
// navigationDelegate: (NavigationRequest request) {
// if (request.url.startsWith('https://www.youtube.com/')) {
// return NavigationDecision.prevent;
// ),
// body: WillPopScope(
// onWillPop: () async {
// if (widget.need) {
// Utils.changeStatusColor(color: MyColours.color_199095);
// }
// return NavigationDecision.navigate;
// return true;
// },
// onPageStarted: (String url) {},
// onPageFinished: (String url) {
// // Loading.hideLoading(context);
// },
// gestureNavigationEnabled: true,
// )),
// );
// }
// child: Column(
// children: [
// Expanded(
// child: InAppWebView(
// key: webViewKey,
// // contextMenu: contextMenu,
// initialUrlRequest: URLRequest(
// url: Uri.parse("http://colorcun.com/privacy1.html")),
// // initialFile: "assets/index.html",
// initialUserScripts: UnmodifiableListView<UserScript>([]),
// initialOptions: options,
// pullToRefreshController: pullToRefreshController,
// onWebViewCreated: (controller) {
// webViewController = controller;
// },
// onLoadStart: (controller, url) {
// setState(() {
// this.url = url.toString();
// urlController.text = this.url;
// });
// },
// androidOnPermissionRequest:
// (controller, origin, resources) async {
// return PermissionRequestResponse(
// resources: resources,
// action: PermissionRequestResponseAction.GRANT);
// },
// shouldOverrideUrlLoading:
// (controller, navigationAction) async {
// var uri = navigationAction.request.url;
// if (![
// "http",
// "https",
// "file",
// "chrome",
// "data",
// "javascript",
// "about"
// ].contains(uri.scheme)) {
// if (await canLaunch(url)) {
// // Launch the App
// await launch(
// url,
// );
// // and cancel the request
// return NavigationActionPolicy.CANCEL;
// }
// }
// return NavigationActionPolicy.ALLOW;
// },
// onLoadStop: (controller, url) async {
// pullToRefreshController.endRefreshing();
// setState(() {
// this.url = url.toString();
// urlController.text = this.url;
// });
// },
// onLoadError: (controller, url, code, message) {
// pullToRefreshController.endRefreshing();
// },
// onProgressChanged: (controller, progress) {
// if (progress == 100) {
// pullToRefreshController.endRefreshing();
// }
// setState(() {
// this.progress = progress / 100;
// urlController.text = this.url;
// });
// },
// onUpdateVisitedHistory: (controller, url, androidIsReload) {
// setState(() {
// this.url = url.toString();
// urlController.text = this.url;
// });
// },
// onConsoleMessage: (controller, consoleMessage) {
// print(consoleMessage);
// },
// onDownloadStart: (controller, url) async {
// print("onDownloadStart $url");
// Utils.showToast('开始下载...');
// // final taskId = await FlutterDownloader.enqueue(
// // url: url.toString(),
// // savedDir: (await getExternalStorageDirectory()).path,
// // showNotification:
// // true, // show download progress in status bar (for Android)
// // openFileFromNotification:
// // true, // click on notification to open downloaded file (for Android)
// // );
// final dir = await getExternalStorageDirectory();
// String savePath = dir.path + "/one_key";
// JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
// return JavascriptChannel(
// name: 'Toaster',
// onMessageReceived: (JavascriptMessage message) {
// Scaffold.of(context).showSnackBar(
// SnackBar(content: Text(message.message)),
// );
// });
// Directory directory = new Directory(savePath);
// if (directory.existsSync()) {
// //删除历史apk
// final List<FileSystemEntity> files = directory.listSync();
// for (FileSystemEntity file in files) {
// file.deleteSync();
// }
// }
// DioUtil().download(url.toString(), savePath,
// onProgress: (received, total) {
// // if (_progress != 100) {
// // int progress = ((received / total) * 100).round();
// // _progress = progress;
// // _setState(() {});
// // }
// if (received == total) {
// print('object');
// Utils.showToast('文件已保存在${savePath}');
// // openFile(savePath);
// //下载完成
// // InstallPlugin.installApk(savePath, "com.naji.one_key");
// }
// });
// // },
// // DioUtil().download(url.toString(),
// // (await getExternalStorageDirectory()).path,
// // onProgress: (received, total) {
// // // if (_progress != 100) {
// // // int progress = ((received / total) * 100).round();
// // // _progress = progress;
// // // _setState(() {});
// // // }
// // if (received == total) {
// // //下载完成
// // // InstallPlugin.installApk(savePath, "com.naji.one_key");
// // }
// // });
// },
// ))
// ],
// )
// // Builder(builder: (BuildContext context) {
// // return WebView(
// // initialUrl: "http://colorcun.com/privacy1.html",
// // javascriptMode: JavascriptMode.unrestricted,
// // onWebViewCreated: (WebViewController webViewController) {
// // _controller.complete(webViewController);
// // },
// // // TODO(iskakaushik): Remove this when collection literals makes it to stable.
// // // ignore: prefer_collection_literals
// // javascriptChannels: <JavascriptChannel>[
// // _toasterJavascriptChannel(context),
// // ].toSet(),
// // navigationDelegate: (NavigationRequest request) {
// // if (request.url.startsWith('https://www.youtube.com/')) {
// // print('blocking navigation to $request}');
// // return NavigationDecision.prevent;
// // }
// // print('allowing navigation to $request');
// // return NavigationDecision.navigate;
// // },
// // onPageStarted: (String url) {
// // print('Page started loading: $url');
// // },
// // onPageFinished: (String url) async {
// // print('Page finished loading: $url');
// // // showDownloadProgress(context);
// // final dir = await getExternalStorageDirectory();
// // String savePath = dir.path + "/one_key";
// // DioUtil().download(url, savePath,
// // onProgress: (received, total) {
// // // if (_progress != 100) {
// // // int progress = ((received / total) * 100).round();
// // // _progress = progress;
// // // _setState(() {});
// // // }
// // if (received == total) {
// // print('object');
// // //下载完成
// // // InstallPlugin.installApk(savePath, "com.naji.one_key");
// // }
// // });
// // },
// // gestureNavigationEnabled: true,
// // );
// // }),
// ));
// }
// // JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
// // return JavascriptChannel(
// // name: 'Toaster',
// // onMessageReceived: (JavascriptMessage message) {
// // Scaffold.of(context).showSnackBar(
// // SnackBar(content: Text(message.message)),
// // );
// // });
// // }
// }
// // class WebPage extends StatelessWidget {
// // final String title;
// // final String url;
// // final bool need;
// // const WebPage({Key key, this.title, this.url, this.need = false})
// // : super(key: key);
// // @override
// // Widget build(BuildContext context) {
// // final Completer<WebViewController> _controller =
// // Completer<WebViewController>();
// // return Scaffold(
// // appBar: SystemAppBar(title, onTap: () {
// // if (need) {
// // Utils.changeStatusColor(color: MyColours.color_199095);
// // }
// // Navigator.of(context).pop();
// // }),
// // body: WillPopScope(
// // onWillPop: () async {
// // if (need) {
// // Utils.changeStatusColor(color: MyColours.color_199095);
// // }
// // return true;
// // },
// // child: WebView(
// // initialUrl: "http://colorcun.com/privacy1.html",
// // javascriptMode: JavascriptMode.unrestricted,
// // onWebViewCreated: (WebViewController webViewController) {
// // // Loading.showLoading(context);
// // _controller.complete(webViewController);
// // },
// // javascriptChannels: <JavascriptChannel>[
// // _toasterJavascriptChannel(context),
// // ].toSet(),
// // navigationDelegate: (NavigationRequest request) {
// // if (request.url.startsWith('https://www.youtube.com/')) {
// // return NavigationDecision.prevent;
// // }
// // return NavigationDecision.navigate;
// // },
// // onPageStarted: (String url) {},
// // onPageFinished: (String url) {
// // // Loading.hideLoading(context);
// // },
// // gestureNavigationEnabled: true,
// // )),
// // );
// // }
// // JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
// // return JavascriptChannel(
// // name: 'Toaster',
// // onMessageReceived: (JavascriptMessage message) {
// // Scaffold.of(context).showSnackBar(
// // SnackBar(content: Text(message.message)),
// // );
// // });
// // }
// // }
... ...
... ... @@ -72,9 +72,9 @@ class _WebViewPageState extends State<WebViewPage> {
return JavascriptChannel(
name: 'Toaster',
onMessageReceived: (JavascriptMessage message) {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text(message.message)),
);
// Scaffold.of(context).showSnackBar(
// SnackBar(content: Text(message.message)),
// );
});
}
}
... ...
... ... @@ -345,7 +345,8 @@ var webPageHandler = new Handler(
String _title = params["title"].first;
String _url = params["url"].first;
bool need = params["need"].first == "true" ? true : false;
return WebPage(title: _title, url: _url, need: need);
// return WebPage(title: _title, url: _url, need: need);
});
// 跳转到变更预订
... ...
... ... @@ -2059,7 +2059,7 @@ class DialogUtil {
// globalState = state;
return Stack(
overflow: Overflow.visible,
// overflow: Overflow.visible,
children: [
Container(
padding: EdgeInsets.symmetric(
... ... @@ -2601,7 +2601,7 @@ class DialogUtil {
Radius.circular(
ScreenUtil().setWidth(10)))), //设置圆角
child: Stack(
overflow: Overflow.visible,
// overflow: Overflow.visible,
children: [
Container(
padding: EdgeInsets.all(
... ...
... ... @@ -25,9 +25,9 @@ class _MyAppState extends State<MyApp> {
body: Container(
padding: EdgeInsets.all(15),
width: double.infinity,
child: RaisedButton(
child: InkWell(
child: Text("Enviar SMS"),
onPressed: () async {
onTap: () async {
String phoneNumber = "+593992696250";
String message = "test";
... ...
... ... @@ -7,14 +7,14 @@ packages:
name: archive
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.6"
version: "3.3.0"
async:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.2"
version: "2.9.0"
boolean_selector:
dependency: transitive
description:
... ... @@ -28,35 +28,28 @@ packages:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.1"
version: "1.2.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.15.0"
version: "1.16.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
version: "3.0.2"
espresso:
dependency: "direct dev"
description:
... ... @@ -70,7 +63,7 @@ packages:
name: fake_async
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.3.1"
file:
dependency: transitive
description:
... ... @@ -109,28 +102,28 @@ packages:
name: matcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.11"
version: "0.12.12"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.3"
version: "0.1.5"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.7.0"
version: "1.8.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0"
version: "1.8.2"
pedantic:
dependency: "direct dev"
description:
... ... @@ -163,7 +156,7 @@ packages:
name: source_span
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.1"
version: "1.9.0"
stack_trace:
dependency: transitive
description:
... ... @@ -184,49 +177,49 @@ packages:
name: string_scanner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
version: "1.1.1"
sync_http:
dependency: transitive
description:
name: sync_http
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.0"
version: "0.3.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.8"
version: "0.4.12"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
version: "1.3.1"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
version: "2.1.2"
vm_service:
dependency: transitive
description:
name: vm_service
url: "https://pub.flutter-io.cn"
source: hosted
version: "7.5.0"
version: "9.0.0"
webdriver:
dependency: transitive
description:
... ... @@ -242,5 +235,5 @@ packages:
source: path
version: "2.0.13"
sdks:
dart: ">=2.14.0 <3.0.0"
dart: ">=2.17.0-0 <3.0.0"
flutter: ">=2.0.0"
... ...
... ... @@ -7,14 +7,14 @@ packages:
name: archive
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.6"
version: "3.3.0"
async:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.2"
version: "2.9.0"
boolean_selector:
dependency: transitive
description:
... ... @@ -28,42 +28,35 @@ packages:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.1"
version: "1.2.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.15.0"
version: "1.16.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.1"
version: "3.0.2"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.3.1"
file:
dependency: transitive
description:
... ... @@ -97,28 +90,28 @@ packages:
name: matcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.11"
version: "0.12.12"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.3"
version: "0.1.5"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.7.0"
version: "1.8.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0"
version: "1.8.2"
pedantic:
dependency: "direct dev"
description:
... ... @@ -151,7 +144,7 @@ packages:
name: source_span
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.1"
version: "1.9.0"
stack_trace:
dependency: transitive
description:
... ... @@ -172,49 +165,49 @@ packages:
name: string_scanner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
version: "1.1.1"
sync_http:
dependency: transitive
description:
name: sync_http
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.3.0"
version: "0.3.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.8"
version: "0.4.12"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.0"
version: "1.3.1"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
version: "2.1.2"
vm_service:
dependency: transitive
description:
name: vm_service
url: "https://pub.flutter-io.cn"
source: hosted
version: "7.5.0"
version: "9.0.0"
webdriver:
dependency: transitive
description:
... ... @@ -223,5 +216,5 @@ packages:
source: hosted
version: "3.0.0"
sdks:
dart: ">=2.14.0 <3.0.0"
dart: ">=2.17.0-0 <3.0.0"
flutter: ">=2.0.0"
... ...
... ... @@ -56,7 +56,7 @@ packages:
name: async
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.8.2"
version: "2.9.0"
audioplayers:
dependency: "direct main"
description:
... ... @@ -161,14 +161,7 @@ packages:
name: characters
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.3.1"
version: "1.2.1"
checked_yaml:
dependency: transitive
description:
... ... @@ -189,7 +182,7 @@ packages:
name: clock
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
version: "1.1.1"
code_builder:
dependency: transitive
description:
... ... @@ -203,7 +196,7 @@ packages:
name: collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.15.0"
version: "1.16.0"
common_utils:
dependency: "direct main"
description:
... ... @@ -357,7 +350,7 @@ packages:
name: fake_async
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.3.1"
ffi:
dependency: transitive
description:
... ... @@ -446,7 +439,7 @@ packages:
name: flutter_inappwebview
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.3.2"
version: "5.0.5"
flutter_native_image:
dependency: "direct main"
description:
... ... @@ -652,7 +645,7 @@ packages:
name: js
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.6.3"
version: "0.6.4"
json_annotation:
dependency: "direct main"
description:
... ... @@ -687,21 +680,21 @@ packages:
name: matcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.11"
version: "0.12.12"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.3"
version: "0.1.5"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.7.0"
version: "1.8.0"
mime:
dependency: transitive
description:
... ... @@ -743,7 +736,7 @@ packages:
name: path
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0"
version: "1.8.2"
path_drawing:
dependency: transitive
description:
... ... @@ -1077,7 +1070,7 @@ packages:
name: source_span
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.1"
version: "1.9.0"
sqflite:
dependency: "direct main"
description:
... ... @@ -1119,7 +1112,7 @@ packages:
name: string_scanner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
version: "1.1.1"
synchronized:
dependency: transitive
description:
... ... @@ -1140,14 +1133,14 @@ packages:
name: term_glyph
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.2.0"
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.8"
version: "0.4.12"
timing:
dependency: transitive
description:
... ... @@ -1247,7 +1240,7 @@ packages:
name: vector_math
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
version: "2.1.2"
video_compress:
dependency: "direct main"
description:
... ... @@ -1375,5 +1368,5 @@ packages:
source: hosted
version: "3.1.1"
sdks:
dart: ">=2.16.0 <3.0.0"
dart: ">=2.17.0-0 <3.0.0"
flutter: ">=2.10.0"
... ...
... ... @@ -148,7 +148,8 @@ dependencies:
flutter_staggered_grid_view: ^0.4.1
# webview
# webview_flutter: ^2.0.13
flutter_inappwebview: ^5.3.2
# flutter_inappwebview: ^5.3.2
flutter_inappwebview: ^5.0.5
# flutter_downloader: ^1.7.1
# open_file: ^3.2.1
... ...