flutter_webview_plugin.dart 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/services.dart';
  4. class FlutterWebviewPlugin {
  5. static FlutterWebviewPlugin _instance;
  6. FlutterWebviewPlugin._() {
  7. _init();
  8. }
  9. factory FlutterWebviewPlugin() => _instance ??= new FlutterWebviewPlugin._();
  10. StreamController<Null> _onDestroy = new StreamController.broadcast();
  11. Stream<Null> get onDestroy => _onDestroy.stream;
  12. StreamController<Null> _onBackPressed = new StreamController.broadcast();
  13. Stream<Null> get onBackPressed => _onBackPressed.stream;
  14. final MethodChannel _channel = const MethodChannel('flutter_webview_plugin');
  15. Future<Null> launch(String url,
  16. {bool withJavascript: true,
  17. bool clearCache: false,
  18. bool clearCookies: false}) =>
  19. _channel.invokeMethod('launch', {
  20. "url": url,
  21. "withJavascript": withJavascript,
  22. "clearCache": clearCache,
  23. "clearCookies": clearCookies
  24. });
  25. Future<Null> close() => _channel.invokeMethod("close");
  26. _init() {
  27. _channel.setMethodCallHandler(_handleMessages);
  28. }
  29. Future<Null> _handleMessages(MethodCall call) async {
  30. switch (call.method) {
  31. case "onDestroy":
  32. _onDestroy.add(null);
  33. break;
  34. case "onBackPressed":
  35. _onBackPressed.add(null);
  36. break;
  37. }
  38. }
  39. }