Commit f36787cc7d5ca651c067e73083159734deb958a1

Authored by wdn127929
1 parent 3a0b9b5d

webview更换&&注释帮助与反馈&&去掉flutter_downloader的初始化

... ... @@ -550,7 +550,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5204;
CURRENT_PROJECT_VERSION = 520;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ... @@ -698,10 +698,10 @@
CODE_SIGN_ENTITLEMENTS = "Runner/一键订Debug.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5204;
CURRENT_PROJECT_VERSION = 520;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = debug;
FLUTTER_BUILD_MODE = release;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
... ... @@ -734,7 +734,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5204;
CURRENT_PROJECT_VERSION = 520;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ...
... ... @@ -6,7 +6,7 @@ import 'package:dio/dio.dart';
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart' hide Router;
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
// import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:flutter_easyrefresh/ball_pulse_footer.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_easyrefresh/material_header.dart';
... ... @@ -81,7 +81,7 @@ Future<void> main() async {
// // _requestPermissions();
// Utils.changeStatusColor();
await FlutterDownloader.initialize(debug: true, ignoreSsl: true);
// await FlutterDownloader.initialize(debug: true, ignoreSsl: true);
await App.initSp();
SystemChrome.setPreferredOrientations(
... ...
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
... ...
... ... @@ -38,7 +38,7 @@ class _MapChoicePointPageState extends State<MapChoicePointPage> {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getLocationPermission();
_requestLocationPermission();
});
}
... ... @@ -52,17 +52,17 @@ class _MapChoicePointPageState extends State<MapChoicePointPage> {
}
/// 检查权限并定
_getLocationPermission() async {
if (!(await checkPermission(Permission.location))) {
//没有定位权限
//申请定位权限
_requestLocationPermission();
} else {
//去定位
_requestLocationPermission();
}
}
// _getLocationPermission() async {
// if (!(await checkPermission(Permission.location))) {
// //没有定位权限
// //申请定位权限
// _requestLocationPermission();
// } else {
// //去定位
// _requestLocationPermission();
// }
// }
/// 获取定位权限
_requestLocationPermission() async {
... ... @@ -268,12 +268,13 @@ class _MapChoicePointPageState extends State<MapChoicePointPage> {
? Colors.green
: Colors.grey,
),
Text(item.title,
style: TextStyle(
fontSize: 16,
color: position == 0
? Colors.green
: Color(0xFF787878)))
Expanded(
child: Text(item.title,
style: TextStyle(
fontSize: 16,
color: position == 0
? Colors.green
: Color(0xFF787878))))
],
),
),
... ...
... ... @@ -3,7 +3,7 @@ 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: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';
... ... @@ -26,9 +26,16 @@ import 'package:webview_flutter/webview_flutter.dart';
// import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:collection';
// Import for Android features.
import 'package:webview_flutter_android/webview_flutter_android.dart';
// Import for iOS features.
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';
// import 'package:open_file/open_file.dart';
// import 'package:flutter_downloader/flutter_downloader.dart';
class WebPage extends StatefulWidget {
final String title;
final String url;
... ... @@ -41,42 +48,34 @@ class WebPage extends StatefulWidget {
}
class _WebPageState extends State<WebPage> {
final GlobalKey webViewKey = GlobalKey();
InAppWebViewController webViewController;
InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
useShouldOverrideUrlLoading: true,
useOnDownloadStart: true,
mediaPlaybackRequiresUserGesture: false,
),
android: AndroidInAppWebViewOptions(
useHybridComposition: true,
),
ios: IOSInAppWebViewOptions(
allowsInlineMediaPlayback: 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);
// // setState(() {
// // _openResult = "type=${_result.type} message=${_result.message}";
// // });
// }
WebViewController controller;
@override
void initState() {
super.initState();
// Enable hybrid composition.
_init();
// #docregion webview_controller
controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onProgress: (int progress) {
// Update loading bar.
},
onPageStarted: (String url) {},
onPageFinished: (String url) {},
onWebResourceError: (WebResourceError error) {},
onNavigationRequest: (NavigationRequest request) {
if (request.url.startsWith('https://www.youtube.com/')) {
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(Uri.parse('http://colorcun.com/privacy2.html'));
// #enddocregion webview_controller
}
@override
... ... @@ -88,269 +87,18 @@ class _WebPageState extends State<WebPage> {
super.dispose();
}
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;
}
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;
}
_init() async {
// WidgetsFlutterBinding.ensureInitialized();
// await FlutterDownloader.initialize(debug: true);
if (Platform.isAndroid) {
await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);
var swAvailable = await AndroidWebViewFeature.isFeatureSupported(
AndroidWebViewFeature.SERVICE_WORKER_BASIC_USAGE);
var swInterceptAvailable = await AndroidWebViewFeature.isFeatureSupported(
AndroidWebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST);
if (swAvailable && swInterceptAvailable) {
AndroidServiceWorkerController serviceWorkerController =
AndroidServiceWorkerController.instance();
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();
}
@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,
),
body: Column(
children: [
Expanded(
child: InAppWebView(
key: webViewKey,
// contextMenu: contextMenu,
initialUrlRequest: URLRequest(
// url: Uri.parse("http://colorcun.com/privacy1.html")),
url: Uri.parse("http://colorcun.com/privacy2.html")),
//华为下载功能闪退,去掉下载功能*********http://colorcun.com/privacy2.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";
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,
// );
// }),
);
appBar: SystemAppBar(widget.title, onTap: () {
if (widget.need) {
Utils.changeStatusColor(color: MyColours.color_199095);
}
Navigator.of(context).pop();
}),
body: WebViewWidget(controller: controller),
);
}
// JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
// return JavascriptChannel(
// name: 'Toaster',
// onMessageReceived: (JavascriptMessage message) {
// Scaffold.of(context).showSnackBar(
// SnackBar(content: Text(message.message)),
// );
// });
// }
}
// class WebPage extends StatelessWidget {
... ...
// 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 '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();
// }
// class _WebPageState extends State<WebPage> {
// final GlobalKey webViewKey = GlobalKey();
// InAppWebViewController webViewController;
// InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
// crossPlatform: InAppWebViewOptions(
// useShouldOverrideUrlLoading: true,
// useOnDownloadStart: true,
// mediaPlaybackRequiresUserGesture: false,
// ),
// android: AndroidInAppWebViewOptions(
// useHybridComposition: true,
// ),
// ios: IOSInAppWebViewOptions(
// allowsInlineMediaPlayback: 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);
// // // setState(() {
// // // _openResult = "type=${_result.type} message=${_result.message}";
// // // });
// // }
// @override
// void initState() {
// super.initState();
// // Enable hybrid composition.
// _init();
// }
// @override
// void dispose() {
// if (widget.need) {
// Utils.changeStatusColor(color: MyColours.color_199095);
// }
// super.dispose();
// }
// 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;
// }
// 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;
// }
// _init() async {
// // WidgetsFlutterBinding.ensureInitialized();
// // await FlutterDownloader.initialize(debug: true);
// if (Platform.isAndroid) {
// await AndroidInAppWebViewController.setWebContentsDebuggingEnabled(true);
// var swAvailable = await AndroidWebViewFeature.isFeatureSupported(
// AndroidWebViewFeature.SERVICE_WORKER_BASIC_USAGE);
// var swInterceptAvailable = await AndroidWebViewFeature.isFeatureSupported(
// AndroidWebViewFeature.SERVICE_WORKER_SHOULD_INTERCEPT_REQUEST);
// if (swAvailable && swInterceptAvailable) {
// AndroidServiceWorkerController serviceWorkerController =
// AndroidServiceWorkerController.instance();
// 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();
// }
// @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,
// ),
// body: Column(
// children: [
// Expanded(
// child: InAppWebView(
// key: webViewKey,
// // contextMenu: contextMenu,
// initialUrlRequest: URLRequest(
// // url: Uri.parse("http://colorcun.com/privacy1.html")),
// url: Uri.parse("http://colorcun.com/privacy2.html")),
// //华为下载功能闪退,去掉下载功能*********http://colorcun.com/privacy2.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";
// 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)),
// // );
// // });
// // }
// // }
... ...
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
// import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
... ... @@ -184,7 +184,8 @@ class _PlanDishCreateSelectTypePageState
onPressed: () async {
bool needRefresh = await NavigatorUtil.goPlanDishEditPage(
context,
isMine: selectF,isEdit:true);
isMine: selectF,
isEdit: true);
print(needRefresh);
if (needRefresh != null && needRefresh) {
Navigator.pop(context);
... ...
... ... @@ -772,8 +772,9 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
return InkWell(
onTap: () {
Utils.getPickPermission(context, () async {
mapAddress = await NavigatorUtil.goMapChoicePointPage(context);
if (mapAddress != null) {
Map temp = await NavigatorUtil.goMapChoicePointPage(context);
if (temp != null) {
mapAddress = temp;
setState(() {
// storeMapAddress = address['address'];
// // createStoreModel.storeInfo?.address = storeAddress;
... ... @@ -1765,16 +1766,18 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(24),
),
child: mapAddress['address'] == '' ||
child: mapAddress == null ||
mapAddress['address'] == '' ||
mapAddress['address'] == null ||
mapAddress['address'] == 'null'
? InkWell(
onTap: () {
Utils.getPickPermission(context,
() async {
mapAddress = await NavigatorUtil
Map temp = await NavigatorUtil
.goMapChoicePointPage(context);
if (mapAddress != null) {
if (temp != null) {
mapAddress = temp;
setState(() {
// storeMapAddress = address['address'];
// // createStoreModel.storeInfo?.address = storeAddress;
... ... @@ -1872,11 +1875,12 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
onPressed: () {
Utils.getPickPermission(
context, () async {
mapAddress =
await NavigatorUtil
.goMapChoicePointPage(
context);
if (mapAddress != null) {
Map temp = await NavigatorUtil
.goMapChoicePointPage(
context);
if (temp != null) {
mapAddress = temp;
setState(() {
// storeMapAddress = address['address'];
// // createStoreModel.storeInfo?.address = storeAddress;
... ...
... ... @@ -21,7 +21,7 @@ class _WebViewPageState extends State<WebViewPage> {
void initState() {
super.initState();
// Enable hybrid composition.
if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
// if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
}
@override
... ... @@ -33,51 +33,52 @@ class _WebViewPageState extends State<WebViewPage> {
@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(
'周到安排商家',
),
body: Builder(builder: (BuildContext context) {
return WebView(
initialUrl: "https://support.qq.com/product/152856",
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) {
print('Page finished loading: $url');
},
gestureNavigationEnabled: true,
);
}),
);
return Container();
// 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(
// '周到安排商家',
// ),
// body: Builder(builder: (BuildContext context) {
// return WebView(
// initialUrl: "https://support.qq.com/product/152856",
// 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) {
// print('Page finished loading: $url');
// },
// gestureNavigationEnabled: true,
// );
// }),
// );
}
JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
return JavascriptChannel(
name: 'Toaster',
onMessageReceived: (JavascriptMessage message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(message.message)),
);
});
}
// JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
// return JavascriptChannel(
// name: 'Toaster',
// onMessageReceived: (JavascriptMessage message) {
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(content: Text(message.message)),
// );
// });
// }
}
... ...
... ... @@ -609,7 +609,11 @@ class MyTableManageHomeModel with ChangeNotifier {
Utils.showToast(baseResp.msg ?? '修改桌位失败!');
}
} else {
Utils.showToast(baseResp.msg ?? '修改桌位失败!');
if (baseResp.code == 397) {
Utils.showToast('桌台已存在');
} else {
Utils.showToast(baseResp.msg ?? '修改桌位失败!');
}
}
return false;
}
... ...
... ... @@ -55,7 +55,7 @@ import 'package:one_key/pages/login/login_page.dart';
import 'package:one_key/pages/detail/handle_online_page.dart';
import 'package:one_key/pages/detail/notebook_detail_page.dart';
import 'package:one_key/pages/login/login_page_f.dart';
import 'package:one_key/pages/login/web_page.dart';
import 'package:one_key/pages/login/web_page_old.dart';
import 'package:one_key/pages/message/message_order_menu.dart';
import 'package:one_key/pages/my/customer_type/my_customer/my_customer_detail_edit_page.dart';
... ... @@ -189,6 +189,7 @@ import '../pages/feast/feast_setmeal_page.dart';
import '../pages/feast/feast_wine_page.dart';
import '../pages/login/collect_store_info_page.dart';
import '../pages/login/complete_create_store.dart';
import '../pages/login/web_page.dart';
import '../pages/message/message_recharge_info_page.dart';
import '../pages/my/comment_manage/comment_manage_home_page.dart';
import '../pages/my/customer_type/my_customer/my_customer_home_page.dart';
... ...
... ... @@ -17,7 +17,7 @@ import 'package:flutter_statusbarcolor_ns/flutter_statusbarcolor_ns.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:flutter/services.dart';
import 'package:fluwx/fluwx.dart';
import 'package:one_key/pages/login/web_page.dart';
import 'package:one_key/pages/login/web_page_old.dart';
import 'package:one_key/provider/my_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
... ... @@ -1516,8 +1516,9 @@ class Utils {
// miniProgramType: WXMiniProgramType.RELEASE);
// }
//跳转拨打电话页面
//跳转帮助与反馈页面
static goHelp(BuildContext context) async {
//此页面已经注释,不能使用
NavigatorUtil.goWebviewPage(context);
}
... ...
... ... @@ -607,7 +607,7 @@ packages:
name: flutter_inappwebview
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.7.2+3"
version: "5.8.0"
flutter_keyboard_visibility:
dependency: "direct main"
description:
... ... @@ -1620,10 +1620,31 @@ packages:
webview_flutter:
dependency: "direct main"
description:
path: "library/webview_flutter-2.0.13-copy_inappwebview_select_file_20210930"
relative: true
source: path
version: "2.0.13"
name: webview_flutter
url: "https://pub.flutter-io.cn"
source: hosted
version: "4.2.2"
webview_flutter_android:
dependency: transitive
description:
name: webview_flutter_android
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.9.3"
webview_flutter_platform_interface:
dependency: transitive
description:
name: webview_flutter_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.5.0"
webview_flutter_wkwebview:
dependency: transitive
description:
name: webview_flutter_wkwebview
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.7.3"
wechat_assets_picker:
dependency: "direct main"
description:
... ...
... ... @@ -185,9 +185,10 @@ dependencies:
# flutter_app_update: ^1.0.0
flutter_staggered_grid_view: ^0.4.1
# webview
# webview_flutter: ^2.0.13
# flutter_inappwebview: ^5.3.2
flutter_inappwebview: ^5.7.2+3
webview_flutter: ^4.2.2
flutter_inappwebview: ^5.3.2
# flutter_inappwebview: ^6.0.0
flutter_downloader: ^1.10.5
android_path_provider: ^0.3.0
# open_file: ^3.2.1
... ... @@ -198,8 +199,8 @@ dependencies:
flutter_draggable_gridview: ^0.0.8
webview_flutter:
path: library/webview_flutter-2.0.13-copy_inappwebview_select_file_20210930
# webview_flutter:
# path: library/webview_flutter-2.0.13-copy_inappwebview_select_file_20210930
sendsms:
path: library/sendsms-1.0.3
device_utils_my:
... ...