setStat () не обновляет экран - PullRequest
2 голосов
/ 07 мая 2020

Я новичок в флаттере, и у меня возникла проблема: куда поместить метод 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 Ответ

2 голосов
/ 07 мая 2020

1) "setStat" неверен, попробуйте использовать "setState". 2) вам не хватает лишних "()" без них или объявляйте новый метод (он же функция), что вам нужно, это передать вашу функцию внутри setState в качестве аргумента. Итак, давайте подведем итог

1) call function "setState() ";

2) передайте вашу функцию в качестве аргумента

void foo (){
  if (stat) {
     timeFormate = time.elapsed.toString();
  }
}

setState(foo);

3) используйте «короткий» синтаксис, замените foo в 'setState (foo);' быть телом функции 'foo'

setState(() {
  if (stat) {
   timeFormate = time.elapsed.toString();
  }
});

Также вы можете переместить оператор if за пределы setState

  if (stat) {
   setState(() {
     timeFormate = time.elapsed.toString();
   });
  }
...