import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_flow_chart/flutter_flow_chart.dart'; import 'package:oc_front/main.dart'; import 'package:oc_front/models/response.dart'; const List> _empty = []; // ignore: must_be_immutable class ShallowItemRowWidget extends StatefulWidget { bool readOnly = false; double contextWidth = 0; Color? color; ShallowData item; IconData? icon; bool low = false; bool show = false; List badges = []; void Function(String?)? delete; void Function(String?)? edit; List> keys = []; ShallowItemRowWidget ({ super.key, this.low = false, this.icon, this.delete, this.edit, this.color, this.badges = const [], required this.contextWidth, this.readOnly = false, required this.item, this.keys = _empty }); @override ShallowItemRowWidgetState createState() => ShallowItemRowWidgetState(); } class ShallowItemRowWidgetState extends State { @override Widget build(BuildContext context) { Widget w = Tooltip( message: widget.item.getName(), child: MouseRegion( onHover: (e) => setState(() { widget.show = true; }), onExit: (e) => setState(() { widget.show = false; }), child: Container( height: widget.contextWidth, width: widget.contextWidth, padding: const EdgeInsets.all(10), margin: const EdgeInsets.all(10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: widget.color ?? Colors.white, boxShadow: const [BoxShadow(color: Colors.grey, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 1))]), child: Stack( children: [ widget.show ? Positioned( left: 0, top: 0, child: Row( children: [ Padding( padding: const EdgeInsets.only(right: 5), child: widget.edit == null ? Container() : InkWell( mouseCursor: SystemMouseCursors.click, onTap: () => widget.edit!(widget.item.getID() + "~" + widget.item.getName()), child: const Icon(Icons.edit, color: Colors.grey,))), Padding( padding: const EdgeInsets.only(right: 5), child: widget.delete == null ? Container() : InkWell( mouseCursor: SystemMouseCursors.click, onTap: () => widget.delete!(widget.item.getID()), child: const Icon(Icons.delete, color: Colors.grey,))), ] )) : Container(), Positioned( right: 0, top: 0, child: Row( children: widget.badges )), Column( children: [ widget.low || widget.icon == null ? Container( padding: const EdgeInsets.only(left: 10),) : Container( padding: const EdgeInsets.all(10), constraints: BoxConstraints(maxWidth: widget.contextWidth, minWidth: widget.contextWidth), child: Icon( widget.icon!, size: widget.contextWidth / 1.9, color: const Color(0xFFF67C0B9),)), Container( child: Padding(padding: widget.contextWidth != getMainWidth(context) ? const EdgeInsets.symmetric(horizontal: 10) : const EdgeInsets.symmetric(horizontal: 20), child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Row( children: [ Expanded( child: Center( child: Text(widget.item.getName().toUpperCase(), style: const TextStyle(fontSize: 15, overflow: TextOverflow.ellipsis, fontWeight: FontWeight.w600, color: Colors.grey)), )) ]), ],) ) ), ]) ])))); return widget.readOnly || widget.low ? w : InkWell( mouseCursor: SystemMouseCursors.click, onTap: () { }, child: w ); } } class ShallowItemFlowDataRowWidget extends StatefulWidget { bool readOnly = false; double contextWidth = 0; Color? color; FlowData item; IconData? icon; bool low = false; bool show = false; List badges = []; List bottomBadges = []; void Function(String?)? delete; void Function(String?)? edit; List> keys = []; ShallowItemFlowDataRowWidget ({ super.key, this.low = false, this.icon, this.delete, this.bottomBadges = const [], this.edit, this.color, this.badges = const [], required this.contextWidth, this.readOnly = false, required this.item, this.keys = _empty }); @override ShallowItemFlowDataRowWidgetState createState() => ShallowItemFlowDataRowWidgetState(); } class ShallowItemFlowDataRowWidgetState extends State { @override Widget build(BuildContext context) { Widget w = Tooltip( message: widget.item.getName(), child: MouseRegion( onHover: (e) => setState(() { widget.show = true; }), onExit: (e) => setState(() { widget.show = false; }), child: Container( height: widget.contextWidth, width: widget.contextWidth, padding: const EdgeInsets.all(10), margin: const EdgeInsets.all(10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: widget.color ?? Colors.white, boxShadow: const [BoxShadow(color: Colors.grey, spreadRadius: 1, blurRadius: 1, offset: Offset(0, 1))]), child: Stack( children: [ widget.show ? Positioned( left: 0, top: 0, child: Row( children: [ Padding( padding: const EdgeInsets.only(right: 5), child: widget.edit == null ? Container() : InkWell( mouseCursor: SystemMouseCursors.click, onTap: () => widget.edit!(widget.item.getID() + "~" + widget.item.getName()), child: const Icon(Icons.edit, color: Colors.grey,))), Padding( padding: const EdgeInsets.only(right: 5), child: widget.delete == null ? Container() : InkWell( mouseCursor: SystemMouseCursors.click, onTap: () => widget.delete!(widget.item.getID()), child: const Icon(Icons.delete, color: Colors.grey,))), ] )) : Container(), Positioned( right: 0, top: 0, child: Row( children: widget.badges )), Positioned( left: 0, bottom: 0, child: Row( children: widget.bottomBadges )), Column( children: [ widget.low || widget.icon == null ? Container( padding: const EdgeInsets.only(left: 10),) : Container( padding: const EdgeInsets.all(10), constraints: BoxConstraints(maxWidth: widget.contextWidth, minWidth: widget.contextWidth), child: Icon( widget.icon!, size: widget.contextWidth / 1.9, color: const Color(0xFFF67C0B9),)), Container( child: Padding(padding: widget.contextWidth != getMainWidth(context) ? const EdgeInsets.symmetric(horizontal: 10) : const EdgeInsets.symmetric(horizontal: 20), child: Column(crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Row( children: [ Expanded( child: Center( child: Text(widget.item.getName().toUpperCase(), style: const TextStyle(fontSize: 15, overflow: TextOverflow.ellipsis, fontWeight: FontWeight.w600, color: Colors.grey)), )) ]), ],) ) ), ]) ])))); return widget.readOnly || widget.low ? w : InkWell( mouseCursor: SystemMouseCursors.click, onTap: () { }, child: w ); } }