widgetOverlay function

Widget widgetOverlay({
  1. required dynamic onSelect(
    1. int index,
    2. NsgDropdownMenuItem element
    ),
  2. required List<NsgDropdownMenuItem> widgetList(),
  3. required GlobalKey<State<StatefulWidget>> key,
  4. NsgBaseController? listController,
  5. Widget? child,
})

Implementation

Widget widgetOverlay({
  required Function(int index, NsgDropdownMenuItem element) onSelect,
  required List<NsgDropdownMenuItem> Function() widgetList,
  required GlobalKey key,
  final NsgBaseController? listController,
  Widget? child,
}) {
  List<Widget> list() {
    List<Widget> resultList = [];
    var widgetList2 = widgetList();
    if (widgetList2.isEmpty) {
      resultList.add(Padding(padding: const EdgeInsets.all(10.0), child: Text(tran.no_options_available)));
    } else {
      for (var element in widgetList2) {
        bool hovered = false;
        resultList.add(
          StatefulBuilder(
            builder: (context, setstate) {
              return InkWell(
                onHover: (value) {
                  hovered = value;
                  setstate(() {});
                },
                onTap: () {
                  onSelect(widgetList2.indexOf(element), element);
                },
                child: Container(
                  decoration: BoxDecoration(color: hovered ? nsgtheme.colorPrimary.withAlpha(51) : Colors.transparent),
                  child: element,
                ),
              );
            },
          ),
        );
      }
    }
    return resultList;
  }

  if (child != null) {
    return Container(
      key: key,
      decoration: BoxDecoration(color: nsgtheme.colorSecondary.withAlpha(200), borderRadius: BorderRadius.circular(ControlOptions.instance.borderRadius)),
      padding: const EdgeInsets.all(5),
      child: IntrinsicWidth(child: child),
    );
  } else {
    return Container(
      key: key,
      decoration: BoxDecoration(color: nsgtheme.colorSecondary.withAlpha(200), borderRadius: BorderRadius.circular(ControlOptions.instance.borderRadius)),
      padding: const EdgeInsets.all(5),
      child: IntrinsicWidth(
        child: listController == null
            ? Column(mainAxisSize: MainAxisSize.min, children: list())
            : Column(
                mainAxisSize: MainAxisSize.min,
                children: [
                  listController.obx(
                    (state) => Column(mainAxisSize: MainAxisSize.min, children: list()),
                    onLoading: const Padding(padding: EdgeInsets.all(15.0), child: NsgSimpleProgressBar(disableAnimation: true)),
                  ),
                ],
              ),
      ),
    );
  }
  //.asGlass(tintColor: Colors.black, frosted: false)
}