Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
Poznan Flutter Developer Group
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(builder: (context) =>
UserLogin()),
//hint: other providers go here
],
child: Scaffold(
appBar: AppBar( …. )
)
);
}
class UserLogin with ChangeNotifier {
String _user;
….
}
UserLogin userLogin = Provider.of<UserLogin>(context);
userLogin.someAction();
userLogin.notifyListeners(); // usually inside another method
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),
// other login methods go here
]).asBroadcastStream();
}
void dispose() {
_userCredentialsStream.close();
}
// Business logic here
}
_userSignInBloc.login.add(UserLogin(user, password));
Poznan Flutter Developer Group
var _userSignInBloc = UserSignInBloc();
ResultWidget(_userSignInBloc.userSigned),
class ResultWidget extends StatefulWidget {
Stream<UserAuthenticationState> userSigned;
ResultWidget(this.userSigned);
@override
_ResultWidgetState createState() => _ResultWidgetState(userSigned);
}
class _ResultWidgetState extends State<ResultWidget> {
var loginResultText = "";
_ResultWidgetState(Stream<UserAuthenticationState> userSigned){
userSigned.listen(onLoginDataChanged);
}
void onLoginDataChanged(UserAuthenticationState event) {
if (event is UserAuthenticationLoading) {
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
final store = Store<AppState>(
appReducer,
initialState: AppState.noLoggedUser(),
middleware: createStoreLoginMiddleware(),
);
@override
Widget build(BuildContext context) {
return StoreProvider(
store: store,
child: MaterialApp( … )
);
}
UserLogin user = StoreProvider.of<AppState>(context).state.loggedUser;
StoreProvider.of<AppState>(context).dispatch(LoginRequestAction(user,
password));
class LoginUnsuccessfulAction {}
TypedReducer<UserLogin, LoginSuccessfulAction>(_setUser)
UserLogin _setUser(UserLogin user, LoginSuccessfulAction action) {
print("Previous user: $user , storing new user: ${action.user}");
return action.user;
}
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

Provider vs BLoC vs Redux

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
    Poznan Flutter DeveloperGroup @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(builder: (context) => UserLogin()), //hint: other providers go here ], child: Scaffold( appBar: AppBar( …. ) ) ); } class UserLogin with ChangeNotifier { String _user; …. } UserLogin userLogin = Provider.of<UserLogin>(context); userLogin.someAction(); userLogin.notifyListeners(); // usually inside another method
  • 6.
  • 7.
  • 8.
    Poznan Flutter DeveloperGroup class UserSignInBloc { Sink<UserLogin> get login => _userCredentialsStream.sink; final _userCredentialsStream = BehaviorSubject<UserLogin>(); Stream<UserAuthenticationState> userSigned; UserSignInBloc() { userSigned = Observable.merge([ _userCredentialsStream.stream.switchMap(_signIn), // other login methods go here ]).asBroadcastStream(); } void dispose() { _userCredentialsStream.close(); } // Business logic here } _userSignInBloc.login.add(UserLogin(user, password));
  • 9.
    Poznan Flutter DeveloperGroup var _userSignInBloc = UserSignInBloc(); ResultWidget(_userSignInBloc.userSigned), class ResultWidget extends StatefulWidget { Stream<UserAuthenticationState> userSigned; ResultWidget(this.userSigned); @override _ResultWidgetState createState() => _ResultWidgetState(userSigned); } class _ResultWidgetState extends State<ResultWidget> { var loginResultText = ""; _ResultWidgetState(Stream<UserAuthenticationState> userSigned){ userSigned.listen(onLoginDataChanged); } void onLoginDataChanged(UserAuthenticationState event) { if (event is UserAuthenticationLoading) { setState(() { loginResultText = "LOADING..."; }); } }
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
    Poznan Flutter DeveloperGroup final store = Store<AppState>( appReducer, initialState: AppState.noLoggedUser(), middleware: createStoreLoginMiddleware(), ); @override Widget build(BuildContext context) { return StoreProvider( store: store, child: MaterialApp( … ) ); } UserLogin user = StoreProvider.of<AppState>(context).state.loggedUser; StoreProvider.of<AppState>(context).dispatch(LoginRequestAction(user, password)); class LoginUnsuccessfulAction {} TypedReducer<UserLogin, LoginSuccessfulAction>(_setUser) UserLogin _setUser(UserLogin user, LoginSuccessfulAction action) { print("Previous user: $user , storing new user: ${action.user}"); return action.user; }
  • 16.
  • 17.
  • 18.
  • 19.
    Poznan Flutter DeveloperGroup https://github.com/kosiara/bloc-vs-pprov-vs-redux
  • 20.
    Poznan Flutter DeveloperGroup Bartosz Kosarzycki Poznań Flutter Developer Group facebook.com/poznanflutter meetup.com/poznan-flutter-developers
  • 21.
    Poznan Flutter DeveloperGroup 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