package:expandable: ^5.0.1

pub 地址:https://pub.flutter-io.cn/packages/expandable


功能:

功能:

  1. 展开/关闭的控件

使用实例和代码:

import 'dart:math' as math;import 'package:expandable/expandable.dart';
import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Expandable Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: MyHomePage(),);}
}class MyHomePage extends StatefulWidget {@overrideState createState() {return MyHomePageState();}
}class MyHomePageState extends State<MyHomePage> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("Expandable Demo"),),body://设置默认主题,child 里面的expand 都会使用这个默认的主题,除非自己在定义ExpandableTheme(data: const ExpandableThemeData(iconColor: Colors.blue, //展开折叠图标的颜色useInkWell: true, //点击是否有水波纹的效果),child: ListView(physics: const BouncingScrollPhysics(),children: <Widget>[//下面总共有三种效果展示Card1(),Card2(),Card3(),],),),);}
}const loremIpsum ="张九龄:感遇四首之一孤鸿海上来,池潢不敢顾。 侧见双翠鸟,巢在三珠树。 矫矫珍木巅,得无金丸惧。 美服患人指,高明逼神恶。 今我游冥冥,弋者何所慕。张九龄:感遇四首之二兰叶春";class Card1 extends StatelessWidget {const Card1({super.key});@overrideWidget build(BuildContext context) {return ExpandableNotifier(child: Padding(padding: const EdgeInsets.all(10),child: Card(clipBehavior: Clip.antiAlias, //剪切child: Column(children: <Widget>[//定义了一个高度150 颜色是橘色的圆角色块SizedBox(height: 150,child: Container(decoration: const BoxDecoration(color: Colors.orange,shape: BoxShape.rectangle,),),),// 自动化滚动,点击展开,会滚动到可以阅读位置ScrollOnExpand(scrollOnExpand: true,scrollOnCollapse: false,child: ExpandablePanel(theme: const ExpandableThemeData(headerAlignment: ExpandablePanelHeaderAlignment.center,tapBodyToCollapse: true,),//头部widgeheader: Padding(padding: EdgeInsets.all(10),child: Text("ExpandablePanel",style: Theme.of(context).textTheme.bodyText2,)),//简洁性质的内容显示出全部的部分,或者是开头部分,这边是显示两行,超过的...collapsed: const Text(loremIpsum,softWrap: true,maxLines: 2,overflow: TextOverflow.ellipsis,),//展开要显示的内容expanded: const Text('张九龄:感遇四首之一孤鸿海上来,池潢不敢顾。 侧见双翠鸟,巢在三珠树。 矫矫珍木巅,得无金丸惧。 美服患人指,高明逼神恶。 今我游冥冥,弋者何所慕。张九龄:感遇四首之二兰叶春张九龄:感遇四首之一孤鸿海上来,池潢不敢顾。 侧见双翠鸟,巢在三珠树。 矫矫珍木巅,得无金丸惧。 美服患人指,高明逼神恶。 今我游冥冥,弋者何所慕。张九龄:感遇四首之二兰叶春张九龄:感遇四首之一孤鸿海上来,池潢不敢顾。 侧见双翠鸟,巢在三珠树。 矫矫珍木巅,得无金丸惧。 美服患人指,高明逼神恶。 今我游冥冥,弋者何所慕。张九龄:感遇四首之二兰叶春张九龄:感遇四首之一孤鸿海上来,池潢不敢顾。 侧见双翠鸟,巢在三珠树。 矫矫珍木巅,得无金丸惧。 美服患人指,高明逼神恶。 今我游冥冥,弋者何所慕。张九龄:感遇四首之二兰叶春'),//创建展开后的内widgetbuilder: (_, collapsed, expanded) {return Padding(padding:const EdgeInsets.only(left: 10, right: 10, bottom: 10),child: Expandable(collapsed: collapsed,expanded: expanded,//下面的不起作用// theme: const ExpandableThemeData(//     crossFadePoint: 0, iconColor: Colors.pink),),);},),),],),),));}
}class Card2 extends StatelessWidget {@overrideWidget build(BuildContext context) {buildImg(Color color, double height) {return SizedBox(height: height,child: Container(decoration: BoxDecoration(color: color,shape: BoxShape.rectangle,),));}buildCollapsed1() {return Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[Padding(padding: EdgeInsets.all(10),child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[Text("Expandable",style: Theme.of(context).textTheme.bodyText1,),],),),]);}buildCollapsed2() {return buildImg(Colors.lightGreenAccent, 150);}buildCollapsed3() {return Container();}buildExpanded1() {return Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[Padding(padding: EdgeInsets.all(10),child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[Text("Expandable",style: Theme.of(context).textTheme.bodyText1,),Text("3 Expandable widgets",style: Theme.of(context).textTheme.caption,),],),),]);}buildExpanded2() {return Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[Row(children: <Widget>[Expanded(child: buildImg(Colors.lightGreenAccent, 100)),Expanded(child: buildImg(Colors.orange, 100)),],),Row(children: <Widget>[Expanded(child: buildImg(Colors.lightBlue, 100)),Expanded(child: buildImg(Colors.cyan, 100)),],),],);}buildExpanded3() {return Padding(padding: EdgeInsets.all(10),child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[Text(loremIpsum,softWrap: true,),],),);}return ExpandableNotifier(child: Padding(padding: const EdgeInsets.only(left: 10, right: 10, bottom: 10),child: ScrollOnExpand(child: Card(clipBehavior: Clip.antiAlias,child: Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[//Expandable 基础Expand widgetExpandable(//ui 上面显示的是标题,展开之后显示标题和简介collapsed: buildCollapsed1(),expanded: buildExpanded1(),),Expandable(collapsed: buildCollapsed2(),expanded: buildExpanded2(),),Expandable(collapsed: buildCollapsed3(),expanded: buildExpanded3(),),Divider(height: 1,),Row(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Builder(builder: (context) {//控制器可以控制展开和折叠var controller =ExpandableController.of(context, required: true)!;return TextButton(child: Text(controller.expanded ? "折叠" : "展开",style: Theme.of(context).textTheme.button!.copyWith(color: Colors.deepPurple),),onPressed: () {controller.toggle();},);},),],),],),),),));}
}class Card3 extends StatelessWidget {@overrideWidget build(BuildContext context) {buildItem(String label) {return Padding(padding: const EdgeInsets.all(10.0),child: Text(label),);}buildList() {return Column(children: <Widget>[for (var i in [1, 2, 3, 4]) buildItem("数据 ${i}"),],);}return ExpandableNotifier(child: Padding(padding: const EdgeInsets.all(10),child: ScrollOnExpand(child: Card(clipBehavior: Clip.antiAlias,child: ExpandablePanel(theme: const ExpandableThemeData(headerAlignment: ExpandablePanelHeaderAlignment.center,tapBodyToExpand: true,tapBodyToCollapse: true,hasIcon: false,),header: Container(color: Colors.indigoAccent,child: Padding(padding: const EdgeInsets.all(10.0),child: Row(children: [//展开和收起的widgetExpandableIcon(theme: const ExpandableThemeData(expandIcon: Icons.arrow_right,collapseIcon: Icons.arrow_drop_down,iconColor: Colors.white,iconSize: 28.0,iconRotationAngle: math.pi / 2,iconPadding: EdgeInsets.only(right: 5),hasIcon: false,),),Expanded(child: Text("列表数据",style: Theme.of(context).textTheme.bodyText1!.copyWith(color: Colors.white),),),],),),),collapsed: Container(),expanded: buildList(),),),),));}
}

截图:

【Flutter】【package】expandable折叠widget插件相关推荐

  1. 掌财社:怎么写BUI折叠菜单插件?案例分析!

    今天小编和大家分享有关于"怎么写BUI折叠菜单插件?"这个问题的解决方法和代码解析!希望对小伙伴们的学习有所帮助! 写一个BUI折叠菜单插件效果预览 控件分析控件结构 一个点击显示 ...

  2. Flutter学习-多子布局Widget

    Flutter学习-多子布局Widget 1. Flex 2. Row组件 2.1 Row组件介绍 2.2 属性解析 2.2.1 mainAxisSize 2.2.2 mainAxisAlignmen ...

  3. 在 Flutter 中使用 TensorFlow Lite 插件实现文字分类

    如果您希望能有一种简单.高效且灵活的方式把 TensorFlow 模型集成到 Flutter 应用里,那请您一定不要错过我们今天介绍的这个全新插件 tflite_flutter.这个插件的开发者是 G ...

  4. 华为鸿蒙小插件,华为鸿蒙系统细节曝光 可添加Widget插件

    在上周,华为鸿蒙系统被曝在华为Mate 30系列手机上开启测试,并对该操作系统进行改进,不过测试的结果究竟如何呢?直到7月9日,一位不愿透露姓名的内测人员向外媒huaweicentral透露了鸿蒙系统 ...

  5. Flutter学习-单子布局Widget

    Flutter学习-单子布局Widget 1. 概述 2. Align 2.1 Align的对齐方式 2.2 Align的区域大小控制 2. Center 3. Padding 4. Containe ...

  6. Flutter开发:折叠效果对应的组件使用

    前言 在Flutter开发中,熟练使用各种组件是必备技能,尤其是实际开发需求是错综复杂的,各种奇葩需求,必须要对常用的组件使用要很熟悉才行,那么本文就来分享一个在Flutter开发中比较常用的效果,表 ...

  7. flutter引入高德地图_玩玩Flutter Web —— 实现高德地图插件

    Red Deer 1.啰嗦几句 去年写了一个功能简单的高德地图插件给flutter_deer使用,当时支持了Android与iOS两端.前一阵子有一个issue问是否会支持Flutter Web,当时 ...

  8. 【Flutter】自定义折叠组件

    一.基础组件 import 'package:flutter/material.dart';const Duration _kExpand = Duration(milliseconds: 200); ...

  9. Flutter NestedScrollView 滑动折叠头部下拉刷新效果

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力 Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日 ...

  10. 解决:安装Widget插件提醒已安装却不见界面

    No Launcher activity found!The launch will only sync the application package on the device! 已经安装成功,因 ...

最新文章

  1. 解题报告:luogu P2272 [ZJOI2007]最大半连通子图(tarjan缩点、递推DP、hash、set判重)
  2. 量子计算远没到可收割的时候
  3. RK3288 双屏异显,两屏默认方向不一致
  4. HTTP协议是如何实现“秘密交互”的?
  5. [Golang] 第三方包应该如何安装--在线和离线
  6. 手机uc怎么放大页面_手机网站怎样做可以提高用户体验度?——竹晨网络
  7. 两教授吐槽:如今博士研究生的论文写作水平为何如此堪忧?
  8. 【CS224N笔记】一文详解神经网络来龙去脉
  9. 句柄的本质(整理-收藏) 选择自 feijj2002_ 的 Blog
  10. 匹配数据库 帆软 查询条件_帆软报表学习笔记①——根据参数查询
  11. java软件测试技术栈
  12. 【矢量图】PyEcharts导出图片并矢量化
  13. 为什么程序员喜欢养猫?
  14. 身边已经消失或走在消失路上的可爱小动物
  15. 英语八大句子成分之一 - 状语
  16. c语言输出变量案例,C语言经典例题100例——C语言练习实例41解答(static静态变量的用法)...
  17. 前一阵子闹得沸沸扬扬的IP归属地,到底是怎么实现的?
  18. 潮中有浪,国潮青花瓷魔浪S入手,我只能说很潮够强
  19. android 开发框架 andbase,Android快速开发框架andbase
  20. 母亲从大专到考上985高校全日制博士,成了儿子的“学妹”

热门文章

  1. 炜煌E30 E31微型热敏打印机 STM32 串口驱动
  2. 听见丨三星Bixby中文(普通话)版正式发布 云端服务商Scalyr获2000万美元A轮融资
  3. Java - Object wait() 方法之虚假唤醒spurious wakeup
  4. android图片添加文字,android图片上添加文字
  5. linux双系统默认进入win10,win10 linux 双系统 默认win10启动
  6. linux脚本看日历,Linux查看日历之cal命令
  7. 3D打印机打印中途停止且显示挤出头温度过低
  8. 易基因|文献科普:MeRIP-seq揭示m6A RNA甲基化改变导致亨廷顿病(HD)小鼠海马记忆障碍
  9. redis集群报错(error) CLUSTERDOWN Hash slot not served
  10. Kerberos认证模型(c语言实现)