dropDown method

Widget dropDown(
  1. BuildContext context
)

Button For Drop Data

Implementation

Widget dropDown(BuildContext context) {
  ThemeData theme = Theme.of(context);
  TextTheme textTheme = theme.textTheme;
  ColorScheme colorScheme = theme.colorScheme;
  return Theme(
    data: Theme.of(context).copyWith(
      cardColor: Colors.transparent,
      canvasColor: Colors.transparent,
      shadowColor: Colors.transparent,
      splashColor: Colors.transparent,
      // hoverColor: Colors.transparent,
      hoverColor: colorScheme.onPrimary,
    ),
    child: Row(
      mainAxisSize: MainAxisSize.min,
      children: [

        PopupMenuButton(
          enabled: true,
          tooltip: "", // Disable Text Info Popup
          offset: const Offset(0.02, 40.0),// Position X/Y
          elevation: 16,
          onSelected: (dynamic index) {
            if(kDebugMode){print('DropDownData => index is $index');}
            returnSelection(index);
          },
          onCanceled: () {if(kDebugMode){print('DropDownData => cancelled');}},
          color: colorScheme.onSecondaryContainer,
          shape: RoundedRectangleBorder(
            side: BorderSide(width: 1.0, color: colorScheme.primary),
            borderRadius: BorderRadius.circular(12),
          ),
          child:
          widget.childButton ?? (widget.title != "" ?
          DynamicButton(
            enabled: false,
            title: '${widget.title}${widget.value}',
            end: widget.viewNumber ? Text(searchNumber.toString(),style: TextStyle(fontSize: 11, color: colorScheme.onSurfaceVariant) ) : null,
            icon: Icon(Icons.arrow_drop_down, color: colorScheme.onSurfaceVariant, size: 20,), // colorScheme.onInverseSurface,
          )
              :
          Container(
            alignment: Alignment.center,
            height: 45,
            width: 45,
            margin: const EdgeInsets.all(20),
            decoration: const BoxDecoration(boxShadow: [
              BoxShadow(blurRadius: 4, color: Colors.black45)
            ], color: Colors.white, shape: BoxShape.circle),
            child: const Icon(Icons.more_vert, color: Colors.grey,),
          )),

          itemBuilder: (BuildContext context) => <PopupMenuEntry>[
            //for(DataDropDown thisData in  returnList())
            for(int i = 0; i< listCurrent.length;i++)
              PopupMenuItem(
                value: i,
                child: StatefulBuilder(
                    builder: (BuildContext context, StateSetter setState) {
                      return Container(
                        alignment: Alignment.center,
                        margin: const EdgeInsets.symmetric(vertical: 2),
                        color: Colors.transparent,
                        child: Container(
                          padding: const EdgeInsets.all(8.0),
                          width: 500,
                          decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(5),
                            color: widget.uuidValues != null &&
                                widget.uuidValues!.contains(listCurrent[i].id) ?
                            colorScheme.primaryContainer
                                : widget.uuidValues != null &&
                                widget.uuidValues!.isNotEmpty && listCurrent[i].name == ""  ?
                            colorScheme.surface
                                : widget.uuidValues != null &&
                                widget.uuidValues!.isEmpty && listCurrent[i].name == ""  ?
                            colorScheme.primaryContainer

                                : widget.uuidValue != "" && widget.uuidValue == listCurrent[i].id
                                ? colorScheme.primaryContainer
                                : widget.uuidValue != "" && widget.uuidValue != listCurrent[i].id
                                ? colorScheme.surface
                                : widget.value == listCurrent[i].name
                                ? colorScheme.primaryContainer
                                : colorScheme.surface,
                          ),
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [

                              if(listCurrent[i].icon != null) listCurrent[i].icon!,
                              if(listCurrent[i].icon == null)
                              //Icon(Icons.type_specimen_outlined, color: colorScheme.onInverseSurface, size: 20,),
                                Icon(Icons.ads_click, color: colorScheme.onInverseSurface, size: 20,),

                              Expanded(
                                child: Column(
                                  children: [

                                    if(listCurrent[i].name != "")
                                      Align(
                                        alignment: Alignment.centerLeft,
                                        child: Padding(padding: const EdgeInsets.only(left: 10),
                                          child: RichText( // SelectableText.rich(
                                            textAlign: TextAlign.left,
                                            text: TextSpan(
                                              children: <TextSpan>[
                                                TextSpan(text: listCurrent[i].name.toString(), style: textTheme.bodyMedium!.copyWith(color: colorScheme.onSurface)),
                                                //if(listCurrent[i].name != "" && listCurrent[i].id != "")const TextSpan(text: "\n"),
                                                //TextSpan(text: listCurrent[i].id.toString(), style: const TextStyle(fontSize: 10, color: Colors.white24, )),
                                              ],),),),),

                                    if(listCurrent[i].id != "")
                                      Align(
                                        alignment: Alignment.bottomRight,
                                        child: Padding(padding: const EdgeInsets.only(right: 10),
                                          child: RichText(
                                            textAlign: TextAlign.right,
                                            text: TextSpan(
                                              children: <TextSpan>[
                                                TextSpan(text: listCurrent[i].id.toString(), style: const TextStyle(fontSize: 10, color: Colors.white24, )),
                                              ],),),),),


                                  ],
                                ),
                              ),


                            ],
                          ),
                        ),
                      );
                    }
                ),
              ),
          ],
        ),

        if(widget.research)
          Theme( data: Theme.of(context).copyWith(
            cardColor: Colors.transparent,
            canvasColor: Colors.transparent,
            shadowColor: Colors.transparent,
            splashColor: Colors.transparent,
            hoverColor: Colors.transparent,
          ),
            child: IconButton(
              iconSize: 20,
              icon: searchEnable   ? const Icon(Icons.cancel_outlined ,color:  Colors.red,size: 18, ) : const Icon(Icons.manage_search_outlined ,color:  Colors.red,size: 18, ),
              onPressed: (){
                if(!searchEnable && searchController.value.text==""){
                  setState(() {searchEnable = true;});
                  if(!mounted) return;
                  Future.delayed(const Duration(milliseconds: 500), () {
                    FocusScope.of(context).requestFocus(_searchFocus);
                    //_fieldFocusChange(context, _nameFocus, _emailFocus);
                  });
                }else{
                  FocusScope.of(context).unfocus();
                  searchController.value = searchController.value.copyWith(text: "",);
                  _searchFocus.unfocus();
                  searchEnable = false;
                  setState(() {
                    returnList( );
                  });

                }
              },
            ),),


        if((widget.research && searchEnable) || searchController.value.text != "")
          SizedBox(
            width: 100,
            child: TextFormField(
              cursorColor: colorScheme.onPrimary,
              style: TextStyle(color: colorScheme.onBackground, fontSize: 12),
              controller: searchController,
              textAlign: TextAlign.left,
              textInputAction: TextInputAction.next,
              onChanged: (research) {
                searchController.value = searchController.value.copyWith(text: research);
                setState(() {
                  returnList( );
                });
              },
              focusNode: _searchFocus,
              onFieldSubmitted: (term) {
                _searchFocus.unfocus();
                searchEnable = false;
                //_fieldFocusChange(context, _nameFocus, _emailFocus);
              },
              decoration: InputDecoration(
                focusedBorder: UnderlineInputBorder(
                  borderSide: BorderSide(width: 2, color: colorScheme.onPrimary),),
                border: const UnderlineInputBorder(
                  borderSide: BorderSide(color: Colors.red),
                ),
                //labelText: "recherche",
                //labelStyle: TextStyle(fontSize: 10, color: colorScheme.onPrimary),
              ),
            ),
          ),

      ],
    ),

  );
}