Flutter进阶实战 14-20 展开闭合列表ExpansionPanelList案例

前言:

       前面介绍的只是一个单个的展开闭合组件,你当然可以把这个组件作为List元素,组成一个数组,形成列表。不过Flutter也很贴心的为提供了一个ExpansionPanelList Widget,它可以实现展开闭合的列表功能。需要注意的是这个列表必须放在可滑动组件中使用,否则会报错。

实现效果:

知识点:

一、ExpansionPanelList 常用属性

  • expansionCallback:点击和交互的回掉事件,有两个参数,第一个是触发动作的索引,第二个是布尔类型的触发值。
  • children:列表的子元素,里边多是一个List数组。

二、ExpandStateBean 自定义类

为了方便管理制作了一个ExpandStateBean类,里边就是两个状态,一个是是否展开isOpen,另一个索引值。代码如下:

class ExpandStateBean{
  var isOpen;
  var index;
  ExpandStateBean(this.index,this.isOpen);
}

实现代码(expansion_panel_list.dart):

import 'package:flutter/material.dart';

class ExpansionPanelListDemo extends StatefulWidget {
  _ExpansionPanelListDemoState createState() => _ExpansionPanelListDemoState();
}

class _ExpansionPanelListDemoState extends State<ExpansionPanelListDemo> {
  List<int> mList;   //组成一个int类型数组,用来控制索引 
  List<ExpandStateBean> expandStateList;  //开展开的状态列表,ExpandStateBean是自定义的类
  
  //构造方法,调用这个类的时候自动执行
  _ExpansionPanelListDemoState(){
      mList=new List();
      expandStateList=new List();
      //遍历两个List进行赋值
      for(int i=0;i<19;i++){
        mList.add(i);
        expandStateList.add(ExpandStateBean(i,false));//item初始状态为闭着的
      }
  }

  //修改展开与闭合的内部方法
  _setCurrentIndex(int index,isExpand){
    setState(() {
       //遍历可展开状态列表
       expandStateList.forEach((item){
          if(item.index==index){
            //取反,经典取反方法
            item.isOpen=!isExpand;
          }
       });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("expansion panel list"),
        ),
        //加入可滚动组件(ExpansionPanelList必须使用可滚动的组件)
        body: SingleChildScrollView(
            child: ExpansionPanelList(
               //交互回调属性,里面是个匿名函数
               expansionCallback: (index,bol){
                 //调用内部方法
                 _setCurrentIndex(index, bol);
               },
               //进行map操作,然后用toList再次组成List
               children: mList.map((index){
                  //返回一个组成的ExpansionPanel
                  return ExpansionPanel(
                    headerBuilder: (context,isExpanded){  
                      return ListTile(
                        title: Text('This is No.$index'),
                      );
                    },
                    body: ListTile(
                      title: Text('expansion no.$index'),
                    ),
                    isExpanded: expandStateList[index].isOpen
                  );
               }).toList(),
            ),
        ),
    );
  }
}

//list中item状态自定义类
class ExpandStateBean{
  var isOpen;   //item是否打开
  var index;    //item中的索引
  ExpandStateBean(this.index,this.isOpen);
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter 是一种跨平台的移动应用开发框架,能够快速构建高效、美观的应用程序。下面我将介绍从入门到的学习路径,并给出实战携程网应用程序的资料。 1. 入门段: - 学习Dart语言基础:Dart 是 Flutter 的编程语言,掌握其基本语法和特性非常重要。 - 安装Flutter SDK:根据官方指南下载并配置好Flutter开发环境。 - 理解Flutter基础概念:学习Flutter的基本概念,如Widget、State、BuildContext等。 - 创建第一个Flutter应用:通过编写一个简单的计数器应用程序加深对Flutter开发流程的理解。 2. 段: - 深入学习Widget:掌握Flutter中的各种Widget,了解它们的层次结构以及常用属性和方法。 - 路由和导航组件:学习如何实现应用程序之间的页面跳转和导航功能。 - 网络请求与数据处理:学习如何使用Flutter的网络请求库,并结合携程网的API接口获取数据。 - 状态管理:掌握不同的状态管理方案,例如Provider、GetX等,以便更好地管理应用程序的复杂状态。 - 自定义控件和动画:学习如何自定义Flutter控件,以及如何使用动画使应用程序更加生动和流畅。 实战携程网app资料: - Flutter官方文档:提供了全面的Flutter开发指南和示例代码,可在Flutter官方网站找到。 - Github上的开源项目:可以在Github上搜索到一些开源的Flutter项目,其中可能包含实现携程网app功能的示例代码。 - 携程网提供的开放API:携程网提供了一些开放接口供开发者使用,可通过API文档了解接口的使用方法,然后在Flutter行集成。 通过系统学习和实践,从入门到,您将能够掌握Flutter开发技术,并有能力构建出类似携程网的应用程序。加油!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值