Flutter可扩展折叠面板插件expansion_tile_widget的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter可扩展折叠面板插件expansion_tile_widget的使用

CustomExpansionTileWidget 是一个经过编辑的折叠面板组件,允许你自定义头部和展开后的列表。

示例

CustomExpansionTileWidget(
  headerTitle: "概述", // 主标题
  headerDecoration: BoxDecoration(
    borderRadius: BorderRadius.all(Radius.circular(12)), // 圆角
    border: Border.all(color: Colors.blueAccent), // 边框颜色
    color: Colors.yellow, // 背景颜色
  ),
  children: [
    Container(
      height: 50,
      decoration: BoxDecoration(
        border: Border.all(color: Colors.black), // 边框颜色
        color: Colors.green, // 背景颜色
      ),
      child: const Center(
        child: Text("列表1"), // 文本内容
      ),
    ),
    Container(
      height: 50,
      decoration: BoxDecoration(
        border: Border.all(color: Colors.black), // 边框颜色
        color: Colors.red, // 背景颜色
      ),
      child: const Center(
        child: Text("列表2"), // 文本内容
      ),
    ),
    Container(
      height: 50,
      decoration: BoxDecoration(
        border: Border.all(color: Colors.black), // 边框颜色
        color: Colors.blueAccent, // 背景颜色
      ),
      child: const Center(
        child: Text("列表3"), // 文本内容
      ),
    ),
    Container(
      height: 50,
      decoration: BoxDecoration(
        border: Border.all(color: Colors.black), // 边框颜色
        color: Colors.orangeAccent, // 背景颜色
      ),
      child: const Center(
        child: Text("列表4"), // 文本内容
      ),
    ),
  ],
)

参数

属性名称 数据类型 描述
headerLeading Widget? 在标题前显示的部件
headerTitle String 列表的主要标题
headerDecoration Decoration? 用于装饰头部的部件
headerPadding EdgeInsets? 设置头部的内边距
headerHeight double? 头部的高度,默认为50像素
headerTextStyle TextStyle? 自定义头部标题的样式
onExpansionChanged ValueChanged 当展开或收起时调用的函数
children List 当面板展开时显示的子部件
headerTileColor Color? 头部背景颜色
headerTrailing Widget? 在标题后显示的部件
isHeaderTrailingAnimation bool 是否为尾部添加动画,默认为true
initiallyExpanded bool 面板是否初始展开,默认为false
animationDuration Duration? 动画持续时间,默认为200毫秒

完整示例代码

import 'package:expansion_tile_widget/expansion_tile_widget.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Padding(
        padding: const EdgeInsets.symmetric(vertical: 100, horizontal: 50),
        child: CustomExpansionTileWidget(
          headerTitle: "概述",
          headerDecoration: BoxDecoration(
            borderRadius: BorderRadius.all(Radius.circular(12)),
            border: Border.all(color: Colors.blueAccent),
            color: Colors.yellow,
          ),
          children: [
            Container(
              height: 50,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.black),
                color: Colors.green,
              ),
              child: const Center(
                child: Text("列表1"),
              ),
            ),
            Container(
              height: 50,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.black),
                color: Colors.red,
              ),
              child: const Center(
                child: Text("列表2"),
              ),
            ),
            Container(
              height: 50,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.black),
                color: Colors.blueAccent,
              ),
              child: const Center(
                child: Text("列表3"),
              ),
            ),
            Container(
              height: 50,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.black),
                color: Colors.orangeAccent,
              ),
              child: const Center(
                child: Text("列表4"),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter可扩展折叠面板插件expansion_tile_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter可扩展折叠面板插件expansion_tile_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用expansion_tile_widget插件来创建一个可扩展折叠面板的示例代码。请注意,由于expansion_tile_widget并非一个官方或广泛认知的Flutter插件,这里我将假设你想要使用Flutter的官方ExpansionTile小部件,因为它提供了类似的功能。如果你确实在寻找一个第三方插件,请确保你已经按照其文档进行了安装和配置。

以下是使用Flutter的ExpansionTile创建一个可扩展折叠面板的示例:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ExpansionTile Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ExpansionTile Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: ListView(
          children: <Widget>[
            ExpansionTile(
              title: Text('Section 1'),
              leading: Icon(Icons.folder),
              children: <Widget>[
                ListTile(
                  title: Text('Item 1.1'),
                ),
                ListTile(
                  title: Text('Item 1.2'),
                ),
                ListTile(
                  title: Text('Item 1.3'),
                ),
              ],
            ),
            ExpansionTile(
              title: Text('Section 2'),
              leading: Icon(Icons.folder_open),
              children: <Widget>[
                ListTile(
                  title: Text('Item 2.1'),
                ),
                ListTile(
                  title: Text('Item 2.2'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个MyApp类,它是应用程序的入口点。
  2. MyApp类包含一个MaterialApp,它设置了应用程序的主题和主页。
  3. 主页是一个MyHomePage类,它包含一个Scaffold,其中有一个AppBar和一个填充了内容的body
  4. body部分使用ListView来垂直排列多个ExpansionTile
  5. 每个ExpansionTile都有一个标题、一个前导图标(leading icon),以及一个包含子项的列表。

这个示例展示了如何使用Flutter的内置ExpansionTile来创建一个简单的可扩展折叠面板。如果你使用的是第三方插件,如expansion_tile_widget(如果它存在的话),你需要根据该插件的文档进行相应的安装和配置,但基本的用法和概念应该是相似的。

回到顶部