我使用 url_launcher 包在 flutter 应用程序中创建超链接。
Widget build(BuildContext context) {
final Size size = MediaQuery.of(context).size;
List<String> dataList = data.split('@@');
return Scaffold(
backgroundColor: Color(0xffd6d6d6),
appBar: AppBar(
backgroundColor: Color(0xff3D1472),
elevation: 0,
),
drawer: AppDrawer(),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
Stack(
children: <Widget>[
Head(size: size),
Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
top: 5,
left: size.width * 0.2,
right: size.width * 0.2),
child: NewsHead(
size: size,
dataList: dataList,
imgNum: 0,
titleNum: 10,
urlNum: 20,
),
),
以上是主要代码部分。
这是 NewsHead 的代码。
class NewsHead extends StatefulWidget {
final Size size;
final List<String> dataList;
final int imgNum;
final int titleNum;
final int urlNum;
const NewsHead({this.size, this.dataList, this.imgNum, this.titleNum, this.urlNum});
@override
_NewsHeadState createState() => _NewsHeadState();
}
class _NewsHeadState extends State<NewsHead> {
Future<void> _launched;
@override
Widget build(BuildContext context) {
Size size = widget.size;
List<String> dataList = widget.dataList;
int imgNum = widget.imgNum;
int titleNum = widget.titleNum;
int urlNum = widget.urlNum;
return Column(
children: [
Image.network(
dataList[imgNum],
width: size.width * 0.6,
height: size.height * 0.25,
fit: BoxFit.fill,
),
SizedBox(
height: size.height*0.05+100,
child: RaisedButton(
onPressed: () => setState(() {
_launched = _launchURL(dataList[urlNum]);
}),
color: Colors.transparent,
elevation: 0,
child: Text(
dataList[titleNum],
style: TextStyle(fontSize: 20, color: Colors.white70),
)),
),
],
);
下面是_launchURL的代码。
Future<void> _launchURL(String url) async {
if (await canLaunch(url)) {
await launch(
url,
forceSafariVC: true,
forceWebView: true,
headers: <String, String>{'my_header_key': 'my_header_value'},
);
} else {
throw 'Could not launch $url';
}
}
我按照这里的示例_launchInWebViewOrVCcode( https://pub.dev/packages/url_launcher/example )
当我单击链接到该网站的文本时,它只向我显示一个白屏。
Performing hot reload...
Syncing files to device Android SDK built for x86...
Reloaded 0 of 539 libraries in 140ms.
D/EGL_emulation( 6934): eglMakeCurrent: 0xa9485240: ver 2 0 (tinfo 0xa9483a00)
E/eglCodecCommon( 6934): glUtilsParamSize: unknow param 0x000085b5
E/eglCodecCommon( 6934): glUtilsParamSize: unknow param 0x000085b5
D/EGL_emulation( 6934): eglMakeCurrent: 0x863f6140: ver 2 0 (tinfo 0x8187ef10)
D/EGL_emulation( 6934): eglMakeCurrent: 0x863f6140: ver 2 0 (tinfo 0x8187ef10)
E/eglCodecCommon( 6934): glUtilsParamSize: unknow param 0x000085b5
I/chatty ( 6934): uid=10083(u0_a83) RenderThread identical 18 lines
E/eglCodecCommon( 6934): glUtilsParamSize: unknow param 0x000085b5
E/eglCodecCommon( 6934): glUtilsParamSize: unknow param 0x000085b5
E/eglCodecCommon( 6934): glUtilsParamSize: unknow param 0x000085b5
它还告诉我“未使用字段‘_launched’的值”。 我该如何解决这个问题?
最佳答案
URL 可能已正确加载,但根据您尝试显示的网站,您可能需要启用 Javascript(默认情况下处于禁用状态)。
尝试将 enableJavaScript: true,
添加到 launch
函数中。
Future<void> _launchURL(String url) async {
if (await canLaunch(url)) {
await launch(
url,
forceSafariVC: true,
forceWebView: true,
enableJavaScript: true,
headers: <String, String>{'my_header_key': 'my_header_value'},
);
} else {
throw 'Could not launch $url';
}
}
关于android - 如何解决flutter中的超链接错误? (它只向我显示一个白屏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64736051/