美文网首页
Flutter ExpansionTile

Flutter ExpansionTile

作者: _悟_空 | 来源:发表于2021-09-09 15:22 被阅读0次
expansiontile.gif

可以把ExpansionTile当做ListView的子组件,而展开部分又是ExpansionTile的children子组件。

import 'package:flutter/material.dart';

const List<Object> CITY_ALL = [
  {
    'title': '湖南',
    'district': ['岳麓区', '高新区', '长沙市', '岳阳', '娄底', '浏阳'],
  },
  {
    'title': '动漫',
    'district': ['a', 'b', 'v', 'v', 'f', 'h'],
  },
  {
    'title': '技术',
    'district': ['vue', 'uniapp', 'flutter', 'android', 'ios', 'java', 'rust'],
  },
  {
    'title': '深圳',
    'district': ['南山', '福田', '罗湖', '盐田', '龙岗', '宝安', '龙华'],
  },
];

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("列表展开与收起"),
        ),
        body: Container(
          child: ListView(
            children: _buildList(),
          ),
        ),
      ),
    );
  }

  List<Widget> _buildList() {
    return CITY_ALL.map((item) {
      item as Map;
      return _item(item["title"], item["district"]);
    }).toList();
  }

  Widget _item(String city, List<String> subCities) {
    return ExpansionTile(
      title: Text(
        city,
        style: TextStyle(color: Colors.black54, fontSize: 20),
      ),
      children: subCities.map((subCity) => _buildSub(subCity)).toList(),
    );
  }

  Widget _buildSub(String subCity) {
    //可以设置撑满宽度的盒子 称之为百分百布局
    return FractionallySizedBox(
      //宽度因子 1为百分百撑满
      widthFactor: 1,
      child: Container(
        height: 50,
        margin: EdgeInsets.only(bottom: 1),
        decoration: BoxDecoration(color: Colors.black12),
        child: Text(subCity),
      ),
    );
  }
}

相关文章

网友评论

      本文标题:Flutter ExpansionTile

      本文链接:https://www.haomeiwen.com/subject/jvhiwltx.html