setStat()不会更新屏幕

时间:2020-05-07 12:41:01

标签: android flutter setstate

我是个新手,我有一个问题,那就是将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 个答案:

答案 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();
   });
  }