url_launcher插件无法正常运行

时间:2020-09-15 06:55:52

标签: flutter

我正在做扑扑的应用程序。我想在应用程序中打开网站。因此,我已经使用url_launcher插件打开了URL,但是没有用。不必在应用程序中显示网站。

这是我的代码:

class _MainPageState extends State<MainPage>
    with SingleTickerProviderStateMixin {
  TabController _tabController;

  @override
  void initState() {
    _tabController = new TabController(length: 2, vsync: this);
    super.initState();
  }

  void _launch(String url) async {
    try {
      if (await canLaunch(url)) {
        await launch(url);
      }
    } catch (e) {
      print(e);
    }
  }

  Widget tab1() {
    return Container();
  }

  Widget tab2() {
    return InkWell(
      onTap: () {
        _launch("www.google.com");
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        bottom: TabBar(
          unselectedLabelColor: Colors.black,
          labelColor: Colors.white,
          tabs: [
            new Tab(text: 'Tab 1'),
            new Tab(text: 'Tab 2'),
          ],
          controller: _tabController,
          indicatorColor: Colors.white,
          indicatorSize: TabBarIndicatorSize.tab,
        ),
        bottomOpacity: 1,
      ),
      body: TabBarView(
        children: [tab1(), tab2()],
        controller: _tabController,
      ),
    );
  }
}

有人知道如何解决此错误吗?

4 个答案:

答案 0 :(得分:1)

您使用了错误的软件包

要在Flutter应用中打开任何网站,请使用webview_flutter软件包 Click here to check details to use this package

答案 1 :(得分:1)

url_launcher 如果使用得当可以正常工作

_launchURL() async {
    const url = "https://something.com";
    if (await canLaunch(url)) {
      await launch(
        url,
        forceWebView: false,
        enableJavaScript: true,
        headers: <String, String>{'my_header_key': 'my_header_value'},);
    } else {
      
      throw 'Could not launch ';
    }
  }

文档显示了何时以及为何使用 forceWebView 和 enableJavaScript。

但是请注意,Android 11(API 级别 30)会给您带来一些问题。 在这种情况下,canLaunch 返回 false。 为了使它工作,我必须在我的 AndroidManifest.xml 中添加以下内容:

<activity android:name="io.flutter.plugins.urllauncher.WebViewActivity"
           android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
           android:exported="false"/>

仅此一项是行不通的,所以我进行了更多挖掘并发现了这一点: https://developer.android.com/training/basics/intents/package-visibility#all-apps

然后我也将以下内容添加到我的 AndroidManifest.xml 并为我解决了:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

答案 2 :(得分:0)

您好,此文件中的所有代码都可以吗?

首先,文件开头缺少一些导入;)

例如,您需要添加

import 'package:url_launcher/url_launcher.dart';

您跑步

pub get

修改pubspec.yaml文件后?

答案 3 :(得分:0)

该网址应具有正确的方案:

http:,https :,例如http://flutter.dev-在默认浏览器中打开URL

https://pub.dev/packages/url_launcher#supported-url-schemes

Widget tab2() {
  return InkWell(
    onTap: () {
      _launch("https://www.google.com/");
    },
  );
}