Flutter中ListView 的使用示例

所属分类: 软件编程 / Android 阅读数: 81
收藏 0 赞 0 分享

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

JSON 数据结构

Item 结构

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

功能实现

  1. material 库
  2. Json 解析
  3. 网络请求
  4. 加载菊花

要实现上面四个功能,我们首先需要在 .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网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多