nexstate 1.1.1 nexstate: ^1.1.1 copied to clipboard
A simple dart package for state management inspired by BLoC package.
import 'dart:async';
import 'package:nexstate/src/nexstate_base.dart';
Future<void> main() async {
final userStore = UserStore();
await userStore.dispatch(
const LogIn(
User(
firstName: 'John',
lastName: 'Doe',
userName: 'john_doe',
),
),
);
await userStore.dispatchCompound(
const SwitchAndLogout(
User(
firstName: 'Jane',
lastName: 'Doe',
userName: 'jane_doe',
),
),
);
}
class User {
final String firstName;
final String lastName;
final String userName;
const User({
required this.firstName,
required this.lastName,
required this.userName,
});
@override
String toString() {
return {
'firstName': firstName,
'lastName': lastName,
'userName': userName,
}.toString();
}
}
class UserStore extends Store<User?> {
UserStore() : super(null, logger: true);
}
class LogIn extends Action<User?> {
final User user;
const LogIn(this.user) : super();
@override
Future<User?> activate(User? state) async => user;
}
class LogOut extends Action<User?> {
const LogOut() : super();
@override
Future<User?> activate(User? state) async => null;
}
class SwitchAndLogout extends CompoundAction<User?> {
final User user;
const SwitchAndLogout(this.user) : super();
@override
Future<void> activate(User? state, Dispatcher<User?> dispatch) async {
await dispatch(LogIn(user));
await Future.delayed(
const Duration(seconds: 2),
() => dispatch(const LogOut()),
);
}
}