pedia 8 år sedan
förälder
incheckning
09ae5ab257
3 ändrade filer med 31 tillägg och 11 borttagningar
  1. 6 2
      example/lib/main.dart
  2. 5 0
      ios/Classes/FlutterWebviewPlugin.m
  3. 20 9
      lib/flutter_webview_plugin.dart

+ 6 - 2
example/lib/main.dart

@@ -4,6 +4,9 @@ import 'package:flutter/material.dart';
 
 import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
 
+const kAndroidUserAgent =
+    "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36";
+
 void main() {
   runApp(new MyApp());
 }
@@ -46,7 +49,7 @@ class _MyHomePageState extends State<MyHomePage> {
       new TextEditingController(text: "http://github.com");
 
   TextEditingController _codeCtrl =
-      new TextEditingController(text: "window.location.href");
+      new TextEditingController(text: "window.navigator.userAgent");
 
   GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey();
 
@@ -111,7 +114,8 @@ class _MyHomePageState extends State<MyHomePage> {
               flutterWebviewPlugin.launch(_urlCtrl.text,
                   fullScreen: false,
                   rect: new Rect.fromLTWH(
-                      0.0, 0.0, MediaQuery.of(context).size.width, 300.0));
+                      0.0, 0.0, MediaQuery.of(context).size.width, 300.0),
+                  userAgent: kAndroidUserAgent);
             },
             child: new Text("Open Webview (rect)"),
           ),

+ 5 - 0
ios/Classes/FlutterWebviewPlugin.m

@@ -59,6 +59,7 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
     NSNumber *hidden = call.arguments[@"hidden"];
     NSDictionary *rect = call.arguments[@"rect"];
     _enableAppScheme = call.arguments[@"enableAppScheme"];
+    NSString *userAgent = call.arguments[@"userAgent"];
     
     //
     if ([clearCache boolValue]) {
@@ -80,6 +81,10 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
         rc = self.viewController.view.bounds;
     }
     
+    if (userAgent) {
+        [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent": userAgent}];
+    }
+    
     self.webview = [[UIWebView alloc] initWithFrame:rc];
     self.webview.delegate = self;
     

+ 20 - 9
lib/flutter_webview_plugin.dart

@@ -24,6 +24,8 @@ enum _WebViewNavigateType {
 class FlutterWebViewPlugin {
   final MethodChannel _channel;
 
+  /// iOS WebView: Implemented
+  /// Android WebView: not implemented
   final EventChannel _event;
   Stream<String> _stateChanged;
 
@@ -96,23 +98,27 @@ class FlutterWebViewPlugin {
   ///     android: Implemented.
   /// - [clearCache] clear the cache of the Webview
   ///     iOS WebView: Not implemented yet
-  ///     iOS WKWebView: will implement later
+  ///     iOS WkWebView: TODO: later
   ///     android: Implemented
   /// - [clearCookies] clear all cookies of the Webview
   ///     iOS WebView: Not implemented yet
-  ///     iOS WKWebView: will implement later
+  ///     iOS WkWebView: will implement later
   ///     android: Implemented
   /// - [hidden] not show
   ///     iOS WebView: not shown(addSubView) in ViewController
-  ///     android: Implemented
+  ///     android: Not implemented yet.
   ///   [fullScreen]: show in full screen mode, default true
   ///     iOS WebView: without rect, show in full screen mode
-  ///     android: Not implemented yet
+  ///     android: Implemented
   ///   [rect]: show in rect(not full screen)
   ///     iOS WebView: worked
   ///     android: Not implemented yet
-  ///   [enableAppScheme]: false will enable all schemes, true only for
-  /// httt/https/about
+  ///   [enableAppScheme]: false will enable all schemes, true only for httt/https/about
+  ///     iOS WebView: worked
+  ///     android: Not implemented yet
+  ///   [userAgent]: set the User-Agent of WebView
+  ///     iOS WebView: worked
+  ///     android: Not implemented yet
   Future<Null> launch(String url,
       {bool withJavascript: true,
       bool clearCache: false,
@@ -120,7 +126,8 @@ class FlutterWebViewPlugin {
       bool hidden: false,
       bool fullScreen: true,
       bool enableAppScheme: true,
-      Rect rect: null}) async {
+      Rect rect: null,
+      String userAgent: null}) async {
     Map<String, dynamic> args = {
       "url": url,
       "withJavascript": withJavascript,
@@ -128,7 +135,8 @@ class FlutterWebViewPlugin {
       "hidden": hidden,
       "clearCookies": clearCookies,
       "fullScreen": fullScreen,
-      "enableAppScheme": enableAppScheme
+      "enableAppScheme": enableAppScheme,
+      "userAgent": userAgent
     };
     if (!fullScreen) assert(rect != null);
     if (rect != null) {
@@ -142,6 +150,8 @@ class FlutterWebViewPlugin {
     await _channel.invokeMethod('launch', args);
   }
 
+  /// iOS WebView: worked
+  /// android: Not implemented yet
   Future<String> evalJavascript(String code) {
     return _channel.invokeMethod('eval', {"code": code});
   }
@@ -151,6 +161,7 @@ class FlutterWebViewPlugin {
   Future<Null> close() => _channel.invokeMethod("close");
 
   /// Listening url changed
-  ///
+  /// iOS WebView: worked
+  /// android: worked
   Stream<String> get onUrlChanged => _onUrlChanged.stream;
 }