import 'package:flutter/material.dart'; import '../../../generated/l10n.dart'; import '../../../util/router_util.dart'; import '../../const/base.dart'; class TextInputDialogInnerComponent extends StatefulWidget { String title; String? hintText; String? value; bool Function(BuildContext, String)? valueCheck; TextInputDialogInnerComponent( this.title, { this.hintText, this.value, this.valueCheck, }); @override State createState() { return _TextInputDialogInnerComponent(); } } class _TextInputDialogInnerComponent extends State { late TextEditingController controller; @override void initState() { super.initState(); controller = TextEditingController(text: widget.value); } late S s; @override Widget build(BuildContext context) { var themeData = Theme.of(context); Color cardColor = themeData.cardColor; var mainColor = themeData.primaryColor; var titleFontSize = themeData.textTheme.bodyLarge!.fontSize; s = S.of(context); List list = []; list.add(Container( margin: EdgeInsets.only(bottom: Base.BASE_PADDING), child: Text( widget.title, style: TextStyle( fontWeight: FontWeight.bold, fontSize: titleFontSize, ), ), )); list.add(Container( child: TextField( controller: controller, minLines: 4, maxLines: 4, autofocus: true, decoration: InputDecoration( hintText: widget.hintText, border: OutlineInputBorder(borderSide: BorderSide(width: 1)), ), ), )); list.add(Container( margin: EdgeInsets.only(top: Base.BASE_PADDING), width: double.infinity, child: FilledButton( onPressed: _onConfirm, child: Text(s.Confirm), ), )); var main = Container( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: list, ), ); return main; } void _onConfirm() { var value = controller.text; // if (StringUtil.isBlank(value)) { // BotToast.showText(text: "Input can't be null"); // return; // } if (widget.valueCheck != null) { if (!widget.valueCheck!(context, value)) { return; } } return RouterUtil.back(context, value); } }