【发布时间】:2021-02-18 19:35:57
【问题描述】:
我正在尝试将Webview 与本机 UI 设计相结合。我已经完成了本机 UI,单击 InkWell 后,它将重定向到特定的 html 页面。我现在卡住所有InkWell 打开相同的网址,还有其他方法可以重定向吗?现在我被一个Webview 卡住了,它只显示一个网址。我将需要大约 40 个不同的网址。例如,"https://example.com/data1.html"、"https://example.com/data2.html" 和 "https://example.com/data3.html"
谢谢!
代码
...
child: ListView(
children: [
buildCalc('img/O1-resize.png','O1'),
buildCalc('img/O2-resize.png', 'O2'),
buildCalc('img/O3-resize.png', 'O3'),
buildCalc('img/O4-resize.png', 'O4'),
buildCalc('img/O5-resize.png', 'O5')
]
)
...
Widget buildCalc(String imgPath, String topic){
return Padding(
padding: EdgeInsets.only(left:10.0, right:10.0, top:10.0),
child: InkWell(
onTap: (){
Navigator.push(
context,
MaterialPageRoute(builder:(context)=>Opticsdata()),);
},
child:Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(
child: Row(
children: [
Hero(
tag: imgPath,
child: Image(
image: AssetImage(imgPath),
fit: BoxFit.cover,
height: 75.0,
width: 75.0,
)
),
SizedBox(width:10.0),
Column(
crossAxisAlignment:CrossAxisAlignment.start,
children: [
Text(
topic,
style: TextStyle(
fontFamily: 'Montserrat',
fontSize: 17.0,
fontWeight: FontWeight.bold,
),
)
],
)
],
)
),
/* IconButton(icon: Icon(Icons.arrow_forward_ios),
color: Colors.black,
onPressed: (){},
)*/
],
)
),
);
}
}
...
class Opticsdata extends StatefulWidget {
@override
_OpticsState createState() => _OpticsState();
}
class _OpticsState extends State {
TextEditingController controller=TextEditingController();
FlutterWebviewPlugin flutterWebviewPlugin= FlutterWebviewPlugin();
var url= "https://example.com/data1.html";
@override
void initState() {
super.initState();
flutterWebviewPlugin.onStateChanged.listen((WebViewStateChanged wvs) {});
}
@override
Widget build(BuildContext context) {
return WebviewScaffold(
url: url,
withZoom: true,
hidden: true,
useWideViewPort: true,
// initialChild: Container(
// child:Center(child: Text("Loading"),)
// ),
);
}
}
为任何需要的人编辑下面的工作代码
下面是一个工作示例,它更易于理解。我使用StreamBuilder 并使用来自sites 的声明数据来构建带有标题、url、图像的ListView。
final data = sites;
...
child: StreamBuilder<List<WebSite>>(
initialData: data,
builder: (ctx, snapshot) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (ctx, i) => ListTile(
contentPadding:EdgeInsets.only(top: 20.0,left: 20.0,bottom:10.0),
leading: ClipRRect(
borderRadius: BorderRadius.circular(10.0),//or 15.0
child: Container(
width: 60,height: 60,
child: Image.asset(snapshot.data[i].imageurl,fit: BoxFit.cover),
),
),
title: Text(snapshot.data[i].name),
onTap: () {
print(snapshot.data[i].url);
}
...
class WebSite {
final String name;
final String url;
final String imageurl;
WebSite(this.name, this.url, this.imageurl);
}
final sites = [
WebSite('title1', 'https://example.com/data1.html','img1'),
WebSite('title2', 'https://example.com/data2.html','img2'),
WebSite('title3', 'https://example.com/data3.html','img3'),
...
];
在这里,我用 url 和图片声明 ListView 的标题名称。
【问题讨论】:
标签: android ios flutter webview