如何在颤抖中获得Chrome Powered Webview?

时间:2018-11-23 10:32:19

标签: android google-chrome webview dart flutter

我最近注意到,当在一些Android应用程序中打开链接时,它们具有类似的外观和自定义操作菜单,并且在自定义菜单下带有“由Chrome驱动”。在此使用了什么组件,或者仍然是Chromium WebView?希望我希望将它们添加到我的下一个项目中,这些项目涉及在应用程序内打开链接。实现像Flutter中的桌面视图一样。

平台:andriod webview:具有自定义选项的chrome驱动的webview 框架:颤抖

LinkedIn应用

Linkedin webview

GMail应用

gmail app

我扑扑的医生:

[√] Flutter (Channel beta, v0.11.9, on Microsoft Windows [Version 
10.0.17134.407], locale en-IN)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[√] Android Studio (version 3.2)
[√] VS Code (version 1.29.1)
[√] VS Code, 64-bit edition (version 1.26.1)
[!] Connected device
! No devices available

我的github问题: click here

提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用此软件包:

https://pub.dartlang.org/packages/flutter_custom_tabs

但是请注意,此行为仅在Android上有效,在iOS上将使用Safari Webview。

答案 1 :(得分:0)

您可以尝试使用我的插件flutter_inappbrowser编辑:它已重命名为flutter_inappwebview)。为此,您需要使用ChromeSafariBrowser类。

它在Android上使用Chrome Custom Tabs,在iOS上使用SFSafariViewController

您可以使用InAppBrowser后备实例初始化ChromeSafariBrowser实例。

一个例子:

import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

class MyInAppBrowser extends InAppBrowser {

  @override
  Future onLoadStart(String url) async {
    print("\n\nStarted $url\n\n");
  }

  @override
  Future onLoadStop(String url) async {
    print("\n\nStopped $url\n\n");
  }

  @override
  void onLoadError(String url, int code, String message) {
    print("\n\nCan't load $url.. Error: $message\n\n");
  }

  @override
  void onExit() {
    print("\n\nBrowser closed!\n\n");
  }

}

class MyChromeSafariBrowser extends ChromeSafariBrowser {

  MyChromeSafariBrowser(browserFallback) : super(bFallback: browserFallback);

  @override
  void onOpened() {
    print("ChromeSafari browser opened");
  }

  @override
  void onLoaded() {
    print("ChromeSafari browser loaded");
  }

  @override
  void onClosed() {
    print("ChromeSafari browser closed");
  }
}

void main() => runApp(new MyApp());

class MyApp extends StatefulWidget {
  final ChromeSafariBrowser browser = new MyChromeSafariBrowser(new MyInAppBrowser());

  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('ChromeSafariBrowser Example'),
        ),
        body: Center(
          child: RaisedButton(
              onPressed: () async {
                await widget.browser.open(
                    url: "https://flutter.dev/",
                    options: ChromeSafariBrowserClassOptions(
                        androidChromeCustomTabsOptions: AndroidChromeCustomTabsOptions(addShareButton: false),
                        iosSafariOptions: IosSafariOptions(barCollapsingEnabled: true)));
              },
              child: Text("Open Chrome Safari Browser")),
        ),
      ),
    );
  }
}