【问题标题】:Pass onSaved to a TextFormField widget?将 onSaved 传递给 TextFormField 小部件?
【发布时间】:2019-02-05 18:30:38
【问题描述】:

为了创建一个返回TextFormField的可重用小部件,有没有办法在调用onSaved时传递需要更新的字段?

考虑以下地图:

  Map myMap = {
    'a': 1,
    'b': 2,
  }

还有一个简单的构建方法:

  Widget build(BuildContext context) {
    return _buildTile(myMap.a);
  }

还有我在许多地方使用的带有特定装饰(未显示)的常用小部件

  Widget _buildTile(int fieldIn) {
    return TextFormField(
      onSaved: (value) => print('Tile onSaved: $value'),  //how to update myMap.a?
    );
  }

【问题讨论】:

    标签: flutter


    【解决方案1】:

    飞镖中的非基元通过引用传递,这包括地图。所以你可以这样做:

    Widget _buildTile(Map map, dynamic key) {
        return TextFormField(
          onSaved: (value) => map[key] = value,
        );
      }
    

    【讨论】:

    • 谢谢卢卡斯。这满足了我提供的示例,但是如果它是一个对象而不是一个地图呢?那么我将如何访问密钥? main() { Obj myObj = Obj(a: 1, b: 2,); doPrint(myObj, 'a'); } doPrint(Obj o, String key) { print(o); print(o[key]); } class Obj { Obj({ this.a, this.b, }); int a; int b; }
    • 你来自 Javascript 吗?您可能仍然指的是MapMap<dynamic> 可以有任何类型的键。请注意,在我给出的示例中,关键参数是动态的。
    • 那行不通。将我之前评论中的代码剪切并粘贴到 dartpad 中。
    • 不,它不适用于班级成员,只有地图。另一种选择(这可能是一种更好的做法)是使onSaved 成为您的自定义小部件的参数,该参数将传递给TextFormField
    • 这就是我害怕的(如本期标题所示)。 :( 我希望有一个更优雅的解决方案。编码时看起来真的很难看。再次感谢您的帮助。非常感谢您的回复。:)
    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 2013-01-31
    • 2015-08-07
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多