我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Flutter怎么实现一个图文并茂的列表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Flutter怎么实现一个图文并茂的列表

今天就跟大家聊聊有关使用Flutter怎么实现一个图文并茂的列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

ListView 简介

ListView 用于生成列表,,通常使用 builder静态方法构建一个列表,其中关键的参数为:

  • itemCount:列表元素的数量。

  • itemBuilder:列表元素构建函数,通过指定元素的下标返回对应的列表元素组件。

如果要使用分隔组件的列表,也可以使用 ListView.seperate 方法构建列表,这个方法多了一个 seperateBuilder 参数,用于返回列表元素间对应的分隔组件。

因此,列表的关键是列表元素组件的实现。

编码实现

我们还是基于上一个工程,在 dynamic.dart 中实现列表。在源代码目录新增两个文件,分别是 dynamic_item.dart 用于构建列表元素,dynamic_mock_data .dart用于模拟后台接口数据。其中 dynamic_mock_data 的数据比较简单,用一个list 静态方法返回分页数据,如下所示:

class DynamicMockData {  static List<Map<String, Object>> list(int page, int size) {    return List<Map<String, Object>>.generate(size, (index) {      return {        'title': '标题${index + (page - 1) * size + 1}:这是一个列表标题,最多两行,多处部分将会被截取',        'imageUrl':            'https://file.lsjlt.com/upload/202306/13/x5fenqyckej.jpg',        'viewCount': 180,      };    });  }}

其中 page 和 size 用于模拟分页情况,方便后续实现上拉和下拉刷新。 注意这里使用了 List 的 generate 方法来构建数组,该方法用于构建指定大小的数组, 可以通过带index输入的回调函数构建对饮 index 下标的数组元素。

dynamic_item.dart的实现代码如下所示:

import 'package:flutter/material.dart';class DynamicItem extends StatelessWidget {  final String title;  final String imageUrl;  final int viewCount;  static const double ITEM_HEIGHT = 100;  static const double TITLE_HEIGHT = 80;  static const double MARGIN_SIZE = 10;  const DynamicItem(this.title, this.imageUrl, this.viewCount, {Key key})      : super(key: key);  @override  Widget build(BuildContext context) {    return Container(      margin: EdgeInsets.all(MARGIN_SIZE),      child: Row(        crossAxisAlignment: CrossAxisAlignment.start,        children: [          _imageWrapper(this.imageUrl),          Expanded(            child: Column(              crossAxisAlignment: CrossAxisAlignment.start,              children: [                _titleWrapper(context, this.title),                _viewCountWrapper(this.viewCount.toString()),              ],            ),          )        ],      ),    );  }  Widget _titleWrapper(BuildContext context, String text) {    return Container(      height: TITLE_HEIGHT,      margin: EdgeInsets.fromLTRB(MARGIN_SIZE, 0, 0, 0),      child: Text(        this.title,        maxLines: 2,        overflow: TextOverflow.ellipsis,        style: Theme.of(context).textTheme.headline6,      ),    );  }  Widget _viewCountWrapper(String text) {    return Container(      margin: EdgeInsets.fromLTRB(MARGIN_SIZE, 0, 0, 0),      height: ITEM_HEIGHT - TITLE_HEIGHT,      child: Row(children: [        Icon(          Icons.remove_red_eye_outlined,          size: 14.0,          color: Colors.grey,        ),        SizedBox(width: 5),        Text(          this.viewCount.toString(),          style: TextStyle(color: Colors.grey, fontSize: 14.0),        ),      ]),    );  }  Widget _imageWrapper(String imageUrl) {    return SizedBox(      width: 150,      height: ITEM_HEIGHT,      child: Image.network(imageUrl),    );  }}

首先定义了title、imageUrl和 viewCount 几个final 类型的成员属性,使用 final 的约束是方便外部其他类可以直接访问,但不可以做修改。如果这些属性本身外部不可访问,也可以定义为私有成员。

其次是使用构造函数直接完成成员属性的初始化,这是 Dart 语言的一种简写方法,只要传参次序一致就可以不需要函数体自动完成成员的初始化,通常会用在 final 修饰的成员属性。

在 build 方法中完成了整个界面的构建。其中注意这里使用了 Expanded 包裹右侧区域,Expanded组件是表示横向布局中,该组件将自动占据剩余的空间。如果没有这个包裹,会导致右侧内容过宽时无法显示完全而报警。

