setStat()不更新屏幕。

问题描述 投票:1回答:1

我是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(),
            )
          ]),
        ),
      ),
    );
  }
}

android flutter setstate
1个回答
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();
   });
  }
© www.soinside.com 2019 - 2024. All rights reserved.