import 'package:refilc/models/settings.dart'; import 'package:refilc/theme/colors/colors.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class SplittedPanel extends StatelessWidget { const SplittedPanel({ super.key, this.children, this.title, this.padding, this.cardPadding, this.hasShadow = true, this.isSeparated = false, this.spacing = 6.0, this.isTransparent = false, this.hasBorder = false, }); final List? children; final Widget? title; final EdgeInsetsGeometry? padding; final EdgeInsetsGeometry? cardPadding; final bool hasShadow; final bool isSeparated; final double spacing; final bool isTransparent; final bool hasBorder; @override Widget build(BuildContext context) { double sp = spacing; if (isSeparated && spacing == 6.0) { sp = 9.0; } List childrenInMyBasement = []; if (children != null) { var i = 0; for (var widget in children!) { var w = Container( width: double.infinity, decoration: BoxDecoration( color: isTransparent ? Colors.transparent : Theme.of(context).colorScheme.surface, borderRadius: BorderRadius.vertical( top: Radius.circular(i == 0 ? 16.0 : 8.0), bottom: Radius.circular(children!.length == i + 1 ? 16.0 : 8.0), ), border: hasBorder ? Border.all( color: Theme.of(context) .colorScheme .secondary .withOpacity(.25), width: 1.0) : null, ), margin: EdgeInsets.only(top: i == 0 ? 0.0 : sp), padding: cardPadding ?? EdgeInsets.zero, child: widget, ); childrenInMyBasement.add(w); i++; } } return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // title if (title != null) SplittedPanelTitle( title: title!, leftPadding: (padding?.horizontal ?? 48.0) / 2, ), // body if (children != null) Container( width: double.infinity, decoration: BoxDecoration( color: Colors.transparent, boxShadow: [ if (hasShadow && Provider.of(context, listen: false) .shadowEffect) BoxShadow( offset: const Offset(0, 21), blurRadius: 23.0, color: Theme.of(context).shadowColor, ) ], ), padding: padding ?? const EdgeInsets.only(bottom: 20.0, left: 24.0, right: 24.0), child: Column(children: childrenInMyBasement), ), ], ); } } class SplittedPanelTitle extends StatelessWidget { const SplittedPanelTitle( {super.key, required this.title, this.leftPadding = 24.0}); final Widget title; final double leftPadding; @override Widget build(BuildContext context) { return Padding( padding: EdgeInsets.only(left: 14.0 + leftPadding, bottom: 8.0), child: DefaultTextStyle( style: Theme.of(context).textTheme.titleMedium!.copyWith( fontWeight: FontWeight.w600, color: AppColors.of(context).text.withOpacity(0.65)), child: title, ), ); } }