am_state
A state-management and data providing library. (Fast - Safe - Easy)
This lib gives (AmDataProvider<T>) as data provider and (AmRefreshWidget<T>) as wrapper to the widgets that must be changed when provider data changed.
Getting Started:
To import am_state:
import 'package:am_state/am_state.dart';
To initialize data provider:
final dataProvider = AmDataProvider<int>(
initialData: 0,
providerId: 'providerId',
);
dataProvider.initialize; // you need to use this if you want to access the provider with its id instead of its name at first time.
// OR
final dataProvider = AmDataProvider<int>();
// You can't access this with id and dying if disposed.
// You can only access this with its name ex:[dataProvider] if still alive.
// if you added a providerId the provider won't die.
To get data anywhere after initializing the provider:
int? num = AmDataProvider<int>.of('providerId').data;
To Refresh widgets if data changed:
class Example extends StatelessWidget {
const Example({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: AmRefreshWidget<int>(
amDataProvider: AmDataProvider<int>.of('providerId'),
builder: (ctx, value) {
return Text('$value');
},
),
);
}
}
Note: you could use one provider for multiple (AmRefreshWidget)s
To change the provider data without refresh states:
dataProvider.silentDataSet = dataProvider.data! + 1;
// OR
AmDataProvider<String>.of('providerId').silentDataSet = 'any data';
To change provider data with refresh states:
dataProvider.data = dataProvider.data! + 1;
// OR
AmDataProvider<String>.of('providerId').data = 'Some Data';
To instantinously excute some code and then refresh states:
dataProvider.activeFunction = () {
//...Some Code....instantinously invoked then states refreshed
};
// OR
AmDataProvider<String>.of('providerId').activeFunction = () {
//...Some Code....instantinously invoked then states refreshed
};
To compare the data in the provider with data just before the last change:
if(dataProvider.data == dataProvider.previousData){
//...Some Code...
}else{
//...Some Code...
}
To initialize function trigger:
final listener = AmFunctionTrigger<int>(
amDataProvider: AmDataProvider<int>.of('providerId'),
function: (value){ ... some code ... }
);
listener.start; // You need to use this line anywhere
To cancel function trigger listening:
listener.cancel();
To reactivate the listener:
listener.activate();
To control the AmRefreshWidget and adding states to it:
child: AmRefreshWidget<int>(
amDataProvider: dataProvider,
builder: (ctx, value) {
/// This controller you may send as a parameter anyway but you have rarely to do this_
/// Because the [AmDataProvider] may do the same goal.
var controller = AmRefreshWidgetController.of(ctx);
/// When this code block is called this variable will have the last value.
/// if it is the frist time to call this code, this variable will have 5 as initial value.
var intState = controller.statePoint<int>(id: 1, initialValue: 5);
///Dummy Code to use the statePoint variable.
intState.value = value! * (intState.value);
return Text('${intState.value}');
},
),