我是flutter的新手,我遇到了一个问题,那就是setStat()方法应该放在哪里。这里有一个简单的代码,我做了一个训练,它是一个停止的手表。在调试中,每件事都很顺利,但屏幕不更新,它只显示初始状态是 "00:00:00"。
这里是代码。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
var time = new Stopwatch();
class _MyAppState extends State<MyApp> {
int counter = 0;
bool stat = false;
String timeFormate = "00:00:00";
setStat() {
if (stat) {
timeFormate = time.elapsed.toString();
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Timer app pro',
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: Text("Training fucken app"),
),
body: Container(
child: Column(children: [
Text(timeFormate),
RaisedButton(
child: Text("Start"),
onPressed: () {
time.start();
stat = true;
print(time.isRunning);
print(time.elapsed.toString());
},
),
RaisedButton(
child: Text("Stop"),
onPressed: () {
time.stop();
print(time.isRunning);
print(time.elapsed.toString());
},
),
RaisedButton(
child: Text("Reset"),
onPressed: () => time.reset(),
)
]),
),
),
);
}
}
1)"setStat "是错误的,尝试使用 "setState".2)你缺少额外的"( )",没有他们,你声明一个新的方法(也就是函数),你需要的是传递你的函数在setState里面作为一个参数,所以让我们总结一下。
1) 调用函数"setState()
";
2) 将你的函数作为参数
void foo (){
if (stat) {
timeFormate = time.elapsed.toString();
}
}
setState(foo);
3)使用 "短 "语法将'setState(foo);'中的foo替换为'foo'函数的主体。
setState(() {
if (stat) {
timeFormate = time.elapsed.toString();
}
});
你也可以把if语句移到setState之外。
if (stat) {
setState(() {
timeFormate = time.elapsed.toString();
});
}