Flutter (ошибка ChromeSafariBrowser._throwIsAlreadyOpened) - PullRequest
1 голос
/ 29 сентября 2019

Я использую библиотеку 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);

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Я нашел решение, разместив его здесь, так как это может помочь кому-то в будущем.

Решение состоит в том, что вместо вызова chromeSafariBrowser.open (...) напрямую позвоните MyChromeSafariBrowser (inAppBrowserFallback) .Open (...) .Будет создан новый экземпляр, и все будет работать гладко.Не знаю, правильное ли это решение или нет.

Например:

onTap: ()  {
MyChromeSafariBrowser(inAppBrowserFallback)
    .open(newsData.url, options: {
"addShareButton": true,
"toolbarBackgroundColor": "#FFFFFF",
"dismissButtonStyle": 1,
"preferredBarTintColor": "#FFFFFF",
"instantAppsEnabled": false
}, optionsFallback: {
"toolbarTopBackgroundColor": "#FFFFFF",
"closeButtonCaption": "Close"
});
},
0 голосов
/ 29 сентября 2019

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


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...