Flutter 中 ListView 的使用

这个小例子使用的是豆瓣 API 中 正在上映的电影的开放接口,要实现的主要效果如下:

 

JSON 数据结构

Item 结构

Item 的结构是一个 Card 包含着一个 Row 然后这个 Row 里面左边是一个 Image,右边是一个 Column

功能实现

  • material 库
  • Json 解析
  • 网络请求
  • 加载菊花

要实现上面四个功能,我们首先需要在 .dart 文件中引入如下代码

1import 'dart:convert'; 2import 'package:http/http.dart' as http; 3import 'package:flutter/material.dart'; 4import 'package:flutter/cupertino.dart';

网络请求

1loadData() async { 2 String loadRUL = "https://api.douban.com/v2/movie/in_theaters"; 3 http.Response response = await http.get(loadRUL); 4 var result = json.decode(response.body); 5 setState(() { 6 title = result['title']; 7 print('title: $title'); 8 subjects = result['subjects']; 9 }); 10 }

ListView && 加载菊花

1getBody() { 2 if (subjects.length != 0) { 3 return ListView.builder( 4 itemCount: subjects.length, 5 itemBuilder: (BuildContext context, int position) { 6 return getItem(subjects[position]); 7 }); 8 } else { 9 // 加载菊花 10 return CupertinoActivityIndicator(); 11 } 12 }

Item编写

1getItem(var subject) { 2// 演员列表 3 var avatars = List.generate(subject['casts'].length, (int index) => 4 Container( 5 margin: EdgeInsets.only(left: index.toDouble() == 0.0 ? 0.0 : 16.0), 6 7 child: CircleAvatar( 8 backgroundColor: Colors.white10, 9 backgroundImage: NetworkImage( 10 subject['casts'][index]['avatars']['small'] 11 ) 12 ), 13 ), 14 ); 15 var row = Container( 16 margin: EdgeInsets.all(4.0), 17 child: Row( 18 children: <Widget>[ 19 ClipRRect( 20 borderRadius: BorderRadius.circular(4.0), 21 child: Image.network( 22 subject['images']['large'], 23 width: 100.0, height: 150.0, 24 fit: BoxFit.fill, 25 ), 26 ), 27 Expanded( 28 child: Container( 29 margin: EdgeInsets.only(left: 8.0), 30 height: 150.0, 31 child: Column( 32 crossAxisAlignment: CrossAxisAlignment.start, 33 children: <Widget>[ 34// 电影名称 35 Text( 36 subject['title'], 37 style: TextStyle( 38 fontWeight: FontWeight.bold, 39 fontSize: 20.0, 40 ), 41 maxLines: 1, 42 ), 43// 豆瓣评分 44 Text( 45 '豆瓣评分:${subject['rating']['average']}', 46 style: TextStyle( 47 fontSize: 16.0 48 ), 49 ), 50// 类型 51 Text( 52 "类型:${subject['genres'].join("")}" 53 ), 54// 导演 55 Text( 56 '导演:${subject['directors'][0]['name']}' 57 ), 58// 演员 59 Container( 60 margin: EdgeInsets.only(top: 8.0), 61 child: Row( 62 children: <Widget>[ 63 Text('主演:'), 64 Row( 65 children: avatars, 66 ) 67 ], 68 ), 69 ) 70 ], 71 ), 72 ) 73 ) 74 ], 75 ), 76 ); 77 return Card( 78 child: row, 79 ); 80 }

主要代码就是上述这些... 效果图,源码地址

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang