You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何在应用内浏览器窗口打开链接并修改浏览器窗口头部

Flutter 应用内浏览器打开链接实现方案

方案1:使用官方维护的 url_launcher 包(轻量需求首选)

这是Flutter官方维护的插件,无需自行封装WebView即可快速实现应用内打开网页,满足基础使用需求。

  • 第一步:添加依赖
    在项目pubspec.yaml文件中添加依赖配置:
dependencies:
  flutter:
    sdk: flutter
  url_launcher: ^6.2.5 # 可替换为当前最新版本

添加完成后执行flutter pub get完成依赖安装。

  • 第二步:配置平台权限
    • 安卓配置:在android/app/src/main/AndroidManifest.xml的manifest标签下添加查询规则:
      <queries>
        <intent>
          <action android:name="android.intent.action.VIEW" />
          <data android:scheme="https" />
        </intent>
      </queries>
      
    • iOS配置:在ios/Runner/Info.plist的dict标签下添加白名单配置:
      <key>LSApplicationQueriesSchemes</key>
      <array>
        <string>https</string>
        <string>http</string>
      </array>
      
  • 第三步:编写调用代码
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';

void openInAppBrowser(BuildContext context, String targetUrl) async {
  final Uri url = Uri.parse(targetUrl);
  if (await canLaunchUrl(url)) {
    await launchUrl(
      url,
      // 指定打开模式为应用内WebView
      mode: LaunchMode.inAppWebView,
      // 可选配置项:自定义WebView能力
      webViewConfiguration: const WebViewConfiguration(
        enableJavaScript: true,
        enableDomStorage: true,
      ),
    );
  } else {
    if (context.mounted) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('无法打开该链接')),
      );
    }
  }
}

需要打开链接时,直接传入上下文和目标链接调用该方法即可。

方案2:使用 flutter_inappwebview 包(自定义需求首选)

如果需要自定义浏览器UI、拦截页面请求、注入JS交互等进阶功能,可以使用该第三方包,灵活性更高。

  • 第一步:在pubspec.yaml添加依赖并执行安装
dependencies:
  flutter_inappwebview: ^6.0.0 # 可替换为当前最新版本
  • 第二步:示例代码
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';

class CustomInAppBrowser extends StatelessWidget {
  final String targetUrl;
  const CustomInAppBrowser({super.key, required this.targetUrl});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('网页浏览')),
      body: InAppWebView(
        initialUrlRequest: URLRequest(url: WebUri(targetUrl)),
        // 可自行扩展加载进度条、JS交互、页面跳转拦截等逻辑
        onProgressChanged: (controller, progress) {
          // 自定义进度条实现逻辑
        },
      ),
    );
  }
}

调用时直接将该页面push到路由栈即可。

内容的提问来源于stack exchange,提问作者Mari Selvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:15:03