serializable_controllers
A simple package to lift some of the boilerplate about values handling when dealing with forms.
Overview
Create controllers through the SerializableControllersManager
class using the makeController
method and assign them to the widgets you need on your form.
Each controller implements ValueNotifier
so it can easily be used to listen changes.
You can get a serialization of the values any time via the toJson
method of SerializableControllersManager
.
Remember to use dispose
on the manager when you're finished to avoid memory leaks!
Provided controllers
SerializableTextEditingController
Provides an abstraction for TextEditingController
.
The inner TextEditingController
is available via the controller
property of the object.
Example:
final serializableTextEditingController = manager.makeController(
() => SerializableTextEditingController(id: 'myId'),
);
final textEditingController = serializableTextEditingController.controller;
Instead of using boring listeners you can directly listen to text changes listening directly to the object:
ValueListenableBuilder(
valueListenable: nameController,
builder: (_, value, __) => Text(value ?? ''),
),
SerializableChangeController
Provides way to easily update a value through a widget's ValueChanged
callback.
Example:
final checkboxController = manager.makeController(
() => SerializableChangeController(
id: 'radio',
initialValue: false,
),
);
And use it like this:
//in the build method
ValueListenableBuilder(
valueListenable: checkboxController,
builder: (context, value, _) =>
CheckboxListTile(
value: value,
onChanged: checkboxController.valueChanged,
title: Text('Boolean check'),
)
),
As you can see you can easily update the UI without too much hassle too.
Custom controllers
You can create your own controllers just by extending SerializableController<T>
!
Printing the values
Given
final manager = SerializableControllersManager();
Just call
print(jsonEncode(manager.toJson()));
Check out the example for more!