博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flutter 中 ListView 的使用
阅读量:4087 次
发布时间:2019-05-25

本文共 3501 字,大约阅读时间需要 11 分钟。

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

 

 

 

JSON 数据结构

 

 

 

Item 结构

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

功能实现

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

要实现上面四个功能,我们首先需要在 .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: 
[ 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:
[// 电影名称 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:
[ Text('主演:'), Row( children: avatars, ) ], ), ) ], ), ) ) ], ), ); return Card( child: row, ); }复制代码

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

 

 

 

关注下面的标签,发现更多相似文章

作者:刘斯龙
链接:https://juejin.im/post/5b596c89e51d4519945ffb66
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的文章
PX4与ROS关系以及仿真控制(键盘控制无人机)
查看>>
我对无人机重心高度的理解
查看>>
现在明白为什么无名博客里好几篇文章在讲传感器的滞后
查看>>
实际我看Pixhawk定高模式其实也是飞得很稳,飘得也不厉害
查看>>
Pixhawk解锁常见错误
查看>>
C++的模板化等等的确实比C用起来方便多了
查看>>
ROS是不是可以理解成一个虚拟机,就是操作系统之上的操作系统
查看>>
用STL algorithm轻松解决几道算法面试题
查看>>
ACfly之所以不怕炸机因为它觉得某个传感器数据不安全就立马不用了
查看>>
我发觉,不管是弄ROS OPENCV T265二次开发 SDK开发 caffe PX4 都是用的C++
查看>>
ROS的安装(包含文字和视频教程,我的ROS安装教程以这篇为准)
查看>>
国内有个码云,gitee
查看>>
原来我之前一直用的APM固件....现在很多东西明白了。
查看>>
realsense-ros里里程计相关代码
查看>>
似乎写个ROS功能包并不难,你会订阅话题发布话题,加点逻辑处理,就可以写一些基础的ROS功能包了。
查看>>
if __name__ == ‘__main__‘:就是Python里的main函数,脚本从这里开始执行,如果没有main函数则从上到下顺序执行。
查看>>
PX4官方用户和开发手册的首页面是会给你选择英文和中文的
查看>>
网络协议栈我是不是可以这么理解,就是把你要发送的数据自动处理成TCPIP格式的消息发出去,这种底层的转换不需要你弄了。
查看>>
除了LwIP还有uIP
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>