isa*_*ürk 5 setstate dart flutter
我正在尝试为特殊的日子(例如11 d 2 h 30 m 23s到新年)创建倒计时应用程序,但我无法每秒重新加载状态,因此它仅向我显示第二次加载我未加载的页面知道如何动态重新加载页面。
import 'package:flutter/material.dart';
class RopSayac extends StatefulWidget {
_RopSayacState createState() => _RopSayacState();
}
class _RopSayacState extends State<RopSayac> {
var now = DateTime.now().second.toString();
String asd(){
setState(() {
now = DateTime.now().second.toString();
});
return now;
}
@override
Widget build(BuildContext context) {
return Container(
child: new Text(asd()),
);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我得到的,并且不会重新加载时间。我在扑扑上还很新。
如pskink和Günter所述,请使用Timer。您甚至可以使用periodic适合您的情况的构造函数。
请注意,您不需要此asd()功能。调用时setState(),build将自动传递新now属性值来调用该方法。
如果需要,可使用initState设置初始值,然后如本例所示设置Timer。
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(title: 'Timer Periodic Demo', home: RopSayac());
}
}
class RopSayac extends StatefulWidget {
_RopSayacState createState() => _RopSayacState();
}
class _RopSayacState extends State<RopSayac> {
String _now;
Timer _everySecond;
@override
void initState() {
super.initState();
// sets first value
_now = DateTime.now().second.toString();
// defines a timer
_everySecond = Timer.periodic(Duration(seconds: 1), (Timer t) {
setState(() {
_now = DateTime.now().second.toString();
});
});
}
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: new Text(_now),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
这种递归方法应该足以满足您的需求。设置为 1 将每秒seconds持续触发,从而刷新您的小部件树。setState
void _timer() {
Future.delayed(Duration(seconds: 1)).then((_) {
setState(() {
print("1 second closer to NYE!");
// Anything else you want
});
_timer();
});
}
Run Code Online (Sandbox Code Playgroud)
小智 5
有一个名为timer_builder的优秀库。我想这会对你有所帮助。
酒吧页面的示例:
import 'package:timer_builder/timer_builder.dart';
class ClockWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return TimerBuilder.periodic(Duration(seconds: 1), //updates every second
builder: (context) {
return Text("${DateTime.now()}");
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1640 次 |
| 最近记录: |