featureBuilderState<T> method
FutureBuilder
featureBuilderState<
T>({ - required Future<List<T>>? future,
- required T selectedObj,
- required bool predicate(
- T
),
- required void affectFunc(
- T
),
- required String displayFunc(
- 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');
});
}