首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Dart和Flutter中具有强类型属性的匿名对象

Dart和Flutter中具有强类型属性的匿名对象
EN

Stack Overflow用户
提问于 2019-05-21 01:33:23
回答 1查看 2.6K关注 0票数 3

我在我的Dart中使用了以下代码,其中使用了redux和flutter_redux包。一切正常,但如您所见,我必须使用以下语法来调用适当的操作。

代码语言:javascript
复制
callback['onIncrement'](34) 

它是有效的,但它很丑陋。我如何改进它,使其读起来更像这样:

代码语言:javascript
复制
callback.onIncrement(34)

代码如下:

代码语言:javascript
复制
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)

更新:

现在,我正在使用枚举,它好不到哪里去:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 05:55:17

据我所知,在Dart中不可能做到这一点。您应该改用ViewModel

代码语言:javascript
复制
StoreConnector<AppState, ViewModel>(
  converter: ViewModel.fromStore,
  builder: (context, viewModel) {
    return FlatButton( 
      onPressed: () => viewModel.onIncrement(1),
      ...
    );
  },
}

...

class ViewModel {
  final void Function(int) onIncrement;
  final void Function(int) onDecrement;

  ViewModel({@required this.onIncrement, @required this.onDecrement});

  factory ViewModel.fromStore(Store store) {
    return ViewModel(
      onIncrement: (value) => store.dispatch(IncrementAction(value)),
      onDecrement: (value) => store.dispatch(DecrementAction(value)),
    );
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56225683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档