我是个新手,我有一个问题,那就是将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(),
)
]),
),
),
);
}
}
答案 0 :(得分:2)
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();
});
}