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

Flutter:如何将MaterialPageRoute传递的字符串传入WebViewController的loadRequest

解决方案

你的问题核心是在StatefulWidget类中直接初始化WebViewController并引用widget参数,这会导致初始化时无法获取到正确的blogUrl值,因为StatefulWidget的构造参数在类成员初始化阶段还未完成绑定。正确的做法是将WebViewController的初始化移到对应的State类中,利用State类可以访问widget属性的特性来加载URL。

修正后的完整代码

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

class ArticleView extends StatefulWidget {
  final String blogUrl;

  const ArticleView({required this.blogUrl, super.key});

  @override
  State<ArticleView> createState() => _ArticleViewState();
}

class _ArticleViewState extends State<ArticleView> {
  late WebViewController controller;

  @override
  void initState() {
    super.initState();
    // 在这里初始化WebViewController,此时可以正常访问widget.blogUrl
    controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setBackgroundColor(const Color(0x00000000))
      ..setNavigationDelegate(
        NavigationDelegate(
          onProgress: (int progress) {
            // 可以在这里添加加载进度的处理逻辑
          },
          onPageStarted: (String url) {},
          onPageFinished: (String url) {},
          onWebResourceError: (WebResourceError error) {},
          onNavigationRequest: (NavigationRequest request) {
            if (request.url.startsWith('https://www.youtube.com/')) {
              return NavigationDecision.prevent;
            }
            return NavigationDecision.navigate;
          },
        ),
      )
      ..loadRequest(Uri.parse(widget.blogUrl));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: WebViewWidget(controller: controller),
    );
  }
}

关键修正点说明

  • 将WebViewController的定义移到_ArticleViewState类中,用late关键字标记延迟初始化。
  • 在initState方法中完成控制器初始化,此时widget.blogUrl已完成参数传递,可正常访问。
  • 使用WebViewWidget(webview_flutter最新版本的组件,替代旧版WebView)加载控制器。

home.dart代码无需修改

你原有的BlogTile组件跳转逻辑是正确的,保持原样即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:17:32