Flutter 小练习

作者: 坑吭吭 | 来源:发表于2018-07-30 17:22 被阅读21次

    学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

    相关文章

      网友评论

        本文标题:Flutter 小练习

        本文链接:https://www.haomeiwen.com/subject/jsgfvftx.html