Flutter WebView 插件在 iOS 14+ 上安装时会导致应用崩溃

Posted

技术标签:

【中文标题】Flutter WebView 插件在 iOS 14+ 上安装时会导致应用崩溃【英文标题】:Flutter WebView plugin crashes the app when installed on iOS 14+ 【发布时间】:2021-01-26 14:45:46 【问题描述】:

当我在装有 ios 14+ 的 iOS 设备上安装我的应用程序时,当用户转到包含 webview 的页面时,应用程序崩溃。

错误是

Runner[654:91182] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSTaggedPointerString 计数]:无法识别的选择器发送到实例 0xb0f5a9dc7811cf31”

我使用的代码是:

用户按下按钮时在主页上:

Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => SecondPage(url)),
        );

第二页有webview:

class SecondPage extends StatefulWidget 
  SecondPage(this.payload);

  final String payload;

  @override
  State<StatefulWidget> createState() => SecondPageState();


class SecondPageState extends State<SecondPage> 
  String _payload;

  @override
  void initState() 
    super.initState();
    _payload = widget.payload;
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Center(
        child: MyWebView(
            title: "Narrative App",
            selectedUrl: 'http://iot-center.de/user/adv/$_payload'),
      ),
    );
  

webview 是:

class MyWebView extends StatefulWidget 
  final String title;
  final String selectedUrl;

  MyWebView(
    @required this.title,
    @required this.selectedUrl,
  );

  @override
  _MyWebViewState createState() => _MyWebViewState();


class _MyWebViewState extends State<MyWebView> 
  WebViewController _controller;

  final _key = UniqueKey();
  bool _isLoadingPage;

  @override
  void initState() 
    super.initState();
    if (Platform.isandroid) WebView.platform = SurfaceAndroidWebView();
    _isLoadingPage = true;
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.lightBlue,
        title: Text(widget.title),
      ),
      body: Stack(
        children: <Widget>[
          WebView(
            key: _key,
            initialUrl: widget.selectedUrl,
            javascriptMode: JavascriptMode.unrestricted,
            onWebViewCreated: (WebViewController webViewController) 
              this._controller = webViewController;
            ,
            onPageFinished: (url) 
              setState(() 
                _isLoadingPage = false;
              );
            ,
          ),
          _isLoadingPage
              ? Container(
                  alignment: FractionalOffset.center,
                  child: CircularProgressIndicator(
                    backgroundColor: Colors.lightBlue,
                  ),
                )
              : Container(),
        ],
      ),
      floatingActionButton: favoriteButton(),
    );
  

  Widget favoriteButton() 
    return FloatingActionButton(
      child: Icon(Icons.share),
      onPressed: () 
        Share.share('Check out this $widget.selectedUrl',
            subject: 'Look what I found!');
      ,
    );
  

每一个建议都将受到高度赞赏。

【问题讨论】:

【参考方案1】:

这是一个 Flutter 错误,flutter 开发人员正在解决这个问题: https://github.com/flutter/flutter/issues/67213#issuecomment-705066599

【讨论】:

以上是关于Flutter WebView 插件在 iOS 14+ 上安装时会导致应用崩溃的主要内容,如果未能解决你的问题,请参考以下文章

ios Flutter应用程序的webview中的键盘不显示

如何使用 flutter_webview_plugin 播放视频

如何使用 flutter_webview 插件在 Flutter 中启用位置?

FlutterWeb 和 WebView 原生交互调用

如何让 Pinch Zoom 在 webview_flutter 插件上工作

Flutter:webview_flutter插件使用