簡體   English   中英

在Dart和Flutter中具有強類型屬性的匿名對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM