browser_controller.dart 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import 'package:get/get.dart';
  2. import 'package:injectable/injectable.dart';
  3. import 'package:webview_flutter/webview_flutter.dart';
  4. import '../../base/base_controller.dart';
  5. import '../../resource/colors.gen.dart';
  6. @injectable
  7. class BrowserController extends BaseController {
  8. String url = (Get.arguments is String) ? (Get.arguments as String) : '';
  9. final WebViewController webViewController = WebViewController();
  10. final title = ''.obs;
  11. @override
  12. void onInit() {
  13. super.onInit();
  14. _initWebSetting();
  15. }
  16. @override
  17. void onReady() {
  18. super.onReady();
  19. _loadUrl();
  20. }
  21. void _initWebSetting() {
  22. webViewController.setJavaScriptMode(JavaScriptMode.unrestricted);
  23. webViewController.setBackgroundColor(ColorName.white);
  24. webViewController.setNavigationDelegate(
  25. NavigationDelegate(
  26. onPageFinished: (String url) {
  27. _getTitle();
  28. },
  29. ),
  30. );
  31. }
  32. void _loadUrl() {
  33. if (url.isEmpty) {
  34. return;
  35. }
  36. webViewController.loadRequest(Uri.parse(url));
  37. }
  38. Future<bool> handleBack() async {
  39. if (await webViewController.canGoBack()) {
  40. webViewController.goBack();
  41. return false;
  42. }
  43. return true;
  44. }
  45. void _getTitle() async {
  46. await Future.delayed(const Duration(milliseconds: 500));
  47. webViewController.getTitle().then((title) {
  48. if (title != null) {
  49. this.title.value = title;
  50. }
  51. });
  52. }
  53. }