import 'package:flutter/material.dart'; import 'package:novyronst/common/const/const_color.dart'; import 'package:novyronst/common/help/app_nav.dart'; import 'extend_widget.dart'; class NovyText extends StatelessWidget { const NovyText( this.text, { super.key, this.color = Colors.white, this.fontSize = 14, this.shadow, this.decoration, this.decorationColor, this.decorationThickness, this.textAlign, this.fontWeight, this.maxLines, this.lineHeight, this.letterSpacing, this.overflow = TextOverflow.ellipsis, this.softWrap, this.fontFamily, }); final String text; final Color? color; final double? fontSize; final TextDecoration? decoration; final Color? decorationColor; final double? decorationThickness; final TextAlign? textAlign; final FontWeight? fontWeight; final int? maxLines; final Shadow? shadow; final double? lineHeight; final double? letterSpacing; final TextOverflow? overflow; final bool? softWrap; final String? fontFamily; @override Widget build(BuildContext context) { final FontWeight resolvedWeight = fontWeight ?? FontWeight.normal; return Text(text, style: TextStyle( fontSize: fontSize, fontWeight: resolvedWeight, decoration: decoration, fontFamily: fontFamily ?? 'Inter', color: color, shadows: shadow == null ? null : [shadow!], decorationColor: decorationColor, decorationThickness: decorationThickness ?? 1, height: lineHeight, letterSpacing: letterSpacing, ), maxLines: maxLines, overflow: overflow, softWrap: softWrap, textAlign: textAlign, ); } } class ComConfirmWidget extends StatelessWidget { final String? title; final String? content; final Widget? contentWidget; final String? cancelStr, confirmStr; final double? height; final Function? onConfirmed; final Function? onCanceled; final bool? showCancel; final bool? clickHideAlert; const ComConfirmWidget({ super.key, this.title, this.content, this.contentWidget, this.cancelStr, this.confirmStr, this.height, this.onConfirmed, this.onCanceled, this.showCancel = true, this.clickHideAlert = true, }); @override Widget build(BuildContext context) { return Container( height: height ?? 160, margin: EdgeInsets.only(left: 25, right: 25), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), ), child: Column( // mainAxisSize: MainAxisSize.min, children: [ const SizedBox(height: 15,), title==null ? SizedBox() : Padding(padding: EdgeInsets.only(left:15, right: 15, bottom: 5), child: NovyText(title!, fontSize: 16, color: Colors.black, ) ), const SizedBox(height: 10), Expanded( child: Padding(padding: EdgeInsets.only(left:14, right: 14), child: contentWidget ?? Center( child: NovyText(content!, fontSize: 15, color: ConstColor.themeColor, maxLines: 3), ), ) ), const SizedBox(height: 10), Divider(thickness: 0.6, height: 1), SizedBox( height: 44, child: IntrinsicHeight( child: showCancel! ? Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ TextButton(onPressed: () { Navigator.pop(context); onCanceled?.call(); }, child: Center( child: NovyText(cancelStr ?? 'Cancel', color: Colors.grey, fontSize: 14)) ), VerticalDivider(width: 5, thickness: 0.6,), TextButton(onPressed: () { if (clickHideAlert == true) { Navigator.pop(context); } onConfirmed?.call(); }, child: Center( child:NovyText(confirmStr ?? 'Confirm', color: ConstColor.themeColor, fontSize: 14)) ), ], ) : TextButton(onPressed: () { Navigator.pop(context); onConfirmed?.call(); }, child: Center( child:NovyText(confirmStr ?? 'Confirm', color: ConstColor.themeColor, fontSize: 14,)) ), ) ) ], ), ); } } class ComSheetWidget extends StatelessWidget { final Function(int)? onSelected; final String? title; final List items; final TextAlign? textAlign; const ComSheetWidget({super.key, this.onSelected, this.title, this.textAlign = TextAlign.left, required this.items, }); @override Widget build(BuildContext context) { return SafeArea(child: _mainView()); } _mainView() { return Container( padding: EdgeInsets.only(top: 10), height: items.length>5 ? 360 : 40+items.length*47 + 50, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20) ), ), child: _ifElseWidget(), ); } _ifElseWidget() { if (title != null) { return Column( children: [ const SizedBox(height: 6), Text('$title', style: TextStyle( color: Colors.black, fontSize: 16 )), const SizedBox(height: 5), const Divider(height: 8, thickness: 0.6,), // Divider(), const SizedBox(height: 5), Expanded(child: ListView.separated(itemBuilder: (context, index) { return _itemCreateer(index); }, separatorBuilder: (context, index) { return Divider( indent: 15, endIndent: 15, thickness: 0.6,); }, itemCount: items.length)) ], ); } else { return ListView.separated(itemBuilder: (context, index) { return _itemCreateer(index); }, separatorBuilder: (context, index) { return Divider(indent: 15, endIndent: 15, thickness: 0.6,); }, itemCount: items.length); } } _itemCreateer(int index) { return SizedBox( height: 47, child: Center( child: Text(items[index], style: TextStyle( fontSize: 15, color: Colors.black, )), ).addInkWell( onTap: () { AppNav.back(); onSelected?.call(index); }) ); } }