ExpandableListTileButton.async constructor

ExpandableListTileButton.async({
  1. Key? key,
  2. required Future<Widget> fetchExpandedContent(),
  3. required Widget title,
  4. Widget? loadingWidget,
  5. Widget? errorWidget,
  6. Widget? subtitle,
  7. Color? headerBackgroundColor,
  8. Color? expandedBodyColor,
  9. Color? trailingIconColor,
  10. double elevation = 1,
  11. Widget? leading,
  12. EdgeInsetsGeometry? margin,
  13. double expandedBottomMargin = 16.0,
  14. IconData trailingExpandedIcon = Icons.expand_less,
  15. IconData trailingCollapsedIcon = Icons.expand_more,
  16. BorderRadius borderRadius = const BorderRadius.all(Radius.circular(10)),
  17. ExpandableController? controller,
  18. Duration animationDuration = const Duration(milliseconds: 300),
  19. bool continuous = true,
})

Implementation

factory ExpandableListTileButton.async({
  Key? key,
  required Future<Widget> Function() fetchExpandedContent,
  required Widget title,
  Widget? loadingWidget,
  Widget? errorWidget,
  Widget? subtitle,
  Color? headerBackgroundColor,
  Color? expandedBodyColor,
  Color? trailingIconColor,
  double elevation = 1,
  Widget? leading,
  EdgeInsetsGeometry? margin,
  double expandedBottomMargin = 16.0,
  IconData trailingExpandedIcon = Icons.expand_less,
  IconData trailingCollapsedIcon = Icons.expand_more,
  BorderRadius borderRadius = const BorderRadius.all(Radius.circular(10)),
  ExpandableController? controller,
  Duration animationDuration = const Duration(milliseconds: 300),
  bool continuous = true,
}) {
  return ExpandableListTileButton.listTile(
    key: key,
    title: title,
    subtitle: subtitle,
    leading: leading,
    headerBackgroundColor: headerBackgroundColor,
    expandedBodyColor: expandedBodyColor,
    trailingIconColor: trailingIconColor,
    elevation: elevation,
    margin: margin,
    expandedBottomMargin: expandedBottomMargin,
    borderRadius: borderRadius,
    trailingExpandedIcon: trailingExpandedIcon,
    trailingCollapsedIcon: trailingCollapsedIcon,
    controller: controller,
    animationDuration: animationDuration,
    continuous: continuous,
    expanded: FutureBuilder<Widget>(
      future: fetchExpandedContent(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Container(
            padding: const EdgeInsets.all(32),
            alignment: Alignment.center,
            child: loadingWidget ?? const CircularProgressIndicator(),
          );
        } else if (snapshot.hasError) {
          return Container(
            padding: const EdgeInsets.all(32),
            alignment: Alignment.center,
            child:
                errorWidget ??
                const Text(
                  "Failed to load content.",
                  style: TextStyle(color: Colors.red),
                ),
          );
        }
        return snapshot.data ?? const SizedBox.shrink();
      },
    ),
  );
}