最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter定時器、倒計(jì)時的快速上手及實(shí)戰(zhàn)講解

 更新時間:2019年06月10日 11:01:47   作者:AndroidTraveler  
這篇文章主要給大家介紹了關(guān)于Flutter定時器、倒計(jì)時的快速上手及實(shí)戰(zhàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

今天給大家講講 Flutter 里面定時器/倒計(jì)時的實(shí)現(xiàn)。

一般有兩種場景:

  • 我只需要你在指定時間結(jié)束后回調(diào)告訴我?;卣{(diào)只需要一次。
  • 我需要你在指定時間結(jié)束后回調(diào)告訴我?;卣{(diào)可能多次。

下面針對這兩種場景,我們來說下如何在 Flutter 里面使用。

回調(diào)一次的定時器

const timeout = const Duration(seconds: 5);
print('currentTime='+DateTime.now().toString());
Timer(timeout, () {
 //到時回調(diào)
 print('afterTimer='+DateTime.now().toString());
});

這里我們設(shè)置了超時時間為 5 秒。然后啟動一個定時器,等到 5 秒時候到了,就會執(zhí)行回調(diào)方法。

我們在定時器啟動之前和之后都加上了打印日志,控制臺打印輸出如下:

flutter: currentTime=2019-06-08 13:56:35.347493
flutter: afterTimer=2019-06-08 13:56:40.350412

用法總結(jié)起來就是:

1.設(shè)置超時時間 timeout

2.啟動定時器 Timer(timeout, callback)

3.處理回調(diào) callback

回調(diào)多次的定時器

回調(diào)多次的定時器用法和回調(diào)一次的差不多,區(qū)別有下面兩點(diǎn):

  • API 調(diào)用不同
  • 需要手動取消,否則會一直回調(diào),因?yàn)槭侵芷谛缘?/li>

一樣的我們通過一個簡單的小例子來說明:

int count = 0;
const period = const Duration(seconds: 1);
print('currentTime='+DateTime.now().toString());
Timer.periodic(period, (timer) {
 //到時回調(diào)
 print('afterTimer='+DateTime.now().toString());
 count++;
 if (count >= 5) {
  //取消定時器,避免無限回調(diào)
  timer.cancel();
  timer = null;
 }
});

這里我們的功能是每秒回調(diào)一次,當(dāng)達(dá)到 5 秒后取消定時器,一共 回調(diào)了 5 次。

控制臺輸出如下:

flutter: currentTime=2019-06-08 14:16:02.906858
flutter: afterTimer=2019-06-08 14:16:03.909963
flutter: afterTimer=2019-06-08 14:16:04.910538
flutter: afterTimer=2019-06-08 14:16:05.911942
flutter: afterTimer=2019-06-08 14:16:06.911741
flutter: afterTimer=2019-06-08 14:16:07.910227

用法總結(jié)起來就是:

1.設(shè)置周期回調(diào)時間 period

2.啟動定時器 Timer.periodic(period, callback(timer))

3.處理回調(diào) callback(timer)

4.記得在合適時機(jī)取消定時器,否則會一直回調(diào)

好了,有了上面的知識儲備,接下來,讓我們進(jìn)入實(shí)戰(zhàn)講解環(huán)節(jié)。

實(shí)戰(zhàn)講解

業(yè)務(wù)場景

服務(wù)器返回一個時間,你根據(jù)服務(wù)器的時間和當(dāng)前時間的對比,顯示倒計(jì)時,倒計(jì)時的時間在一天之內(nèi),超過一天顯示默認(rèn)文案即可。

場景分析

這個業(yè)務(wù)場景在倒計(jì)時這一塊就需要使用到我們上面的知識了。由于限定了倒計(jì)時是在一天之內(nèi),所以顯示的文案就是從 00:00:00 到 23:59:59。

具體代碼操作

基本思路:首先我們需要獲得剩余時間,接著啟動一個 1 秒的周期性定時器,然后每隔一秒更新一下文案。

直接上代碼:

//時間格式化,根據(jù)總秒數(shù)轉(zhuǎn)換為對應(yīng)的 hh:mm:ss 格式
String constructTime(int seconds) {
 int hour = seconds ~/ 3600;
 int minute = seconds % 3600 ~/ 60;
 int second = seconds % 60;
 return formatTime(hour) + ":" + formatTime(minute) + ":" + formatTime(second);
}

//數(shù)字格式化,將 0~9 的時間轉(zhuǎn)換為 00~09
String formatTime(int timeNum) {
 return timeNum < 10 ? "0" + timeNum.toString() : timeNum.toString();
}

//獲取當(dāng)期時間
var now = DateTime.now();
//獲取 2 分鐘的時間間隔
var twoHours = now.add(Duration(minutes: 2)).difference(now);
//獲取總秒數(shù),2 分鐘為 120 秒
var seconds = twoHours.inSeconds;
//設(shè)置 1 秒回調(diào)一次
const period = const Duration(seconds: 1);
//打印一開始的時間格式,為 00:02:00
print(constructTime(seconds));
Timer.periodic(period, (timer) {
 //秒數(shù)減一,因?yàn)橐幻牖卣{(diào)一次
 seconds--;
 //打印減一后的時間
 print(constructTime(seconds));
 if (seconds == 0) {
  //倒計(jì)時秒數(shù)為0,取消定時器
  timer.cancel();
  timer = null;
 }
});

其實(shí)注釋也寫的很清楚了,就是基本思路的基礎(chǔ)上增加了一些細(xì)節(jié)處理,這里演示是自己構(gòu)造了一個兩分鐘的倒計(jì)時。

好了,基本到這里已經(jīng)說完了,但是可能 Flutter 具體一些細(xì)節(jié)還不一樣,這邊直接給下一個倒計(jì)時的完整代碼吧。

import 'dart:async';

import 'package:flutter/material.dart';

class Countdown extends StatefulWidget {
 @override
 _CountdownState createState() => _CountdownState();
}

class _CountdownState extends State<Countdown> {

 Timer _timer;
 int seconds;

 @override
 Widget build(BuildContext context) {
  return Center(
   child: Text(constructTime(seconds)),
  );
 }

 //時間格式化,根據(jù)總秒數(shù)轉(zhuǎn)換為對應(yīng)的 hh:mm:ss 格式
 String constructTime(int seconds) {
  int hour = seconds ~/ 3600;
  int minute = seconds % 3600 ~/ 60;
  int second = seconds % 60;
  return formatTime(hour) + ":" + formatTime(minute) + ":" + formatTime(second);
 }

 //數(shù)字格式化,將 0~9 的時間轉(zhuǎn)換為 00~09
 String formatTime(int timeNum) {
  return timeNum < 10 ? "0" + timeNum.toString() : timeNum.toString();
 }

 @override
 void initState() {
  super.initState();
  //獲取當(dāng)期時間
  var now = DateTime.now();
  //獲取 2 分鐘的時間間隔
  var twoHours = now.add(Duration(minutes: 2)).difference(now);
  //獲取總秒數(shù),2 分鐘為 120 秒
  seconds = twoHours.inSeconds;
  startTimer();
 }

 void startTimer() {
  //設(shè)置 1 秒回調(diào)一次
  const period = const Duration(seconds: 1);
  _timer = Timer.periodic(period, (timer) {
   //更新界面
   setState(() {
    //秒數(shù)減一,因?yàn)橐幻牖卣{(diào)一次
    seconds--;
   });
   if (seconds == 0) {
    //倒計(jì)時秒數(shù)為0,取消定時器
    cancelTimer();
   }
  });
 }

 void cancelTimer() {
  if (_timer != null) {
   _timer.cancel();
   _timer = null;
  }
 }

 @override
 void dispose() {
  super.dispose();
  cancelTimer();
 }
}

效果如下:


后續(xù)打算寫一個 FlutterApp 涵蓋我之前博客的例子,方便大家結(jié)合代碼查看實(shí)際運(yùn)行效果,敬請期待。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Gradle 依賴切換源碼實(shí)踐示例詳解

    Gradle 依賴切換源碼實(shí)踐示例詳解

    這篇文章主要為大家介紹了Gradle 依賴切換源碼實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果

    Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果

    這篇文章主要為大家詳細(xì)介紹了Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android通過startService播放背景音樂

    Android通過startService播放背景音樂

    這篇文章主要介紹了Android通過startService播放背景音樂簡單示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 聊一聊Android中的StateListAnimator

    聊一聊Android中的StateListAnimator

    這篇文章主要給大家介紹了關(guān)于Android中StateListAnimator的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Android設(shè)備之間通過Wifi通信的示例代碼

    Android設(shè)備之間通過Wifi通信的示例代碼

    本篇文章主要介紹了Android設(shè)備之間通過Wifi通信的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android切圓角的幾種常見方式總結(jié)

    Android切圓角的幾種常見方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Android切圓角的常見方式,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Android實(shí)現(xiàn)app分享文件到微信功能

    Android實(shí)現(xiàn)app分享文件到微信功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)app分享文件到微信功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android Studio 3.x版本 的輸入法遇到的坑及解決方案

    Android Studio 3.x版本 的輸入法遇到的坑及解決方案

    前些天把AndroidStudio從2.3.3升級到3.0,遇到了不少坑,其中一個巨坑就是輸入中文不提示的問題,下面給大家分享Android Studio 3.x版本的輸入法遇到的坑及解決方案,一起看看吧
    2017-11-11
  • 一文讀懂Android?Kotlin的數(shù)據(jù)流

    一文讀懂Android?Kotlin的數(shù)據(jù)流

    這篇文章主要介紹了一文讀懂Android?Kotlin的數(shù)據(jù)流,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • Android無需讀寫權(quán)限通過臨時授權(quán)讀寫用戶文件詳解

    Android無需讀寫權(quán)限通過臨時授權(quán)讀寫用戶文件詳解

    這篇文章主要為大家介紹了Android無需讀寫權(quán)限通過臨時授權(quán)讀寫用戶文件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評論

婺源县| 汕头市| 彰武县| 铜山县| 阿拉善盟| 磴口县| 九寨沟县| 永登县| 葵青区| 阿图什市| 吉木萨尔县| 蓝田县| 沾化县| 荆州市| 丽水市| 牟定县| 武清区| 潮州市| 珲春市| 舞阳县| 拉孜县| 瑞丽市| 错那县| 英山县| 万盛区| 洞头县| 和林格尔县| 邵武市| 景东| 耿马| 南木林县| 长宁县| 三台县| 武强县| 梧州市| 怀宁县| 弥渡县| 承德市| 九江县| 广汉市| 通海县|