Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

Poznan Flutter Developer Group

Poznan Flutter Developer Group


Poznan Flutter Developer Group
Poznan Flutter Developer Group
UserLogin userLogin = Provider.of<UserLogin>(context);
userLogin.someAction();
userLogin.notifyListeners(); // usually inside another method

@override
Widget build(BuildContext context) {
return MultiProvider(
class UserLogin with ChangeNotifier {
providers: [
String _user;
ChangeNotifierProvider(builder: (context) =>
….
UserLogin()),
}
//hint: other providers go here
],
child: Scaffold(
appBar: AppBar( …. )
)
);
}

Poznan Flutter Developer Group


Poznan Flutter Developer Group
Poznan Flutter Developer Group
class UserSignInBloc {
Sink<UserLogin> get login => _userCredentialsStream.sink;
final _userCredentialsStream = BehaviorSubject<UserLogin>();
Stream<UserAuthenticationState> userSigned;
UserSignInBloc() {
userSigned = Observable.merge([
_userCredentialsStream.stream.switchMap(_signIn), _userSignInBloc.login.add(UserLogin(user, password));

// other login methods go here


]).asBroadcastStream();
}
void dispose() {
_userCredentialsStream.close();
}
// Business logic here
}

Poznan Flutter Developer Group


var _userSignInBloc = UserSignInBloc(); class _ResultWidgetState extends State<ResultWidget> {
ResultWidget(_userSignInBloc.userSigned), var loginResultText = "";

_ResultWidgetState(Stream<UserAuthenticationState> userSigned){
class ResultWidget extends StatefulWidget { userSigned.listen(onLoginDataChanged);
Stream<UserAuthenticationState> userSigned; }

ResultWidget(this.userSigned); void onLoginDataChanged(UserAuthenticationState event) {


@override if (event is UserAuthenticationLoading) {
_ResultWidgetState createState() => _ResultWidgetState(userSigned); setState(() {
} loginResultText = "LOADING...";
});
}
}

Poznan Flutter Developer Group


Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
class LoginUnsuccessfulAction {}

TypedReducer<UserLogin, LoginSuccessfulAction>(_setUser)
final store = Store<AppState>(
appReducer,
initialState: AppState.noLoggedUser(), UserLogin _setUser(UserLogin user, LoginSuccessfulAction action) {
middleware: createStoreLoginMiddleware(), print("Previous user: $user , storing new user: ${action.user}");
);
return action.user;
@override }
Widget build(BuildContext context) {
return StoreProvider(
store: store, StoreProvider.of<AppState>(context).dispatch(LoginRequestAction(user,
child: MaterialApp( … ) password));
);
}

UserLogin user = StoreProvider.of<AppState>(context).state.loggedUser;

Poznan Flutter Developer Group


Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
https://github.com/kosiara/bloc-vs-pprov-vs-redux

Poznan Flutter Developer Group


Bartosz Kosarzycki

Poznań Flutter Developer Group


facebook.com/poznanflutter
meetup.com/poznan-flutter-developers

Poznan Flutter Developer Group


https://redux.js.org/introduction/three-principles

https://www.youtube.com/watch?v=Zbm3hjPjQMk

https://www.udemy.com/course/react-redux/

https://medium.com/flutter-community/flutter-pragmatic-state-
management-using-provider-5c1129f9b5bb

https://pub.dev/packages/provider

Poznan Flutter Developer Group

You might also like