flutter_webview_plugin.dart 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 =
  13. new StreamController.broadcast();
  14. Stream<Null> get onBackPressed => _onDestroy.stream;
  15. final MethodChannel _channel = const MethodChannel('flutter_webview_plugin');
  16. Future<Null> launch(String url,
  17. {bool withJavascript: true,
  18. bool clearCache: false,
  19. bool clearCookies: false}) =>
  20. _channel.invokeMethod('launch', {
  21. "url": url,
  22. "withJavascript": withJavascript,
  23. "clearCache": clearCache,
  24. "clearCookies": clearCookies
  25. });
  26. Future<Null> close() => _channel.invokeMethod("close");
  27. _init() {
  28. _channel.setMethodCallHandler(_handleMessages);
  29. }
  30. Future<Null> _handleMessages(MethodCall call) async {
  31. switch (call.method) {
  32. case "onDestroy":
  33. _onDestroy.add(null);
  34. break;
  35. case "onBackPressed":
  36. _onBackPressed.add(null);
  37. break;
  38. }
  39. }
  40. }