请看一下这段代码:
final calculate = new FlatButton(
child: new Text(_calculate),
onPressed: _valid
? () {
setState(() {
model.inTemperature = stringToDouble(strTemperature);
model.calculateOutTemperature();
});
}
: null);
单击该按钮时,将使用执行赋值和方法调用的lambda调用setState()
。完美的工作。我想要做的是,如果提交了文本字段,则执行相同的setState()
。
实现此目标的最简单方法是在该按钮上使用performClick()
。例如,Android知道这一点。然而,Flutter没有这样的方法。所以,我这样做是:
onSubmitted: (newValue) {
setState(() {
strTemperature = newValue.trim();
calculate.onPressed();
});
},
这也很棒。我的问题是:我可以自己调用onPressed()
回调吗?是否存在我的代码可能会中断的情况?
答案 0 :(得分:2)
也许最好创建一个可以从按钮和文本字段调用的方法(例如下面的例子)。我只是认为你的实现看起来并不好。在我看来,文本字段应该不会调用按钮的onPressed。但是,我没有任何可能破坏的情况。
这样的事可能吗?
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
static void _setTemperature() {
setState(() {
model.inTemperature = stringToDouble(strTemperature);
model.calculateOutTemperature();
});
}
final calculate = new FlatButton(
child: new Text(_calculate),
onPressed: _valid ? () => _setTemperature() : null,
);
final textField = new TextField(
controller: _controller,
onSubmitted: (newValue) {
setState(() {
strTemperature = newValue.trim();
_setTemperature();
});
},
);
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('TestProject'),
),
body: new Column(
children: <Widget>[
calculate,
textField,
],
),
);
}
}