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

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

Item 結(jié)構(gòu)
Item 的結(jié)構(gòu)是一個 Card 包含著一個 Row 然后這個 Row 里面左邊是一個 Image ,右邊是一個 Column
功能實現(xiàn)
- material 庫
- Json 解析
- 網(wǎng)絡(luò)請求
- 加載菊花
要實現(xiàn)上面四個功能,我們首先需要在 .dart 文件中引入如下代碼
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart';
網(wǎng)絡(luò)請求
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編寫
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>[
// 電影名稱
Text(
subject['title'],
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 20.0,
),
maxLines: 1,
),
// 豆瓣評分
Text(
'豆瓣評分:${subject['rating']['average']}',
style: TextStyle(
fontSize: 16.0
),
),
// 類型
Text(
"類型:${subject['genres'].join("、")}"
),
// 導演
Text(
'導演:${subject['directors'][0]['name']}'
),
// 演員
Container(
margin: EdgeInsets.only(top: 8.0),
child: Row(
children: <Widget>[
Text('主演:'),
Row(
children: avatars,
)
],
),
)
],
),
)
)
],
),
);
return Card(
child: row,
);
}
主要代碼就是上述這些... 效果圖, 源碼地址

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android學習之BottomSheetDialog組件的使用
BottomSheetDialog是底部操作控件,可在屏幕底部創(chuàng)建一個支持滑動關(guān)閉視圖。本文將通過示例詳細講解它的使用,感興趣的小伙伴可以了解一下2022-06-06
Android編程實現(xiàn)canvas繪制餅狀統(tǒng)計圖功能示例【自動適應(yīng)條目數(shù)量與大小】
這篇文章主要介紹了Android編程實現(xiàn)canvas繪制餅狀統(tǒng)計圖功能,可實現(xiàn)自動適應(yīng)條目數(shù)量與大小的功能,涉及Android基于canvas的圖形繪制相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
ExpandableListView實現(xiàn)手風琴效果
這篇文章主要為大家詳細介紹了ExpandableListView實現(xiàn)手風琴效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
Android Studio 3.1.3升級至3.6.1后舊項目的兼容操作方法
這篇文章主要介紹了Android Studio 3.1.3升級至3.6.1后舊項目的兼容操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

