gpt4 book ai didi

dart - 使用 Flutter,模拟 FlatButton 点击​​的正确方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 07:14:53 29 4
gpt4 key购买 nike

请看一下这段代码:

final calculate = new FlatButton(
child: new Text(_calculate),
onPressed: _valid
? () {
setState(() {
model.inTemperature = stringToDouble(strTemperature);
model.calculateOutTemperature();
});
}
: null);

当按钮被点击时,setState() 被调用,lambda 执行赋值和方法调用。完美运行。我想要做的是,如果提交了一个文本字段,则执行相同的 setState()

实现此目的的最简单方法是在该按钮上使用类似 performClick() 的方法。例如,Android 知道这一点。但是,Flutter 没有这样的方法。所以,我所做的是:

onSubmitted: (newValue) {
setState(() {
strTemperature = newValue.trim();
calculate.onPressed();
});
},

这也很好用。我的问题是:我可以自己调用 onPressed() 回调吗?是否存在我的代码可能会中断的情况?

最佳答案

也许创建一个可以从按钮和文本字段调用的方法会更好(下面的示例)。我只是觉得你的实现看起来不太好。在我看来,文本字段不应调用按钮的 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,
],
),
);
}
}

关于dart - 使用 Flutter,模拟 FlatButton 点击​​的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com