Skip to content

adkrix/config_map_form

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Config map form

Form builder for edit Map<String,String?> as a multitype object using ConfigMap inside.

Getting started

dart pub add config_map
dart pub add config_map_form
#or
flutter pub add config_map
flutter pub add config_map_form

Usage

import '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

Publication

flutter pub publish

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors