[英]Anonymous Objects with Strongly Type Properties in Dart and Flutter
我在Dart中使用以下代碼,該代碼使用redux和flutter_redux軟件包。 一切正常,但是如您所見,我必須使用以下語法來調用適當的操作。
callback['onIncrement'](34)
它可以工作,但是很難看。 我該如何改善它,使其更像這樣:
callback.onIncrement(34)
這是代碼:
StoreConnector<AppState,Map<String,Function>>(
converter: (store) {
return {
'onIncrement': (value) => store.dispatch(IncrementAction(value)),
'onDecrement': () => store.dispatch(Actions.decrement)
};
},
builder: (context, callback) {
return Column(
children: <Widget>[
FlatButton(
child: Text('Increment Counter', style: TextStyle(color: Colors.white)),
color: Colors.orange,
onPressed: () => callback['onIncrement'](1)
更新:
現在,我正在使用枚舉,但效果更好:
StoreConnector<AppState,Map<Actions,Function>>(
converter: (store) {
return {
Actions.increment: (value) => store.dispatch(IncrementAction(value)),
Actions.decrement: () => store.dispatch(Actions.decrement)
};
},
builder: (context, callback) {
return Column(
children: <Widget>[
FlatButton(
child: Text('Increment Counter', style: TextStyle(color: Colors.white)),
color: Colors.orange,
onPressed: () => callback[Actions.increment](23)
就我而言,在Dart中是不可能做到的。 您應該改為使用ViewModel
:
StoreConnector<AppState, ViewModel>(
converter: ViewModel.fromStore,
builder: (context, viewModel) {
return FlatButton(
onPressed: () => viewModel.onIncrement(1),
...
);
},
}
...
class ViewModel {
void Function(int) onIncrement;
void Function(int) onDecrement;
ViewModel({@required this.onIncrement, @required this.onDecrement});
factory ViewModel.fromStore(Store store) {
return ViewModel(
onIncrement: (int value) => store.dispatch(IncrementAction(value)),
onDecrement: (int value) => store.dispatch(DecrementAction(value)),
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.