Last active
June 18, 2019 08:55
-
-
Save parse-code/9b8eafcc6a8b60eb99f21c4a5632f901 to your computer and use it in GitHub Desktop.
[Flutter redux] #Flutter #Redux
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
import 'package:flutter_redux/flutter_redux.dart'; | |
import 'package:redux/redux.dart'; | |
enum Actions { Increment, Decrement, Reset } | |
class AppState { | |
final int count; | |
AppState({this.count = 0}); | |
} | |
AppState counterReducer(AppState state, action) { | |
if (action == Actions.Increment) { | |
return new AppState(count: state.count + 1); | |
} else if (action == Actions.Decrement) { | |
return new AppState(count: state.count - 1); | |
} else if (action == Actions.Reset) { | |
return new AppState(count: 0); | |
} | |
return state; | |
} | |
void main() { | |
final store = new Store(counterReducer, initialState: new AppState(count: 0)); | |
runApp(new CounterApp(store: store)); | |
} | |
class CounterApp extends StatelessWidget { | |
final Store<AppState> store; | |
CounterApp({Key key, this.store}) : super(key: key); | |
@override | |
Widget build(BuildContext context) { | |
return new StoreProvider( | |
store: store, | |
child: new MaterialApp( | |
home: new Scaffold( | |
body: new Center( | |
child: StoreConnector<AppState, Store>( | |
builder: (context, _store) { | |
return GestureDetector( | |
child: Text( | |
_store.state.count.toString(), | |
style: TextStyle( | |
fontSize: 30, | |
), | |
), | |
onTap: () => _store.dispatch(Actions.Decrement), | |
onDoubleTap: () => _store.dispatch(Actions.Reset), | |
onLongPress: () => _store.dispatch(Actions.Reset), | |
); | |
}, | |
converter: (store) { | |
return store; | |
}, | |
), | |
), | |
floatingActionButton: new StoreConnector<AppState, VoidCallback>( | |
builder: (context, callback) { | |
return new FloatingActionButton( | |
onPressed: callback, | |
child: Icon(Icons.add), | |
); | |
}, converter: (store) { | |
return () => store.dispatch(Actions.Increment); | |
}), | |
), | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment