闲暇时刻用Flutter写了一个夜间爆闪提示器

爆闪策略1:双色交替闪

爆闪策略1:双色交替 后 双色全亮 闪五次

效果视频 # 安全行车 # 爆闪灯 # 奥迪a6l 爆闪频率逐渐升高 刚才没啥事用# flutter 写的App v.douyin.com/iFnLFvGF/

flutter源码 gist.github.com/330132662/b...

ini 复制代码
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';

/**
*  红蓝爆闪
*/
class RedBlue extends StatefulWidget {
 const RedBlue({super.key});

 @override
 State<RedBlue> createState() => _RedBlueState();
}

class _RedBlueState extends State<RedBlue> {
 @override
 void initState() {
   super.initState();
 }

 @override
 Widget build(BuildContext context) {
   return _body();
 }

 Widget _body() {
   return Scaffold(
       body: GestureDetector(
     child: Column(
       children: [
         Container(
           height: ScreenUtil().screenHeight / 2,
           // width: MediaQuery.of(context).size.width,
           width: ScreenUtil().screenWidth,
           color: red,
         ),
         Container(
           height: ScreenUtil().screenHeight / 2,
           // width: MediaQuery.of(context).size.width,
           width: ScreenUtil().screenWidth,
           color: blue,
         ),
       ],
     ),
     onTap: _allClick,
   ));
 }

 bool _isRed = false;
 Color closeLed = Colors.yellowAccent;

 Color? red = Colors.red;
 Color? blue = Colors.blue;
 bool _isRun = false;
 // late Timer _timer;
 final int _timeDistance = 100;

 _allClick() {
   _flashBlue();
 }

/*
无限交替方案
*/
 _startFlash() {
   if (_isRed) {
     //   亮红的
     _closeBlue();
     _showRed();
   } else {
     //  亮蓝的
     _showBlue();
     _closeRed();
   }
   _isRed = !_isRed;
   setState(() {});
 }

 /**
  *  单色交替循环 次数
  */
 final int singleTimes = 2;
 int singleTimess = 0;

 /**
  *  aabbaabb abab
  *
  *  bb--rr
  */
 _flashBlue() {
   Future.delayed(Duration(milliseconds: _timeDistance), () {
     blue = Colors.blue;
     if (mounted) {
       setState(() {});
     }
     Future.delayed(Duration(milliseconds: _timeDistance), () {
       _closeBlue();

       Future.delayed(Duration(milliseconds: _timeDistance), () {
         blue = Colors.blue;
         if (mounted) {
           setState(() {});
         }
         Future.delayed(Duration(milliseconds: _timeDistance), () {
           _closeBlue();
           _flashred2();
         });
       });
     });
   });
   // 亮红的两次

   if (!_exit) {
     _isRun = false;
   } else {
     _isRun = true;
     // _exit = true;
   }
 }

 /**
  * rr -- bb
  */
 _flashred2() {
   if (!_exit) {
     Future.delayed(Duration(milliseconds: _timeDistance), () {
       red = Colors.red;
       if (mounted) {
         setState(() {});
       }
       Future.delayed(Duration(milliseconds: _timeDistance), () {
         _closeRed();
         Future.delayed(Duration(milliseconds: _timeDistance), () {
           red = Colors.red;
           if (mounted) {
             setState(() {});
           }
           Future.delayed(Duration(milliseconds: _timeDistance), () {
             _closeRed();
             singleTimess++;

             if (singleTimess < singleTimes) {
               _flashBlue();
             } else {
               singleTimess = 0; // 单词爆闪归零
               _flashrb();
             }
           });
         });
       });
     });
   }
 }

 /**
  *  红蓝一起亮
  */
 final int _recycleTimes = 6;
 int countRec = 0;

 _flashrb() {
   Future.delayed(Duration(milliseconds: _timeDistance), () {
     red = Colors.red;
     blue = Colors.blue;
     Future.delayed(Duration(milliseconds: _timeDistance), () {
       _closeRed();
       _closeBlue();
     });
     countRec++;
     print("次数 $countRec");
     if (countRec < _recycleTimes) {
       Future.delayed(Duration(milliseconds: _timeDistance), () {
         _flashrb(); //不到4 就递归
       });
     } else {
       countRec = 0;
       _flashBlue(); // 全亮4次后重新开始单色爆闪
     }
     if (mounted) {
       setState(() {});
     }
     // _flash1();
   });
 }

 _showRed() {
   Future.delayed(Duration(milliseconds: _timeDistance), () {
     red = Colors.red;
     if (mounted) {
       setState(() {});
     }
     Future.delayed(Duration(milliseconds: _timeDistance), () {
       _closeRed();
     });
   });
   if (!_isRun) {}
 }

 _closeRed() {
   // red = Color(0xFFAB130B);
   red = closeLed;
   if (mounted) {
     setState(() {});
   }
 }

 /**
  *  设为 true  停止所有
  */
 bool _exit = false;

 _showBlue() {
   Future.delayed(Duration(milliseconds: _timeDistance), () {
     blue = Colors.blue;
     if (mounted) {
       setState(() {});
     }
     Future.delayed(Duration(milliseconds: _timeDistance), () {
       _closeBlue();
       blue = Colors.blue;
     });
   });
   if (!_isRun) {}
 }
                                                                              
 _closeBlue() {
   // blue = Color(0xFF040C88);
   blue = closeLed;
   if (mounted) {
     setState(() {});
   }
 }

 @override
 void dispose() {
   _exit = true;
   print("退出 $_exit");
   super.dispose();
 }
}
相关推荐
Ulyanov几秒前
PyVista与Tkinter桌面级3D可视化应用实战
开发语言·前端·python·3d·信息可视化·tkinter·gui开发
计算机程序设计小李同学几秒前
基于Web和Android的漫画阅读平台
java·前端·vue.js·spring boot·后端·uniapp
lkbhua莱克瓦243 分钟前
HTML与CSS核心概念详解
前端·笔记·html·javaweb
沛沛老爹4 分钟前
从Web到AI:Agent Skills CI/CD流水线集成实战指南
java·前端·人工智能·ci/cd·架构·llama·rag
GISer_Jing12 分钟前
1.17-1.23日博客之星投票,每日可投
前端·人工智能·arcgis
代码游侠17 分钟前
学习笔记——ARM Cortex-A 裸机开发实战指南
linux·运维·开发语言·前端·arm开发·笔记
m0_7482546620 分钟前
CSS 编辑器
前端·css·编辑器
Amumu1213822 分钟前
React扩展(二)
前端·javascript·react.js
rqtz26 分钟前
网页响应式布局方法
前端·css·响应式
郝学胜-神的一滴27 分钟前
Qt与Web混合编程:CEF与QCefView深度解析
开发语言·前端·javascript·c++·qt·程序人生·软件构建