flutter3-os-admin跨平臺手機后臺OS系統。
原創Flutter3.22+Dart3.4+Getx+fl_chart等技術開發仿ios手機桌面OA管理系統。自研柵格化布局引擎、自定義桌面壁紙、小部件、底部Dock菜單、可拖拽懸浮球等功能。
全新自研柵格化OS菜單布局引擎。
使用技術
- 編輯器:VScode
- 技術框架:Flutter3.22.1+Dart3.4.1
- 路由/狀態管理:get^4.6.6
- 本地存儲:get_storage^2.1.1
- svg圖片插件:flutter_svg^2.0.10+1
- 圖表組件:fl_chart^0.68.0
- 國際化時間:intl^0.19.0
之前有分享一款uniapp+vue3跨端仿ios手機桌面系統。
https://blog.csdn.net/yanxinyun1990/article/details/139103578
編譯到windows端效果依然完美顯示。
項目結構
采用最新版flutter3.22+dart3.4構建項目,探索全新的手機OA后臺管理系統新模式。
目前該項目已經發布到我的原創作品集,如果有需要,歡迎去下載使用。
https://gf.bilibili.com/item/detail/1106107011
main.js配置
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'utils/index.dart';// 柵格模板
import 'layouts/desk.dart';// 路由管理
import 'router/index.dart';void main() async {// 初始化get_storage存儲await GetStorage.init();initializeDateFormatting();runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return GetMaterialApp(title: 'Flutter WeOS',debugShowCheckedModeBanner: false,theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),useMaterial3: true,// 修復windows端字體粗細不一致fontFamily: Platform.isWindows ? 'Microsoft YaHei' : null,),home: const DeskLayout(),// 初始化路由initialRoute: Utils.isLogin() ? '/' : '/launch',// 路由頁面getPages: routes,);}
}
flutter3數字解鎖
一改以往輸入框驗證模式,使用全新自研的數字密碼解鎖新模式。
使用 AnimatedSwitcher
和 FadeTransition
實現動畫效果。
@override
Widget build(BuildContext context) {return Layout(extendBodyBehindAppBar: true,body: Container(padding: const EdgeInsets.all(20.0),child: AnimatedSwitcher(duration: const Duration(milliseconds: 250),// 動畫控制transitionBuilder: (child, animation) {return FadeTransition(opacity: animation,child: ScaleTransition(// scale: animation,scale: animation.drive(Tween(begin: 0.9, end: 1.0).chain(CurveTween(curve: Curves.easeOut))),child: child,),);},// 當內容有變化的時候就會觸發動畫child: splashScreen ? GestureDetector(// 修復Column和Row組件,點擊空白處無響應問題behavior: HitTestBehavior.translucent,child: Column(children: [...],),onPanStart: (details) {setState(() {swipeY = details.globalPosition.dy;});},onPanUpdate: (details) {double posY = swipeY - details.globalPosition.dy;if(posY > 100) {setState(() {splashScreen = false;});}},):Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [...],),),),),);
}
Column(children: [const Text('數字密碼解鎖', style: TextStyle(color: Colors.white, fontSize: 14.0),),const SizedBox(height: 10.0,),Wrap(spacing: 15.0,children: List.generate(passwordArr.length, (index) {return AnimatedContainer(duration: const Duration(milliseconds: 300),height: 10.0,width: 10.0,decoration: BoxDecoration(color: int.parse(passwordArr[index]) <= pwdValue.length ? Colors.white : Colors.white.withOpacity(0.01),border: Border.all(color: Colors.white),borderRadius: BorderRadius.circular(50.0),),);})),],
),
Container(width: 250.0,margin: const EdgeInsets.only(top: 50.0),child: Wrap(spacing: 15.0,runSpacing: 15.0,alignment: WrapAlignment.center,children: List.generate(keyNumbers.length, (index) {return Material(type: MaterialType.transparency,child: Ink(height: 60.0,width: 60.0,decoration: BoxDecoration(color: Colors.white24,border: Border.all(color: Colors.white24, width: .5),borderRadius: BorderRadius.circular(50.0),),child: InkWell(borderRadius: BorderRadius.circular(50.0),overlayColor: WidgetStateProperty.all(Colors.white38),child: DefaultTextStyle(style: const TextStyle(color: Colors.white, fontFamily: 'arial'),child: Column(children: [const SizedBox(height: 10.0,),Text(keyNumbers[index]['num'], style: const TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),),Text(keyNumbers[index]['letter'], style: const TextStyle(fontSize: 10.0),),],),),onTap: () {handleClickNum(keyNumbers[index]['num']);},),),);})),
),
flutter3桌面os布局
桌面布局分為柵格式菜單+底部Dock菜單+拖拽懸浮球。
@override
Widget build(BuildContext context) {return Scaffold(extendBodyBehindAppBar: widget.extendBodyBehindAppBar,appBar: widget.appBar ?? AppBar(forceMaterialTransparency: true,backgroundColor: Colors.transparent,foregroundColor: Colors.white,toolbarHeight: 0,),body: Center(child: Stack(children: [// 壁紙皮膚if(widget.showBackground)Obx(() => Container(decoration: BoxDecoration(image: DecorationImage(image: AssetImage('${skinController.skinUrl}'),fit: BoxFit.fill,),),)),Flex(direction: Axis.vertical,crossAxisAlignment: CrossAxisAlignment.start,children: [// 頂部插槽Container(child: widget.header,),// 內容區域Expanded(child: widget.body ?? Container(),),// 底部插槽Container(child: widget.footer,),],),// 額外插槽Container(child: widget.extra,),],),),);
}
flutter3桌面os菜單
/** ================== 桌面os菜單配置項 ==================* [label] 圖標標題* [imgico] 圖標(本地或網絡圖片) 當type: 'icon'則為uni-icons圖標名,當type: 'widget'則為自定義小部件標識名* [type] 圖標類型(icon | widget) icon為uni-icons圖標、widget為自定義小部件* [path] 跳轉路由頁面* [link] 跳轉外部鏈接* [hideLabel] 是否隱藏圖標標題* [background] 自定義圖標背景色* [size] 柵格磁貼布局(16種) 1x1 1x2 1x3 1x4、2x1 2x2 2x3 2x4、3x1 3x2 3x3 3x4、4x1 4x2 4x3 4x4* [onClick] 點擊圖標回調函數*/
只需配置children
參數,即可生成一個二級彈窗菜單。
// 桌面os菜單配置 Q:282310962
List deskMenus = [...{'uid': '3u85fb90-12c4-11e1-840d-7b25c5ee775a','list': [{'label': 'Flutter3.22', 'imgico': 'assets/images/flutter.png', 'link': 'https://flutter.dev/'},{'label': 'Dart中文官方文檔', 'imgico': 'assets/images/dart.png', 'link': 'https://dart.cn/'},...{'label': '日歷', 'imgico': const Calendar1x1(), 'type': 'widget', 'path': '/calendar', 'background': const Color(0xffffffff),},{'label': '首頁', 'imgico': const Icon(Icons.home_outlined), 'type': 'icon', 'path': '/home'},{'label': '工作臺', 'imgico': const Icon(Icons.poll_outlined), 'type': 'icon', 'path': '/workplace'},{'label': '組件','children': [{'label': '組件', 'imgico': 'assets/images/svg/component.svg', 'path': '/component'},...]},{'label': '管理中心','children': [{'label': '個人主頁', 'imgico': 'assets/images/svg/my.svg', 'path': '/ucenter'},...]},{'label': '編程開發','children': [{'label': 'Github', 'imgico': 'assets/images/svg/github.svg', 'background': const Color(0xff607d8b),},{'label': 'Flutter', 'imgico': 'assets/images/flutter.png', 'background': const Color(0xFFDAF2FA),},{'label': 'ChatGPT', 'imgico': 'assets/images/svg/chatgpt.svg', 'background': const Color(0xFF15A17F),},...]},{'label': '關于', 'imgico': const Icon(Icons.info), 'type': 'icon','onClick': () => {...}},{'label': '公眾號', 'imgico': const Icon(Icons.qr_code), 'type': 'icon','onClick': () => {...}},]}...
];
綜上就是flutter3.22+getx實戰手機桌面os系統的一些分享,希望對大家有所幫助~
https://blog.csdn.net/yanxinyun1990/article/details/138317354
https://blog.csdn.net/yanxinyun1990/article/details/136996521
https://blog.csdn.net/yanxinyun1990/article/details/136410049