我想调用一个函数,该函数将返回另一个函数,以用作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),
);
}
答案 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();
};