热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter中ListView垂直列表组件、水平列表组件

列表布局是项目开发中最常用的一种布局方式,Flutter中我们可以通过ListView来定义列表项,支持垂直和水平方向展示。ListView常见的参数

列表布局是项目开发中最常用的一种布局方式,Flutter 中我们可以通过 ListView 来定义列表项,支持垂直和水平方向展示。

ListView常见的参数列表:

1. scrollDirection 列表方向。主要有以下两种:

(1). Axis.horizontal 水平列表;

(2). Axis.vertical 垂直列表;

2. padding 内边距;

3. reverse 反向排序;

4. children 子元素;

先来个简单的列表项:

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}// 简单的文字垂直列表
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return ListView(// 内边距padding:EdgeInsets.all(20),// 子元素children: [// 列表项ListTile(// 标题title:Text('真心英雄',// 字体样式style: TextStyle(fontSize:24,color:Colors.red),),// 副标题subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!')),ListTile(title:Text('真心英雄',style: TextStyle(fontSize:24,color:Colors.red),),subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!')),ListTile(title:Text('真心英雄',style: TextStyle(fontSize:24,color:Colors.red),),subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!'))]);}
}

效果图如下:

给列表添加前置与后置图标。

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}// 给列表添加前置与后置图标
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return ListView(padding:EdgeInsets.all(20),children: [ListTile(// 前置图标leading: Icon(// 图标类型Icons.settings,// 颜色color:Colors.blue,// 图标大小size:40),// 标题title:Text('真心英雄',// 样式style: TextStyle(fontSize:24,color:Colors.red)),// 副标题subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!'),// 后置标题trailing:Icon(Icons.inbox,size:40)),ListTile(leading:Icon(Icons.home,color:Colors.red,size:40),title:Text('真心英雄',style: TextStyle(fontSize:24,color:Colors.red)),subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!'),trailing:Icon(Icons.inbox,size:40))]);}
}

效果图如下:

给列表加上前置图片,实现常见的图文列表。

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}// 给列表加上前置图片,实现常见的图文列表
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return ListView(// 内边距padding:EdgeInsets.all(20),children: [ListTile(// 前置图片leading:Image.network("https://www.itying.com/images/flutter/1.png"),// 标题title:Text('真心英雄',// 样式style: TextStyle(fontSize:24,color:Colors.red)),// 副标题subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!'),// 后置图标trailing:Icon(Icons.inbox,size:40)),ListTile(leading:Image.network("https://www.itying.com/images/flutter/2.png"),title:Text('真心英雄',style: TextStyle(fontSize:24,color:Colors.red)),subtitle:Text('在我心中,曾经有一个梦,要用歌声让你忘了所有的痛,灿烂星空,谁是真的英雄,平凡的人给我最多感动!'),trailing:Icon(Icons.inbox,size:40))]);}
}

效果图如下:

实现常见的视频类小程序首页布局。

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}// 实现纯图片列表
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return ListView(// 内边距padding:EdgeInsets.all(10),// 子元素children: [Container(// 子元素child:Text('美丽风景',textAlign: TextAlign.left,style:TextStyle(fontSize: 24)),height: 40,padding: EdgeInsets.fromLTRB(0, 0, 10, 0),),// 加载网络图片Image.network("https://www.itying.com/images/flutter/1.png"),Container(child:Text('美丽风景',textAlign: TextAlign.left,style:TextStyle(fontSize: 24)),height: 40,padding: EdgeInsets.fromLTRB(0, 0, 10, 0),),Image.network("https://www.itying.com/images/flutter/2.png"),Container(child:Text('美丽风景',textAlign: TextAlign.left,style:TextStyle(fontSize: 24)),height: 40,padding: EdgeInsets.fromLTRB(0, 0, 10, 0),),Image.network("https://www.itying.com/images/flutter/3.png"),Container(child:Text('美丽风景',textAlign: TextAlign.left,style:TextStyle(fontSize: 24)),height: 40,padding: EdgeInsets.fromLTRB(0, 0, 10, 0),),Image.network("https://www.itying.com/images/flutter/4.png")]);}
}

效果图如下:

横向列表的实现。

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}// 水平列表
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return Container(// 横向滚动列表一定要指定高度,否则会自动填充为全屏高度height:180.0,child:ListView(// 内边距padding:EdgeInsets.all(10),// 水平列表scrollDirection: Axis.horizontal,// 子元素children: [Container(// 宽度width:180.0,// 颜色color:Colors.red,// 子元素child:ListView(children: [Image.network("https://www.itying.com/images/flutter/1.png"),Text('这是一个标题',style:TextStyle(fontSize: 14.0),textAlign: TextAlign.center,)],)),Container(width:180.0,color:Colors.yellow,child:ListView(children: [Image.network("https://www.itying.com/images/flutter/2.png"),Text('这是一个标题',style:TextStyle(fontSize: 14.0),textAlign: TextAlign.center,)],)),Container(width:180.0,color:Colors.blue,child:ListView(children: [Image.network("https://www.itying.com/images/flutter/3.png"),Text('这是一个标题',style:TextStyle(fontSize: 14.0),textAlign: TextAlign.center,)],)),Container(width:180.0,color:Colors.green,child:ListView(children: [Image.network("https://www.itying.com/images/flutter/4.png"),Text('这是一个标题',style:TextStyle(fontSize: 14.0),textAlign: TextAlign.center,)],)),]));}
}

效果图如下:


推荐阅读
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 在Python中,是否可以通过使用Tkinter或ttk库创建一个具有自动换行功能的多行标签,并使其宽度能够随着父容器的变化而动态调整?例如,在调整NotePad窗口宽度时,实现类似记事本的自动换行效果。这种功能在设计需要显示长文本的对话框时非常有用,确保文本内容能够完整且美观地展示。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
author-avatar
Theduck_king
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有