mnemo_cards/mnemo_cards_admin/old/enum_param.dart

69 lines
1.7 KiB
Dart
Raw Normal View History

2025-12-02 23:17:15 +00:00
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class EnumParam<T> extends StatelessWidget {
final String title;
final String? description;
final T initial;
final List<T> values;
final Function(T v) onChanged;
final Function(T v)? getName;
EnumParam(
this.title,
this.values,
this.initial,
this.onChanged, {
this.description,
this.getName,
});
String _defaultName(T v) => ((v is Enum) ? v.name : v.toString());
@override
Widget build(BuildContext context) {
T value = initial;
return Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(title),
if (description != null)
Text(
description!,
style: TextStyle(fontSize: 12),
)
],
),
SizedBox(
width: 2,
),
Expanded(
child: StatefulBuilder(builder: (context, setState) {
return DropdownButton<T>(
value: value,
items: values
.map(
(v) => DropdownMenuItem(
child: Text(getName?.call(v) ?? _defaultName(v)),
value: v,
),
)
.toList(),
onChanged: (v) => setState(() {
value = v!;
onChanged(v);
}),
);
}),
)
],
),
);
}
}