詳解用flutter制作上班摸魚(yú)應(yīng)用
網(wǎng)上最近看到了個(gè)摸魚(yú)應(yīng)用,還挺好玩的,我就自己用flutter寫(xiě)了一個(gè)。
之前我有用flutter制作過(guò)mobile應(yīng)用,但是沒(méi)有在desktop嘗試過(guò);畢竟2.0大更新,我這里就在這試手一下,并說(shuō)說(shuō)flutter的體驗(yàn).
當(dāng)前flutter環(huán)境 2.8

增加flutter desktop支持 (默認(rèn)項(xiàng)目之存在ios,android項(xiàng)目包)
flutter config --enable-<platform>-desktop
我這里是mac,因此platform=macos,詳細(xì)看flutter官網(wǎng)
代碼十分簡(jiǎn)單,UI部分就不講了
在摸魚(yú)界面,我是用了 Bloc 做倒計(jì)時(shí)計(jì)算邏輯,默認(rèn)摸魚(yú)時(shí)長(zhǎng)15分鐘
MoYuBloc() : super(MoyuInit()) {
on(_handleMoyuStart);
on(_handleUpdateProgress);
on(_handleMoyuEnd);
}摸魚(yú)開(kāi)始事件處理
// handle moyu start action
FutureOr<void> _handleMoyuStart(
MoyuStarted event, Emitter<MoyuState> emit) async {
if (_timer != null && _timer!.isActive) {
_timer?.cancel();
}
final totalTime = event.time;
int progressTime = state is MoyuIng ? (state as MoyuIng).progressTime : 0;
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
add(MoyuProgressUpdated(totalTime, ++progressTime));
if (progressTime >= totalTime) {
timer.cancel();
add(MoyuEnded());
}
});
emit(MoyuIng(progress: 0, progressTime: 0));
}摸魚(yú)進(jìn)度更新
// handle clock update
FutureOr<void> _handleUpdateProgress(
MoyuProgressUpdated event, Emitter<MoyuState> emit) async {
final totalTime = event.totalTime;
final progressTime = event.progressTime;
emit(
MoyuIng(progress: progressTime / totalTime, progressTime: progressTime),
);
}摸魚(yú)結(jié)束,釋放結(jié)束事件
// handle clock end
FutureOr<void> _handleMoyuEnd(
MoyuEnded event, Emitter<MoyuState> emit) async {
emit(MoyuFinish());
}總結(jié)3個(gè)event (摸魚(yú)開(kāi)始,進(jìn)程更新,摸魚(yú)結(jié)束)
abstract class MoyuEvent {}
class MoyuStarted extends MoyuEvent {
final int time;
final System os;
MoyuStarted({required this.time, required this.os});
}
class MoyuProgressUpdated extends MoyuEvent {
final int totalTime;
final int progressTime;
MoyuProgressUpdated(this.totalTime, this.progressTime);
}
class MoyuEnded extends MoyuEvent {
MoyuEnded();
}其中3個(gè)state (摸魚(yú)初始,正在摸魚(yú),摸魚(yú)結(jié)束)
abstract class MoyuState {}
class MoyuInit extends MoyuState {}
class MoyuIng extends MoyuState {
final double progress;
final int progressTime;
MoyuIng({required this.progress, required this.progressTime});
}
class MoyuFinish extends MoyuState {}啟動(dòng)摸魚(yú)使用, 記錄總時(shí)長(zhǎng)和消耗時(shí)間,計(jì)算進(jìn)度百分比,更新UI進(jìn)度條
下面是界面更新邏輯
BlocConsumer<MoYuBloc, MoyuState>(
builder: (context, state) {
if (state is MoyuIng) {
final progress = state.progress;
return _moyuIngView(progress);
} else if (state is MoyuFinish) {
return _replayView();
}
return const SizedBox();
},
listener: (context, state) {},
listenWhen: (pre, cur) => pre != cur,
),很簡(jiǎn)單 最重要的是進(jìn)度狀態(tài),其次結(jié)束后是否重新摸魚(yú)按鈕
構(gòu)建運(yùn)行flutter應(yīng)用
flutter run -d macos
最后結(jié)果展示


