【发布时间】:2020-02-11 00:41:37
【问题描述】:
我有这样的 Json 数据(执行 getdata.php 时):
[{"sponsorlogo":"/localhost/webview/img/logo01.jpg"},{"sponsorlogo":"/localhost/webview/img/logo02.jpg"},{"sponsorlogo":"/localhost/webview/img/logo03.jpg"}]
我需要在 Flutter 中显示 CarouselSlider 小部件 (https://pub.dev/packages/carousel_slider) 的图像 url。遵循小部件部分到目前为止我正在尝试做的事情(仍未解决)。
class SponsorSlider extends StatefulWidget {
@override
_SponsorSliderState createState() => _SponsorSliderState();
}
class _SponsorSliderState extends State<SponsorSlider> {
Future<List> getSponsorSlide() async {
final response = await http.get("getdata.php");
return json.decode(response.body);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Card(
child: new FutureBuilder<List>(
future: getSponsorSlide(),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? new SponsorList(
list: snapshot.data,
)
: new Center(
child: new CircularProgressIndicator()
);
},
),
),
),
);
}
}
class SponsorList extends StatelessWidget {
final List list;
SponsorListSimple({this.list});
int _current = 0;
int index = 1;
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
CarouselSlider(
height: 200.0,
initialPage: 0,
onPageChanged: (index) {
setState(() {
_current = index;
});
},
autoPlay: true,
autoPlayInterval: Duration(seconds: 2),
reverse: false,
items: list[index]["sponsorlogo"].map((imageUrl){
return Builder (
builder: (BuildContext context){
return Container(
width: MediaQuery.of(context).size.width,
margin: EdgeInsets.symmetric(horizontal: 10.0),
decoration: BoxDecoration(
color: Colors.green,
),
child: Image.network(
imageUrl,
fit:BoxFit.fill,
),
);
});
}).toList(),
)
],
),
);
}
}
我尝试获取“imageUrl”,然后将其放在“items”参数中,以便 json 文件中的 URL 列表将显示在轮播中。
【问题讨论】: