import 'package:flutter/material.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class CustomExpansionTile extends StatefulWidget { final String title; final List? children; final bool initiallyExpanded; final bool? isExpanded; // New parameter to control expansion final ValueChanged? onExpansionChanged; // Callback for expansion change CustomExpansionTile({ required this.title, this.children, this.initiallyExpanded = false, this.isExpanded, // Allow external control over expansion this.onExpansionChanged, // Notify when expansion changes }); @override CustomExpansionTileState createState() => CustomExpansionTileState(); } class CustomExpansionTileState extends State { bool _isExpanded = false; bool _isChecked = false; @override void initState() { super.initState(); _isExpanded = widget.initiallyExpanded; } @override void didUpdateWidget(CustomExpansionTile oldWidget) { super.didUpdateWidget(oldWidget); if (widget.isExpanded != null && widget.isExpanded != _isExpanded) { setState(() { _isExpanded = widget.isExpanded!; }); } } @override Widget build(BuildContext context) { return Column( children: [ InkWell( onTap: () { setState(() { _isExpanded = !_isExpanded; widget.onExpansionChanged?.call(_isExpanded); }); }, child: Row( children: [ // Customizing the Checkbox Checkbox( value: _isChecked, onChanged: (bool? value) { setState(() { _isChecked = value ?? false; }); }, side: WidgetStateBorderSide.resolveWith((states) { return const BorderSide(color: ColorsManager.grayBorder); }), fillColor: WidgetStateProperty.resolveWith((states) { if (states.contains(WidgetState.selected)) { return ColorsManager.grayBorder; } else { return ColorsManager.checkBoxFillColor; } }), checkColor: ColorsManager.whiteColors, ), if (widget.children != null && widget.children!.isNotEmpty) Icon( _isExpanded ? Icons.keyboard_arrow_down : Icons.keyboard_arrow_right, color: Colors.grey, size: 16.0, // Reduced icon size ), // Title Text Expanded( child: Text( widget.title, style: TextStyle( color: _isExpanded ? ColorsManager.blackColor : ColorsManager.lightGrayColor, fontWeight: FontWeight.w400, ), ), ), ], ), ), if (_isExpanded && widget.children != null && widget.children!.isNotEmpty) Padding( padding: const EdgeInsets.only(left: 48.0), // Indent the children child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: widget.children!, ), ), ], ); } }