《Flutter开发实例解析》第2章学习记录及问题反思——番茄钟

flutter版本:3.7.9,Android Studio版本:2022.1.1

注意点(书上没提但可能会报错):

①在代码文件开头另外引入'dart:async'库用于之后调用时间库使用

②IDE可能会通过画绿色波浪线的形式提示使用'const'前缀,在代码编写过程中可先不理会(之后补充的代码可能会与该前缀产生冲突,因此会报错),待之后代码完全后再按照提示进行修改

③IDE可能会建议变量的第一个字母要小写,如示例代码中变量'DEFAULT_COUNT_DOWN',此处可根据个人喜好,保留第一个字母大写也可

④在IDE中'Timer'变量的定义如果按照书中代码及IDE提示放在代码注释'late Timer timer;'位置,在软件运行中仍会报错,可在'startCountDown()'函数内部进行变量的定义,并在变量类型'Timer'加上一个问号'?'(使其可为空值null)

以下为示例代码:

import 'dart:async'; //注意点一
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp( //注意点二(包括代码文件中其他可能会提示const的地方)
      title: '番茄钟',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const DEFAULT_COUNT_DOWN = Duration.secondsPerMinute * 25; //注意点三
  int countDown = 0;

  //late Timer timer; //注意点四(修改前)

  void startCountDown() {
    Timer? timer; //注意点四(修改后)
    if (timer != null) timer.cancel();
    countDown = DEFAULT_COUNT_DOWN;
    timer = Timer.periodic(const Duration(seconds: 1), (timer) {
      setState(() {
        countDown--;
      });
      debugPrint(countDown.toString());
      if (countDown == 0) {
        timer.cancel();
        showDialog(
            context: context,
            builder: (context) {
              return const AlertDialog(
                content: Text("成功获得一个番茄,请注意休息!"),
              );
            });
      }
    });
  }

  String padDigits(int value) {
    return value.toString().padLeft(2, '0');
  }

  String parseText() {
    return '${padDigits(countDown ~/ 60)}:${padDigits(countDown % 60)}';
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          parseText(),
          style: const TextStyle(
              fontSize: 48, fontWeight: FontWeight.bold, color: Colors.blue),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: startCountDown, //只要写前面声明的函数名称即可,后面不加括号
        child: const Icon(Icons.play_arrow),
      ),
    );
  }
}

书中本部分对应源代码查看链接:flutter-book-examples/main.dart at main · maxiee/flutter-book-examples · GitHub

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值