Flutter ExpansionPanelList 的使用

控件展开和关闭

入口文件

import 'package:flutter/material.dart';
import 'expansion_tile_demo.dart';
main(){
  runApp(MyApp());
}
class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData.dark(),
      home: ExpansionParnelListDemo()
    );
  }
}

方法

import 'package:flutter/material.dart';
class ExpansionParnelListDemo extends StatefulWidget {
  ExpansionParnelListDemo({Key key}) : super(key: key);

  _ExpansionParnelListDemoState createState() => _ExpansionParnelListDemoState();
}

class _ExpansionParnelListDemoState extends State<ExpansionParnelListDemo> {
 
  List<int> mList;
  // 存放状态和索引List
  List<ExpandStateBean> expandStateList;

  _ExpansionParnelListDemoState(){
    mList = new List();
    expandStateList = new List();
    for(int i = 0; i < 10; i ++){
      mList.add(i);
      // 第一个是索引,第二个是否打开;
      expandStateList.add(ExpandStateBean(i,false));
    }
  }

  // 判断用户点击是否打开
  _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 List')),
      // 可滚动的控件
      body: SingleChildScrollView(
        // ExpansionPanelList 必须放在可滚动的控件里面
        child: ExpansionPanelList(
          expansionCallback: (index,bol){
            _setCurrentIndex(index,bol);
          },
          children: mList.map((index){
            return ExpansionPanel(
              // 上下文 是否是打开的
              headerBuilder: (context,isExpanded){
                return ListTile(
                  title: Text('我是标题.$index'),
                );
              },
              body: ListTile(
                title: Text('内容.$index'),
              ),
              // 判断是否打开
              isExpanded: expandStateList[index].isOpen
            );
          }).toList(),
        ),
      ),
    );
  }
}

// 控制打开和关闭的类
class ExpandStateBean{
  var isOpen;
  var index;
  ExpandStateBean(this.index,this.isOpen);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,942评论 0 27
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,934评论 0 10
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,304评论 0 21
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,550评论 1 32
  • #2:2016/09/19 ~ 2016/09/25 热点 Github发布2016年开源报告微信内测小程序Auf...
    leiyou阅读 472评论 0 0