返回事件的函数

时间:2019-07-28 17:52:22

标签: flutter functional-programming

我想调用一个函数,该函数将返回另一个函数,以用作Textfield输入的onChange事件处理程序。

我正在尝试下面的代码,但是由于某种原因,仿真器的构建过程只是停滞了,没有出现错误,并且仿真不起作用。

Function testing(Counter counter) {
  var somefunction = (String s) { 
    counter.increment();
  };
  return somefunction;
}


//widget class
  @override
  Widget build(BuildContext context) {
    final counter = Provider.of<Counter>(context);
    return TextField(
      onChanged: testing(counter),
      decoration: InputDecoration(labelText: _placeholder),
    );
  }

2 个答案:

答案 0 :(得分:0)

此示例应显示如何在onChange等事件中使用函数

class TextLengthExample extends StatelessWidget {

  testing(string) {
    return print(string.length);
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      // Remember "(str) =>" before the method otherwise it does not run properly.
      onChanged: (str) => testing(str), 
      // Alternative syntax:    
      //onChanged: (str) { 
      //  testing(str)
      //},
      // Oneliner:
      //onChanged: (str) => print(str.length), 
      decoration: InputDecoration(labelText: "Test"),
    );
  }
}

答案 1 :(得分:0)

这是一个函数返回另一个函数作为结果的示例

bool Function(String) testing(Counter counter) {
  var somefunction = (String s) { 
    counter.increment();
  };
  return somefunction;
}

此语句也可以简化为

bool Function(String) testing(Counter counter) => (String s) { 
  counter.increment();
};

为便于阅读,您可以定义typedef。可能最常用的一种是:

typedef WidgetBuilder = Widget Function(BuildContext context);

因此,原始示例代码可能会转换为

typedef StringTester = bool Function(String);
StringTester testing(Counter counter) => (String s) {
  counter.increment();
};