【问题标题】:Flutter (ChromeSafariBrowser._throwIsAlreadyOpened error)Flutter(ChromeSafariBrowser._throwIsAlreadyOpened 错误)
【发布时间】:2019-09-29 09:35:44
【问题描述】:

我正在使用一个名为 flutter_inappbrowser 1.2.1 的库。在这个库的帮助下,我打开了一个浏览器,它第一次运行良好,但之后如果我们再次尝试打开浏览器,它会抛出错误

[错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:异常:[错误:无法打开https://www.abcd.com/xyzal.html!浏览器已经打开。]

下面提供了用于该操作的代码。

Center(
child: InkWell(
onTap: () {
chromeSafariBrowser
    .open(url, options: {
"addShareButton": true,
"toolbarBackgroundColor": "#FFFFFF",
"dismissButtonStyle": 1,
"preferredBarTintColor": "#FFFFFF",
"instantAppsEnabled": false
}, optionsFallback: {
"toolbarTopBackgroundColor": "#FFFFFF",
"closeButtonCaption": "Close"
});
},
child: Text(
'Read More...',
style: TextStyle(
color: Color(0xFF38969A),
fontSize: 16.0,
decoration: TextDecoration.underline,
fontWeight: FontWeight.bold),
),
))


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");
  }
}

MyInAppBrowser inAppBrowserFallback = new MyInAppBrowser();

class MyChromeSafariBrowser extends ChromeSafariBrowser {
  MyChromeSafariBrowser(browserFallback) : super(browserFallback);

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

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

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

MyChromeSafariBrowser chromeSafariBrowser =
    new MyChromeSafariBrowser(inAppBrowserFallback);

任何帮助将不胜感激, 谢谢。

【问题讨论】:

    标签: flutter browser inappbrowser


    【解决方案1】:

    我找到了解决方案,将其发布在这里,因为它可能对将来的某人有所帮助。

    解决方法是直接调用MyChromeSafariBrowser(inAppBrowserFallback).open(...),而不是调用chromeSafariBrowser.open(...)。将创建新实例,一切都会顺利进行。不知道这是否是正确的解决方案。

    例如:

    onTap: ()  {
    MyChromeSafariBrowser(inAppBrowserFallback)
        .open(newsData.url, options: {
    "addShareButton": true,
    "toolbarBackgroundColor": "#FFFFFF",
    "dismissButtonStyle": 1,
    "preferredBarTintColor": "#FFFFFF",
    "instantAppsEnabled": false
    }, optionsFallback: {
    "toolbarTopBackgroundColor": "#FFFFFF",
    "closeButtonCaption": "Close"
    });
    },
    

    【讨论】:

      【解决方案2】:

      在您的 onTap 中,您可以检查浏览器是否隐藏(打开)然后显示它而不是打开它:

      onTap: () async {
      
      if (chromeSafariBrowser.isOpened()) {
      await chromeSafariBrowser.show();
      return;
      }
      
      await chromeSafariBrowser
          .open(url, options: {
                  "addShareButton": true,
                  "toolbarBackgroundColor": "#FFFFFF",
                  "dismissButtonStyle": 1,
                  "preferredBarTintColor": "#FFFFFF",
                  "instantAppsEnabled": false
          }, optionsFallback: {
              "toolbarTopBackgroundColor": "#FFFFFF",
              "closeButtonCaption": "Close"
         });
      
      
      

      或者如果您想重新打开它而不是再次显示它

      onTap: () async {
      
      if (chromeSafariBrowser.isOpened()) 
          await chromeSafariBrowser.close();
      await chromeSafariBrowser
          .open(url, options: {
                  "addShareButton": true,
                  "toolbarBackgroundColor": "#FFFFFF",
                  "dismissButtonStyle": 1,
                  "preferredBarTintColor": "#FFFFFF",
                  "instantAppsEnabled": false
          }, optionsFallback: {
              "toolbarTopBackgroundColor": "#FFFFFF",
              "closeButtonCaption": "Close"
         });
      
      
      

      【讨论】:

      • 嗨@Shandevs,感谢您的建议,但不幸的是它没有成功。出现同样的错误。
      • @SachinVarma 尝试删除 chromeSafariBrowser.isOpened() (并将打开的 chromeSafariBrowser.close() 放入 try catch 块中)
      猜你喜欢
      • 2023-03-28
      • 2022-10-04
      • 2018-03-22
      • 2021-01-06
      • 2021-11-14
      • 2022-01-07
      • 2021-05-28
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多