import 'package:flutter/material.dart'; import 'package:oc_front/main.dart'; import 'package:oc_front/pages/shared.dart'; class ShallowTextInputWidget extends StatefulWidget { double? width; CollaborativeAreaType type = CollaborativeAreaType.workspace; Future Function(Map)? load; Future Function(String)? loadStr; Future Function(String)? remove; bool Function(String?)? canLoad; bool Function(String?)? canRemove; void Function(String?)? change; String? current; String? compare; bool readOnly; IconData? iconLoad; IconData? iconRemove; MainAxisAlignment alignment = MainAxisAlignment.start; String? hint; String? tooltipLoad; String? tooltipRemove; Color? filled; Color? hintColor; Color? color; List forms = []; String? attr; ShallowTextInputWidget ({ Key? key, this.width, this.current, this.attr, this.readOnly = false, this.alignment = MainAxisAlignment.start, this.iconLoad, this.iconRemove, this.hint, this.forms = const [], this.loadStr, this.tooltipLoad = "", this.tooltipRemove = "", this.filled, this.hintColor, this.color, required this.type, this.canLoad, this.canRemove, this.load, this.remove, this.change }): super(key: key); @override ShallowTextInputWidgetState createState() => ShallowTextInputWidgetState(); Map serialize() { Map map = { "name" : current }; for (var form in forms) { if (form.attr == null) { continue; } map[form.attr!] = form.current; } return map; } bool validate() { return canLoad == null ? true : canLoad!(current); } } class ShallowTextInputWidgetState extends State { bool validForms() { for (var form in widget.forms) { if (!form.validate()) { return false; } } return true; } @override Widget build(BuildContext context) { var t = widget.type == CollaborativeAreaType.workspace ? "workspace" : (widget.type == CollaborativeAreaType.workflow ? "workflow" : "peer"); return Row( mainAxisAlignment: widget.alignment, children: [ Tooltip( message: widget.hint ?? "current $t", child: Theme( data: Theme.of(context).copyWith( canvasColor: midColor, ), child: Container( height: 50, width: (widget.width ?? getMainWidth(context)) - (widget.load == null ? 0 : 50) - (widget.remove == null ? 0 : 50), decoration: const BoxDecoration( color: Colors.white ), child: TextFormField( enabled: !widget.readOnly, onChanged: (value) { setState(() { widget.current = value; if (widget.change != null) { widget.change!(value); } }); }, initialValue: widget.current, style: TextStyle(color: widget.color ?? Colors.black, fontSize: 15), decoration: InputDecoration( filled: true, border: InputBorder.none, focusedBorder: InputBorder.none, disabledBorder: InputBorder.none, enabledBorder: InputBorder.none, fillColor: widget.filled ?? Colors.white, hintText: widget.hint ?? "enter $t ${widget.attr ?? "name"}...", contentPadding: const EdgeInsets.only(left: 30, right: 30, top: 18, bottom: 18), hintStyle: TextStyle(color: widget.hintColor ??const Color.fromARGB(255, 85, 44, 44), fontSize: 14)), ), ))), widget.load == null && widget.loadStr == null ? Container() : Tooltip( message: widget.tooltipLoad ?? "add $t", child:InkWell( mouseCursor: SystemMouseCursors.click, onTap: () async { if (widget.canLoad == null || !widget.canLoad!(widget.current) || !validForms() || (widget.load == null && widget.loadStr == null) || widget.current == null) { return; } if (widget.loadStr != null) { await widget.loadStr!(widget.current!); } else { await widget.load!(widget.serialize()); } setState(() { }); }, child: Container( width: 50,height: 50, color: Colors.black, child: Icon( widget.iconLoad ?? Icons.add, color: widget.current == null || !validForms() || widget.canLoad == null || !widget.canLoad!(widget.current) ? Colors.grey : Colors.white) ) ) ), widget.remove == null ? Container() : Tooltip( message: widget.tooltipRemove ?? "refresh entry", child: InkWell( mouseCursor: SystemMouseCursors.click, onTap: () async { if (widget.canRemove == null || !widget.canRemove!(widget.current) || widget.remove == null || widget.current == null) { return; } await widget.remove!(widget.current!); setState(() { }); }, child: Container( width: 50,height: 50, decoration: BoxDecoration(color: Colors.black, border: Border(left: BorderSide(color: midColor))), child: Icon(widget.iconRemove ?? Icons.delete, color: widget.current == null || widget.canRemove == null || !widget.canRemove!(widget.current) ? Colors.grey : Colors.white)) ) ), ]); } }