總結(jié)下flutter desktop使用
- 簡(jiǎn)單上手,按著官網(wǎng)走基本沒(méi)問(wèn)題,基本上沒(méi)踩上什么雷,可能項(xiàng)目比較簡(jiǎn)單
- 構(gòu)建流程簡(jiǎn)單,hot reload強(qiáng)大
- 性能強(qiáng)大,啟動(dòng)速度很快,并且界面無(wú)頓挫感
比較遺憾的事desktop電腦構(gòu)建系統(tǒng)獨(dú)立,mac環(huán)境下無(wú)法構(gòu)建windows應(yīng)用,有點(diǎn)小遺憾.
項(xiàng)目完全開(kāi)源 可以前往GitHub查看 不要忘點(diǎn)個(gè)star??
https://github.com/lau1944/moyu_app
到此這篇關(guān)于詳解用flutter制作上班摸魚(yú)應(yīng)用的文章就介紹到這了,更多相關(guān)flutter 摸魚(yú)應(yīng)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android?Jetpack組件ViewModel基本用法詳解
這篇文章主要為大家介紹了Android?Jetpack組件ViewModel基本用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android3.0 ActionBar導(dǎo)航標(biāo)題欄使用解析
這篇文章主要為大家詳細(xì)解析了Android3.0 ActionBar導(dǎo)航標(biāo)題欄的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android getSystemService用法實(shí)例總結(jié)
這篇文章主要介紹了Android getSystemService用法,結(jié)合實(shí)例形式總結(jié)分析了getSystemService獲取系統(tǒng)Service的相關(guān)使用方法與注意事項(xiàng),需要的朋友可以參考下2016-01-01
android使用ViewPager實(shí)現(xiàn)圖片自動(dòng)切換
這篇文章主要為大家詳細(xì)介紹了android使用ViewPager實(shí)現(xiàn)圖片自動(dòng)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
Android畫(huà)板開(kāi)發(fā)之撤銷(xiāo)反撤銷(xiāo)功能
這篇文章主要為大家詳細(xì)介紹了Android畫(huà)板開(kāi)發(fā)之撤銷(xiāo),反撤銷(xiāo)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Android實(shí)時(shí)文件夾創(chuàng)建方法
這篇文章主要介紹了Android實(shí)時(shí)文件夾創(chuàng)建方法,涉及基于Activity實(shí)現(xiàn)文件實(shí)時(shí)查詢(xún)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
一款A(yù)ndroid APK的結(jié)構(gòu)構(gòu)成解析
本篇文章介紹了我在學(xué)習(xí)過(guò)程中對(duì)于Android 程序的理解總結(jié),刨析了apk的組成與產(chǎn)生過(guò)程,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-10-10
TableLayout(表格布局)基礎(chǔ)知識(shí)點(diǎn)詳解
在本文里我們給大家分享了關(guān)于TableLayout(表格布局)的相關(guān)基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-02-02
Flutter路由守衛(wèi)攔截的實(shí)現(xiàn)
路由守衛(wèi)攔截最常見(jiàn)的應(yīng)用場(chǎng)景就是對(duì)用戶(hù)數(shù)據(jù)權(quán)限的校驗(yàn),本文主要介紹了Flutter路由守衛(wèi)攔截的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
android計(jì)算pad或手機(jī)的分辨率/像素/密度/屏幕尺寸/DPI值的方法
本文將介紹手機(jī)布局/界面設(shè)計(jì)/分辨率/密度相關(guān),接下來(lái)介紹android計(jì)算pad或手機(jī)的分辨率像素等等的方法,感興趣的朋友可以了解下,希望本文可以幫助你2013-01-01

