Form builder for edit Map<String,String?> as a multitype object using ConfigMap inside.
dart pub add config_map
dart pub add config_map_form
#or
flutter pub add config_map
flutter pub add config_map_formimport 'package:config_map/config_map.dart';
export 'package:config_map/config_map.dart';
import 'package:config_map_form/config_map_form.dart';
import 'package:flutter/material.dart';
final List<ConfigMapItem> epubFields = [
ConfigMapItem('title', type: ConfigMapTypes.string),
ConfigMapItem('authors', type: ConfigMapTypes.strings),
ConfigMapItem('description', type: ConfigMapTypes.multiline),
ConfigMapItem(
'language',
type: ConfigMapTypes.select,
options: {'en': 'English', 'ru': 'Russian'},
),
ConfigMapItem('show', type: ConfigMapTypes.bool),
ConfigMapItem('done', type: ConfigMapTypes.check),
ConfigMapItem('order', type: ConfigMapTypes.int),
ConfigMapItem('price', type: ConfigMapTypes.double),
];
class MinMap extends ConfigMap {
MinMap({super.configJson}) : super(fields: epubFields);
String? get title => getAs<String?>('title');
List<String>? get authors => getAs<List<String>?>('authors');
String? get description => getAs<String?>('description');
String? get language => getAs<String?>('language');
bool get show => getAs<bool>('show');
bool get done => getAs<bool>('done');
int? get order => getAs<int?>('order');
double? get price => getAs<double?>('price');
}
final wordMap = {
'title': 'Title',
'authors': 'Author',
'description': 'Description',
'language': 'Language',
'show': 'Show',
'done': 'Done',
'order': 'Order',
'price': 'Price',
};
String translate(String key) => wordMap[key] ?? key;
const iconMap = <String, IconData>{
'title': Icons.title,
'authors': Icons.supervised_user_circle_outlined,
'description': Icons.description_outlined,
'language': Icons.language,
'show': Icons.hide_source,
'done': Icons.download_done_outlined,
'order': Icons.format_list_numbered,
'price': Icons.price_change,
};
IconData? icon(String key) => iconMap[key];
InputDecoration getDecoration({required String labelText}) {
return InputDecoration(
labelText: labelText,
border: OutlineInputBorder(),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.yellow, width: 2.0),
borderRadius: BorderRadius.circular(10),
),
);
}
class MaxForm extends ConfigMapForm {
MaxForm({super.key, required super.json, required super.onChange})
: super(
configMap: MinMap(),
t: translate,
icon: icon,
getDecoration: getDecoration,
bottomPadding: 20,
fontSize: 18,
fontWeight: FontWeight.w500
);
}Implemented fields (See Config_map lib)
| Enum type | Dart type | Widget | |
|---|---|---|---|
| ✓ | string | String | One-line TextField |
| ✓ | multiline | String | Multiline TextField |
| ✓ | bool | bool | Switch |
| ✓ | check | bool | Checkbox |
| ✓ | int | int | TextField |
| ✓ | double | double | TextField |
| ✓ | select | String | Custom select Widget |
| ✓ | strings | List<String> | List of TextField |
| intSelect | int | Custom select Widget | |
| doubleSelect | double | Custom select Widget | |
| multiselect | List<String> | Custom select Widget | |
| ints | List<int> | List of TextField | |
| intMultiselect | List<int> | Custom select Widget | |
| doubles | List<double> | List of TextField | |
| doubleMultiselect | List<double> | Custom select Widget |
flutter pub publish