featureBuilderState<T> method

FutureBuilder featureBuilderState<T>({
  1. required Future<List<T>>? future,
  2. required T selectedObj,
  3. required bool predicate(
    1. T
    ),
  4. required void affectFunc(
    1. T
    ),
  5. required String displayFunc(
    1. T
    ),
})

Implementation

FutureBuilder featureBuilderState<T>({
  required Future<List<T>>? future,
  required T selectedObj,
  required bool Function(T) predicate,
  required void Function(T) affectFunc,
  required String Function(T) displayFunc,
}) {
  return FutureBuilder<List<T>>(
      future: future,
      builder: (BuildContext context, AsyncSnapshot<List<T>> snapshot) {
        if (snapshot.hasData) {
          var stateData = snapshot.requireData;

          if (selectedObj == null) {
            final resultIniti =
                stateData.firstWhereOrNull(predicate) ?? stateData[0];
            if (resultIniti != null) {
              affectFunc(resultIniti);
              selectedObj = resultIniti;
            }
          }

          return DropdownButton<T?>(
            isDense: true,
            icon: const Icon(Icons.keyboard_arrow_down),
            value: selectedObj,
            onChanged: (newValue) {
              if (newValue != null) {
                affectFunc(newValue);
                selectedObj = newValue;
              }
            },
            items: stateData
                .map<DropdownMenuItem<T>>((T value) => DropdownMenuItem<T>(
                      value:
                          value, // add this property an pass the _value to it
                      child: Row(
                        children: [
                          Padding(
                            padding: const EdgeInsets.only(top: 7),
                            child: Text(displayFunc(value)), //value.name
                          ),
                        ],
                      ),
                    ))
                .toList(),
          );
        }
        return const Text('not loaded yet');
      });
}