颤振(ChromeSafariBrowser._throwIsAlreadyOpened 错误)
Flutter (ChromeSafariBrowser._throwIsAlreadyOpened error)
我正在使用一个名为 flutter_inappbrowser 1.2.1 的库。在这个库的帮助下,我打开了一个浏览器,它第一次运行良好,但之后如果我们再次尝试打开浏览器,它会抛出错误
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: Exception: [Error: Cannot open https://www.abcd.com/xyzal.html! The browser is already opened.]
下面提供了用于操作的代码。
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);
任何帮助将不胜感激,
谢谢。
在您的 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"
});
我找到了解决方案,将其张贴在这里,因为它可能会在将来对某人有所帮助。
解决方法是不调用 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"
});
},
我正在使用一个名为 flutter_inappbrowser 1.2.1 的库。在这个库的帮助下,我打开了一个浏览器,它第一次运行良好,但之后如果我们再次尝试打开浏览器,它会抛出错误
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: Exception: [Error: Cannot open https://www.abcd.com/xyzal.html! The browser is already opened.]
下面提供了用于操作的代码。
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);
任何帮助将不胜感激, 谢谢。
在您的 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"
});
我找到了解决方案,将其张贴在这里,因为它可能会在将来对某人有所帮助。
解决方法是不调用 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"
});
},