browser_controller.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import 'package:get/get.dart';
  2. import 'package:injectable/injectable.dart';
  3. import 'package:location/utils/atmob_log.dart';
  4. import 'package:webview_flutter/webview_flutter.dart';
  5. import '../../base/base_controller.dart';
  6. import '../../resource/colors.gen.dart';
  7. @injectable
  8. class BrowserController extends BaseController {
  9. final String tag = 'BrowserController';
  10. String url = (Get.arguments is String) ? (Get.arguments as String) : '';
  11. final WebViewController webViewController = WebViewController();
  12. final title = ''.obs;
  13. @override
  14. void onInit() {
  15. super.onInit();
  16. _initWebSetting();
  17. }
  18. @override
  19. void onReady() {
  20. super.onReady();
  21. _loadUrl();
  22. }
  23. void _initWebSetting() {
  24. webViewController.setJavaScriptMode(JavaScriptMode.unrestricted);
  25. webViewController.setBackgroundColor(ColorName.white);
  26. webViewController.setNavigationDelegate(
  27. NavigationDelegate(
  28. onNavigationRequest: (NavigationRequest request) {
  29. AtmobLog.d(tag, "onNavigationRequest: ${request.url}");
  30. if (request.url.startsWith('http') || request.url.startsWith('https')) {
  31. return NavigationDecision.navigate;
  32. }
  33. return NavigationDecision.prevent;
  34. },
  35. onUrlChange: (UrlChange urlChange) {
  36. _getTitle();
  37. },
  38. onPageFinished: (String url) {
  39. _getTitle();
  40. },
  41. ),
  42. );
  43. }
  44. void _loadUrl() {
  45. if (url.isEmpty) {
  46. return;
  47. }
  48. webViewController.loadRequest(Uri.parse(url));
  49. }
  50. Future<bool> handleBack() async {
  51. if (await webViewController.canGoBack()) {
  52. webViewController.goBack();
  53. return false;
  54. }
  55. return true;
  56. }
  57. void _getTitle() async {
  58. webViewController.getTitle().then((title) {
  59. if (title != null) {
  60. this.title.value = title;
  61. }
  62. });
  63. }
  64. }