广告
返回顶部
首页 > 资讯 > 精选 >使用Flutter怎么实现一个图文并茂的列表
  • 467
分享到

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

2023-06-15 05:06:59 467人浏览 薄情痞子
摘要

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

今天就跟大家聊聊有关使用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怎么实现一个图文并茂的列表有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

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

本文链接: https://www.lsjlt.com/news/277698.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 使用Flutter怎么实现一个图文并茂的列表
    今天就跟大家聊聊有关使用Flutter怎么实现一个图文并茂的列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ListView 简介ListView 用于生成列表,,通常使用 bui...
    99+
    2023-06-15
  • Flutter实现图文并茂的列表
    目录界面布局分析 ListView 简介 编码实现 用到的组件 结语: 界面布局分析 本篇要实现的列表如上图所示。我们拿到界面设计稿之后,在 UI 开发工作第一件事就是考虑界面的元...
    99+
    2022-11-12
  • 怎么在Android应用中添加一个图文并茂的按钮
    怎么在Android应用中添加一个图文并茂的按钮?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码:<LinearLayout android:orie...
    99+
    2023-05-31
    android roi
  • Android中怎么使用Spinner实现一个列表选择框
    本篇文章为大家展示了Android中怎么使用Spinner实现一个列表选择框,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android  Spinner列表选择框的应用Spinner 是...
    99+
    2023-05-30
    android spinner
  • 使用Flutter怎么实现一个Http网络请求
    这期内容当中小编将会给大家带来有关使用Flutter怎么实现一个Http网络请求,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. Http的请求方式简介Http网络请求方式就是描述了客户端想对指定的资源...
    99+
    2023-06-14
  • 怎么在Vue中使用Element实现一个树列表组件
    怎么在Vue中使用Element实现一个树列表组件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、常规树列表控件的使用众所周知,一般界面很多情况涉及到树列表的处理,如类型...
    99+
    2023-06-15
  • 使用Flutter怎么实现一个钉钉考勤日历
    使用Flutter怎么实现一个钉钉考勤日历?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 使用  // 考勤日历 &nb...
    99+
    2023-06-14
  • PHP中怎么利用循环实现一个分类列表
    PHP中怎么利用循环实现一个分类列表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。< div class="modContent&quo...
    99+
    2023-06-17
  • 使用canvas怎么实现一个拼图功能
    使用canvas怎么实现一个拼图功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现的思路其实挺简单的,主要是通过服务端获取图片链接,图片宽度,图片高度,然后...
    99+
    2023-06-09
  • 使用React怎么实现一个登录表单
    这篇文章将为大家详细讲解有关使用React怎么实现一个登录表单,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:import React from ...
    99+
    2023-06-14
  • 怎么在Android中利用ItemDecoration 实现一个分组索引列表
    怎么在Android中利用ItemDecoration 实现一个分组索引列表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。分组 GroupHeader分割线SideBar前两个...
    99+
    2023-05-30
    android itemdecoration
  • 使用javascript怎么实现一个斐波那契数列
    使用javascript怎么实现一个斐波那契数列?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript实现斐波那契数列斐波那契数列,又称黄金分割数列,指的是这样...
    99+
    2023-06-14
  • 怎么用java实现一个简单的序列化
    小编给大家分享一下怎么用java实现一个简单的序列化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  package test;import Java....
    99+
    2023-06-03
  • 使用CSS3怎么实现一个全景图特效
    本篇文章为大家展示了使用CSS3怎么实现一个全景图特效,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基本代码html代码:<div class="panorama"...
    99+
    2023-06-08
  • 使用C#怎么实现一个简易画图板
    本篇文章为大家展示了使用C#怎么实现一个简易画图板,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义公共变量用于多个窗体之间共同使用数据public class TempData...
    99+
    2023-06-14
  • 使用bootstrap怎么实现一个轮播图功能
    使用bootstrap实现轮播图的方法:1.新建html项目,导入bootstrap;2.添加轮播图容器;3.添加计数器;4.设置播放区域;具体步骤如下:首先,新建一个html项目,并使用link标签导入bootstrap;<!DOC...
    99+
    2022-10-06
  • 使用python怎么实现一个九宫格图片
    这篇文章给大家介绍使用python怎么实现一个九宫格图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和floa...
    99+
    2023-06-14
  • Android 开发中怎么利用TreeView实现一个多级树形列表
    今天就跟大家聊聊有关Android 开发中怎么利用TreeView实现一个多级树形列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体的实现思路参考下面的项目结构和具体代码:Ele...
    99+
    2023-05-31
    android treeview 多级树形列表
  • 使用java怎么实现一个mysql分表操作
    使用java怎么实现一个mysql分表操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。设置项目气动执行次方法(每天检查一次表记录)public cl...
    99+
    2023-06-06
  • 怎么在Android应用中利用PopuWindow实现一个下拉列表功能
    这篇文章将为大家详细讲解有关怎么在Android应用中利用PopuWindow实现一个下拉列表功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基础依赖,由于下拉列表是用RecycleVie...
    99+
    2023-05-31
    popuwindow roi android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作