Managing State Views
The XXXDefaultStateView
Your XXXDefaultStateView
provides access to your entire XXXState
By default, your XXXDefaultStateView
will provide accessors for all the root objects you add to your XXXState
using a generate command with the form:
AFib achieves this by adding the accessor to the XXXStateModelAccess
mixin, which is referenced by both your XXXDefaultStateView
and XXXState
.
You can add additional third party data to your state view
By default, the file:
Will contain a class like:
//--------------------------------------------------------------------------------------
mixin XXXDefaultStateViewModelsMixin<TRouteParam extends AFRouteParam> {
//--------------------------------------------------------------------------------------
List<Object?> createStateModels(AFBuildStateViewContext<XXXState, TRouteParam> context) {
final state = context.stateApp;
return state.allModels.toList();
}
}
The objects returned by this function will be included at the root of your state view. By default, this function returns all the root objects from your overall application state (XXXState
). However, you can add additional objects. For example, if you were using the AFib Chat Support third party library, you might do:
//--------------------------------------------------------------------------------------
mixin XXXDefaultStateViewModelsMixin<TRouteParam extends AFRouteParam> {
//--------------------------------------------------------------------------------------
List<Object?> createStateModels(AFBuildStateViewContext<XXXState, TRouteParam> context) {
final state = context.stateApp;
final models = state.allModels.toList();
final afahState = context.accessComponentState<AFAHState>();
models.addAll(afahState.allModels);
return models;
}
}
You could then access the AFAHState
root models in your XXXDefaultStateView
using syntax like:
Creating Custom State Views
Most applications will find the default state view sufficient. However, you can create an additional state view using the command:
Which will create a file called:
Again, that file will contain anXXXOtherStateViewModelsMixin
mixin, and you can use it to determine which
objects exist at the root of that particular state view. On the state view itself, you can provide access to those models using the same syntax
found in your XXXStateModelAccess
mixin, which looks like:
Converting an existing UI element to a different state view
Note that in order to make a UI element use a state view, you must change several definitions at the top of the UI element's class.
In the example below, its fairly obvious that you would need to change XXXDefaultStateView
to XXXOtherStateView
in the template parameters.
But also note that the static final config
definition, currently called XXXDefaultScreenConfig
, would need to be changed to XXXOtherScreenConfig
. That screen config class is also defined in the other_state_view.dart
file.
class HomePageScreenSPI extends XXXScreenSPI<XXXDefaultStateView, HomePageScreenRouteParam> {
const HomePageScreenSPI(AFBuildContext<XXXDefaultStateView, HomePageScreenRouteParam> context, AFStandardSPIData standard): super(context, standard);
factory HomePageScreenSPI.create(AFBuildContext<XXXDefaultStateView, HomePageScreenRouteParam> context, AFStandardSPIData standard) {
return HomePageScreenSPI(context, standard,
);
}
}
class HomePageScreen extends XXXConnectedScreen<HomePageScreenSPI, XXXDefaultStateView, HomePageScreenRouteParam> {
static final config = XXXDefaultScreenConfig<HomePageScreenSPI, HomePageScreenRouteParam> (
spiCreator: HomePageScreenSPI.create,
);
....