3. 如何运行和打包
- 获取依赖包:
flutter pub get
- 运行命令:
flutter run -d macos
, 或直接通过AndroidStudio
选择设备运行
- 打包macos:
flutter build macos
,在build/macos/Build/Release
中可以看到应用
二、. FlutterUnit mac 功能简述
由于mac端录屏出的gif太大了,就不放动图了,所有功能同
移动端
使用详情可参见: 【 FlutterUnit 食用指南】 开源篇
本文会说一下我做FlutterUnit mac端的原因和一些界面的变动。
1. FlutterUnit主页界面
- 对于桌面来说,最麻烦的当属
导航栏
了,如果直接用底栏或顶栏,那会非常丑 - 通常需要左栏,当然这些对于
动手能力超强
的我,都是小菜。有就用,没有就造。
- 桌面程序
一般都很宽
,可以用GridView根据情况分多栏显示item,这样会好看些。
2. 左滑菜单栏
- 单击
右侧导航栏底部的设置
可以打开左侧的菜单 - 也可以通过
左边滑
来打开左侧的菜单,菜单内容保持一致,功能保持一致
3. 组件详情页
- 调整
相关组件
和介绍的位置,同排显示,好看一些。
- 由于
Share插件
还不支持macos,这里代码分享的功能直接改成代码复制
。 - 代码面板的展开功能依旧存在,可通过展开按钮进行展开。
4.收藏集功能正常
- 收藏集的
增删改查操作
和移动端保持一致
5. 组件详情页的添加收藏
功能保持一致
6. 搜索页
- 模糊查询
- 星级查询
其实适配到macos我就花了小半天的时间。主要就是主页右边栏的设计和实现。
这也得益于项目的清晰,我知道哪些文件是干嘛的,所以抽离是很重要的,酌情抽出变量、方法或类,不要什么东西都塞在一起,一旦代码变动就是灭顶之灾。另外bloc维护的业务逻辑可以丝毫不动,只需将相关页面的一些结构进行调整即可,这也是bloc的优势。
三、做FlutterUnit mac端的原因
1. 其一: 装X
如果活着不是为了装X,那一切都将毫无意义。----张风捷特烈
2. 其二: 让更多人知道flutter的桌面应用
我接触flutter也有一年半了,半年前开始从事
flutter桌面应用
的开发,踩过很多坑,也学到很多东西。一切的经历将我对flutter的理解提升了一个层次。可能很多人还在观望flutter在移动端的情况
。却已不知,flutter的桌面应用已在茁壮成长,特别是很多三方插件已经有macos支持。
一套代码运行在所有的设备上,我称为
统一的跨平台解决方案
,由于设备的应用场景不同,大小不同,强行进行适配感觉维护的成本太高,这是平台本身的局限性。
我越来越感觉Flutter 并非是一个统一的跨平台解决方案,而且可以给编程者一个跨平台的可能性。
其中最重要的一点是: 任何一个程序员,即使它不会C++、C#、Java、Js,也可以通过flutter/dart代码写出mac程序、写出windows程序、写出android程序、写出ios程序、写出linux程序、写出web程序,这就是Flutter所提供的可能性。做梦都没想过玩移动端的我能做出一个mac程序、写出一个windows程序
。
当然只会flutter/dart,瓶颈也会存在的,对于平台的特性你不太可能完全理解。但也无须了解所有的平台特性,毕竟软件的开发并非一个人的事。插件生态的日益丰富,会逐渐降低flutter开发者对平台的依赖性。对于特定领域、特定功能的软件、也许会出现各端的
flutter插件师
职业。
天下大势,合久必分
,因为没有一个人可以抗住所有的事,一人玩转六端平台也不切实际
。精一而协同,各司其职
,这是解决大问题的有效手段。就像人体由各种功能的细胞共同协作,维持个体生命,而不是一个万能细胞统合作用。
统一的跨平台解决方案
是个美好而伟大的梦。就像让所有人都说一种语言沟通一样,也许只是一个梦而已。它也许不会终止于Flutter。但Flutter所提供的让编程者跨平台的可能性,就像一个万能的翻译机,这无疑是里程碑式的,会闪烁它的光芒。在此,虽然我个人能力微薄,但愿举起这星火,FlutterUnit将是这根火把,与我前行。你们要来,便随; 要离,便去, 皆与我无关。
3. 其三: 最重要的一点,为了数据维护的方便
其实除了
FlutterUnit
之外,之前还有一个FlutterUnit tool
的项目
这个项目是用来维护数据库的。看过FlutterUnit
源码的应该都知道,FlutterUnit
是由本地数据库驱动的。没错,就是那个flutter.db
。其中关于组件信息
、详情信息
、详情代码
、收藏集信息
全部都储存在这个数据库中。
但这样做有个很大的缺点:
数据的更新非常困难
,比如修改了实例代码,或修复了文案,或者再拓展一个组件都要去修改数据库,这样维护的成本非常高。于是聪明的我
想到了一个解决方案。定义规则
和解析规则
。
于是我花了两天,对所以的组件源码进行重构,满足如下格式
/// create by 张风捷特烈 on 2020-03-24
/// contact me by email 1981462002@qq.com
/// 说明:
///
// {
// “widgetId”: 34,
// “priority”: 1,
// “name”: “Divider颜色和粗细”,
// “subtitle”: “【color】: 颜色 【Color】\n”
// “【thickness】: 线粗细 【double】”,
// }
import ‘package:flutter/material.dart’;
class CustomDivider extends StatelessWidget {
@override
Widget build(BuildContext context) {
var dataColor = [
Colors.red, Colors.yellow,
Colors.blue, Colors.green];
var dataThickness = [1.0, 2.0, 4.0, 6.0];
var data = Map.fromIterables(dataColor, dataThickness);
return Column(
children: dataColor
.map((e) => Divider(
color: e,
thickness: data[e],
))
.toList(),
);
}
}
写在最后
由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~
将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。
提升架构认知不是一蹴而就的,它离不开刻意学习和思考。
**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。
希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!
转发+点赞+关注,第一时间获取最新知识点
Android架构师之路很漫长,一起共勉吧!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
。
希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!
转发+点赞+关注,第一时间获取最新知识点
Android架构师之路很漫长,一起共勉吧!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!