Flutter Tutorials

Flutter app development tutorials


flutter – How to create ExpansionPanelList

main.dart


import 'package:flutter/material.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        theme: ThemeData(primarySwatch: Colors.green),
        home: const MyHomePage()
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final List<MaterialColor> _list = Colors.primaries.toList();
  final List<bool> _expandedList = List.filled(
      Colors.primaries.length,false
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            title: const Text("Flutter - Create ExpansionPanelList")
        ),
        body: bodyContent()
    );
  }

  bodyContent() {
    return SingleChildScrollView(
        child:ExpansionPanelList(
            expansionCallback: (int index, bool isExpanded) {
              setState(() {
                _expandedList[index] = !isExpanded;
              });
            },
            animationDuration: const Duration(microseconds: 600),
            children: _list.map<ExpansionPanel>((MaterialColor item) {
              var itemIndex = _list.indexOf(item);
              return ExpansionPanel(
                  headerBuilder: (BuildContext context, bool isExpanded) {
                    return ListTile(
                        title: Text(
                            "${itemIndex+1}. Color : ${item.shade200.value}"
                        )
                    );
                  },
                  body: ListTile(
                      title: Text("Body ${item.shade200.value}"),
                      tileColor: item.shade200,
                      contentPadding: const EdgeInsets.all(32)
                  ),
                  isExpanded: _expandedList[itemIndex],
                  canTapOnHeader: true
              );
            }).toList()
        )
    );
  }
}

More flutter tutorials



About Me

Flutter Developer

Design a site like this with WordPress.com
Get started