学Flutter也有一段时间了,一直在学习理论,还没怎么做过练习。想起以前初学Android的时候做过的一个练手小玩具,今天决定用Flutter去实现一下子。核心东西是一个叫Ticker
的东西,用来计时。以后项目中如果做短信验证倒计时的时候应该能用上吧。
玩法(逻辑)
点击开始,开始按钮变成结束字样,并开启15秒钟的倒计时。此时可以点击“点我”按钮,每点一次次数+1。目的看15秒内最多能点多少次。重新开始会刷新次数。
代码总览
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _count = 0;
String _time = "0";
Ticker _ticker;
String _beginButtonText = "开始";
_MyAppState(){
_ticker = new Ticker((Duration duration){
setState(() {
_time = (15-duration.inSeconds).toString();
if(15-duration.inSeconds==0){
_ticker.stop(canceled: true);
_beginButtonText = "开始";
}
});
});
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(title: new Text('Flutter点点'),),
body: Center(child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("还剩$_time秒"),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("一共点了$_count次"),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: MaterialButton(
color: Colors.grey,
colorBrightness: Brightness.light,
child: Text(_beginButtonText),
onPressed:(){
if(_ticker.isTicking){
_ticker.stop(canceled: true);
setState(() {
_beginButtonText = "开始";
});
}else{
_ticker.start();
setState(() {
_beginButtonText = "结束";
_count = 0;
});
}
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: MaterialButton(
color: Colors.grey,
colorBrightness: Brightness.light,
child: Text('点我'),
onPressed:(){
if(_ticker.isTicking){
setState(() {
_count++;
});
}
},
),
),
],
),
],
)),
),
);
}
}
代码仅供参考,仅仅是记录一下学习成果,对之前学习过的东西进行一下实际应用而已。
这里记录三个快捷键:
快捷键 | 功能 |
---|---|
alt+enter | 可以快速嵌套或删除widget |
stf | 可以快速创建stateful的widget |
stl | 可以快速创建stateless的widget |
网友评论