Flutter中ListView 的使用示例
這個(gè)小例子使用的是豆瓣 API 中 正在上映的電影 的開(kāi)放接口,要實(shí)現(xiàn)的主要效果如下:

JSON 數(shù)據(jù)結(jié)構(gòu)

Item 結(jié)構(gòu)
Item 的結(jié)構(gòu)是一個(gè) Card 包含著一個(gè) Row 然后這個(gè) Row 里面左邊是一個(gè) Image ,右邊是一個(gè) Column
功能實(shí)現(xiàn)
- material 庫(kù)
- Json 解析
- 網(wǎng)絡(luò)請(qǐng)求
- 加載菊花
要實(shí)現(xiàn)上面四個(gè)功能,我們首先需要在 .dart 文件中引入如下代碼
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart';
網(wǎng)絡(luò)請(qǐng)求
loadData() async {
String loadRUL = "https://api.douban.com/v2/movie/in_theaters";
http.Response response = await http.get(loadRUL);
var result = json.decode(response.body);
setState(() {
title = result['title'];
print('title: $title');
subjects = result['subjects'];
});
}
ListView && 加載菊花
getBody() {
if (subjects.length != 0) {
return ListView.builder(
itemCount: subjects.length,
itemBuilder: (BuildContext context, int position) {
return getItem(subjects[position]);
});
} else {
// 加載菊花
return CupertinoActivityIndicator();
}
}
Item編寫(xiě)
getItem(var subject) {
// 演員列表
var avatars = List.generate(subject['casts'].length, (int index) =>
Container(
margin: EdgeInsets.only(left: index.toDouble() == 0.0 ? 0.0 : 16.0),
child: CircleAvatar(
backgroundColor: Colors.white10,
backgroundImage: NetworkImage(
subject['casts'][index]['avatars']['small']
)
),
),
);
var row = Container(
margin: EdgeInsets.all(4.0),
child: Row(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(4.0),
child: Image.network(
subject['images']['large'],
width: 100.0, height: 150.0,
fit: BoxFit.fill,
),
),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 8.0),
height: 150.0,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
// 電影名稱(chēng)
Text(
subject['title'],
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20.0,
),
maxLines: 1,
),
// 豆瓣評(píng)分
Text(
'豆瓣評(píng)分:${subject['rating']['average']}',
style: TextStyle(
fontSize: 16.0
),
),
// 類(lèi)型
Text(
"類(lèi)型:${subject['genres'].join("、")}"
),
// 導(dǎo)演
Text(
'導(dǎo)演:${subject['directors'][0]['name']}'
),
// 演員
Container(
margin: EdgeInsets.only(top: 8.0),
child: Row(
children: <Widget>[
Text('主演:'),
Row(
children: avatars,
)
],
),
)
],
),
)
)
],
),
);
return Card(
child: row,
);
}
主要代碼就是上述這些... 效果圖, 源碼地址

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開(kāi)發(fā)實(shí)現(xiàn)錄屏小功能
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)錄屏小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
Android中實(shí)現(xiàn)密碼的隱藏和顯示的示例
本篇文章主要介紹了Android中實(shí)現(xiàn)密碼的隱藏和顯示的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-09
詳細(xì)分析Android-Zygote的啟動(dòng)過(guò)程
在Android系統(tǒng)中,所有的應(yīng)用程序進(jìn)程以及系統(tǒng)服務(wù)進(jìn)程SystemServer都是由Zygote進(jìn)程孕育(fork)出來(lái)的,這也許就是為什么要把它稱(chēng)為Zygote(受精卵)的原因吧。由于Zygote進(jìn)程在Android系統(tǒng)中有著如此重要的地位,本文將詳細(xì)分析它的啟動(dòng)過(guò)程2021-06-06
分析Android 11.0Settings源碼之主界面加載
這篇文章主要介紹了分析Android 11.0Settings源碼之主界面加載,對(duì)Android源碼感興趣的同學(xué),可以著重看一下2021-04-04
Android 使用Vitamio打造自己的萬(wàn)能播放器(1)——準(zhǔn)備
本文主要介紹Android Vitamio,在Android開(kāi)發(fā)視頻播放器的時(shí)候,大家經(jīng)常會(huì)遇到系統(tǒng)版本和不同的Android手機(jī)不同導(dǎo)致開(kāi)發(fā)的軟件不能完美適用,這里給大家介紹個(gè)播放器插件可以適應(yīng)所有Android設(shè)備2016-07-07
Android OkHttp的簡(jiǎn)單使用和封裝詳解
這篇文章主要介紹了Android OkHttp的簡(jiǎn)單使用和封裝詳解的相關(guān)資料,Android OKHttp的簡(jiǎn)單get、post的使用,再到它的封裝,需要的朋友可以參考下2016-12-12

