Flutter中ListView 的使用示例
更新時間:2018年07月27日 11:25:31 作者:劉斯龍
這篇文章主要介紹了Flutter中ListView 的使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這個小例子使用的是豆瓣 API 中 正在上映的電影 的開放接口,要實現(xiàn)的主要效果如下:

JSON 數(shù)據結構

Item 結構
Item 的結構是一個 Card 包含著一個 Row 然后這個 Row 里面左邊是一個 Image ,右邊是一個 Column
功能實現(xiàn)
- material 庫
- Json 解析
- 網絡請求
- 加載菊花
要實現(xiàn)上面四個功能,我們首先需要在 .dart 文件中引入如下代碼
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart';
網絡請求
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,
);
}
主要代碼就是上述這些... 效果圖, 源碼地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關文章
分析Android 11.0Settings源碼之主界面加載
這篇文章主要介紹了分析Android 11.0Settings源碼之主界面加載,對Android源碼感興趣的同學,可以著重看一下2021-04-04
Android 使用Vitamio打造自己的萬能播放器(1)——準備
本文主要介紹Android Vitamio,在Android開發(fā)視頻播放器的時候,大家經常會遇到系統(tǒng)版本和不同的Android手機不同導致開發(fā)的軟件不能完美適用,這里給大家介紹個播放器插件可以適應所有Android設備2016-07-07