图片、标题和浏览数均通过单独的构建组件方法获取,这一方面是降低UI嵌套层级,另一方面如果日后有同样的组件,则可以抽离单独的构建方法提高复用性。下面对关键的几个设置进行解读:

  • crossAxisAlignment: CrossAxisAlignment.start:这个用于标记Row行布局组件的元素在列方向上从起始位置开始对齐(即纵向上右侧和图片上沿对齐)。

  • Container 的 margin:用于设置距离上下左右的间距,如果四个方向间距一致,就可以使用 EdgeInsets.all 方法设置。如果不一致就是要 EdgeInsets.fromLTRB 单独设置四个方向的间距。

  • 在浏览数组件中使用了一个 SizedBox 组件,这个组件本身没什么内容,仅仅是为了将图标和浏览数字之间拉开一定的间距,提高美观度。

用到的组件

除了 ListView 之外,本篇涉及到的组件如下:

  • Text:文本组件,相当于是 label。除了文字内容外,可以使用 style 设置文字样式。这里标题使用了 maxLines 约束标题最大2行,使用了 overflow 设置了文字溢出后处理方式。

  • Image:图片组件,这里使用了 Image.network 从网络加载图片,这个 Image.network 是很初级的用法,后续会使用 cached_image_network 插件替换。

  • Icon:图标组件,在 Flutter 中内置了很多字体图标,对于大部分场景都能够满足,图标可以使用 Icons 类定义的图标名称来找到想要的图标。

  • Row:行布局组件,其子组件 children 都是按先后顺序从左到右在同一行依次排列。

  • Column:列布局组件,其子组件 children 都是按从先后顺序从上到下在同一列依次排列。

看完上述内容,你们对使用Flutter怎么实现一个图文并茂的列表有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Flutter怎么实现一个图文并茂的列表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Flutter怎么实现一个图文并茂的列表

今天就跟大家聊聊有关使用Flutter怎么实现一个图文并茂的列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ListView 简介ListView 用于生成列表,,通常使用 bui
2023-06-15

怎么在Android应用中添加一个图文并茂的按钮

怎么在Android应用中添加一个图文并茂的按钮?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码:
2023-05-31

使用Flutter怎么实现一个Http网络请求

这期内容当中小编将会给大家带来有关使用Flutter怎么实现一个Http网络请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. Http的请求方式简介Http网络请求方式就是描述了客户端想对指定的资源
2023-06-14

Android中怎么使用Spinner实现一个列表选择框

本篇文章为大家展示了Android中怎么使用Spinner实现一个列表选择框,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android Spinner列表选择框的应用Spinner 是 Andr
2023-05-30

使用Flutter怎么实现一个钉钉考勤日历

使用Flutter怎么实现一个钉钉考勤日历?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 使用 // 考勤日历 DatePicker
2023-06-14

怎么在Vue中使用Element实现一个树列表组件

怎么在Vue中使用Element实现一个树列表组件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、常规树列表控件的使用众所周知,一般界面很多情况涉及到树列表的处理,如类型
2023-06-15

使用React怎么实现一个登录表单

这篇文章将为大家详细讲解有关使用React怎么实现一个登录表单,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:import React from react;import { Inp
2023-06-14

PHP中怎么利用循环实现一个分类列表

PHP中怎么利用循环实现一个分类列表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。< div class="modContent"> < %foreach from=$so
2023-06-17

使用canvas怎么实现一个拼图功能

使用canvas怎么实现一个拼图功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现的思路其实挺简单的,主要是通过服务端获取图片链接,图片宽度,图片高度,然后
2023-06-09

使用javascript怎么实现一个斐波那契数列

使用javascript怎么实现一个斐波那契数列?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript实现斐波那契数列斐波那契数列,又称黄金分割数列,指的是这样
2023-06-14

使用C#怎么实现一个简易画图板

本篇文章为大家展示了使用C#怎么实现一个简易画图板,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义公共变量用于多个窗体之间共同使用数据public class TempData {
2023-06-14

使用python怎么实现一个九宫格图片

这篇文章给大家介绍使用python怎么实现一个九宫格图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的数据类型有哪些?python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和flo
2023-06-14

使用java怎么实现一个mysql分表操作

使用java怎么实现一个mysql分表操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。设置项目气动执行次方法(每天检查一次表记录)public class D
2023-06-06

使用CSS3怎么实现一个全景图特效

本篇文章为大家展示了使用CSS3怎么实现一个全景图特效,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基本代码html代码:
首先定义一些基本的样
2023-06-08

使用Mybatis注解怎么实现一个单表、多表操作

本篇文章给大家分享的是有关使用Mybatis注解怎么实现一个单表、多表操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一.Mybatis注解开发单表操作 ***1.1 MyB
2023-06-06

使用Opencv怎么实现一个图片油画特效

这期内容当中小编将会给大家带来有关使用Opencv怎么实现一个图片油画特效,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。代码实现首先导入包:import numpy as npimport cv2读取原图
2023-06-06

怎么在Android中利用ItemDecoration 实现一个分组索引列表

怎么在Android中利用ItemDecoration 实现一个分组索引列表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。分组 GroupHeader分割线SideBar前两个
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录