Flutter真香,我用它写了个桌面版JSON解析工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter真香,我用它写了个桌面版JSON解析工具相关的知识,希望对你有一定的参考价值。

参考技术A

Flutter支持稳定的桌面设备开发已经一段时间了,不得不说,Flutter多平台支持的特性真的很香。我本人并没有任何桌面开发的经验,但仍然使用Flutter开发出了一个桌面版小程序,功能很简单,就是对输入的json做格式化处理和转模型。

话不多说,先来看看实际效果。 项目源码地址

开发环境如下:

Flutter : 2.8.1

Dart : 2.15.1

IDE : VSCode

JSON作为我们日常开发工作中经常要打交道的一种数据格式,它共有6种数据类型: null , num , string , object , array , bool 。我们势必对它又爱又恨。爱他因为他作为数据处理的一种格式确实非常方便简洁。但是在我们做Flutter开发中,又需要接触到json解析时,就会感觉非常棘手,因为flutter没有反射,导致json转模型这块需要手写那繁杂的映射关系。就像下面这样子。

数据量少还能接受,一旦量大,那么光手写这个解析方法都能让你怀疑人生。更何况手写还有出错的可能。好在官方有个工具**json_serializable**可以自动生成这块转换代码,也解决了flutter界json转模型的空缺。当然,业界也有专门解析json的网站,可以自动生成dart代码,使用者在生成后复制进项目中即可,也是非常方便的。

本项目以json解析为切入点,和大家一起来看下flutter是如何开发桌面应用的。

要让我们的flutter项目支持桌面设备。我们首先需要修改下flutter的设置。如下,让我们的项目支持 windows 和 macos 系统。

接下来使用 flutter create 命令创建我们的模版工程。

创建完项目后,我们就可以 run 起来了。

先来看下整体界面,界面四块,分别为功能模块、文件选择模块、输入模块、输出模块。

我们在新建一个桌面应用时,默认的模版又一个Appbar,此时应用可以用鼠标拖拽移动,放大缩小,还可以缩到很小。但是,我们一旦去掉这个导航栏,那么窗口就不能用鼠标拖动了,并且我们往往不希望用户将我们的窗口缩放的很小,这会导致页面异常,一些重要信息都展示不全。因此这里需要借助第三方组件 bitsdojo_window 。通过 bitsdojo_window ,我们可以实现窗口的定制化,拖动,最小尺寸,最大尺寸,窗口边框,窗口顶部放大、缩小、关闭的按钮等。

通过 InkWell 组件,可以捕捉到手势、鼠标、触控笔的移动和停留位置

这个功能是鼠标移动后的UI交互界面。要在窗口上显示一个提示框,可以使用 Overlay 。需要注意的是,由于在 Overlay 上的 text 的根结点不是 Material 风格的组件,因此会出现黄色的下划线。因此一定要用 Material 包一下 text 。并且你必须给创建的 OverlayEntry 一个位置,否则它将全屏显示。

读取说表拖拽的文件一开始想尝试使用 InkWell 组件,但是这个组件无法识别拖拽中的鼠标,并且也无法从中拿到文件信息。因此放弃。后来从文章《Flutter-2天写个桌面端APP》中发现一个可读取拖拽文件的组件 desktop_drop ,能满足要求。

使用开源组件 file_picker ,选完图片后的操作和拖拽选择图片后的操作一致。

Textfield 如果要显示富文本,那么需要自定义 TextEditingController 。并重写 buildTextSpan 方法。

在做导出功能时遇到下列报错,保存提示为没有权限访问对应目录下的文件。

通过Apple的开发文档找到有关权限问题的说明。其中有个授权私钥的key为 com.apple.security.files.downloads.read-write ,表示 对用户的下载文件夹的读/写访问权限 。那么,使用Xcode打开Flutter项目中的mac应用,修改工程目录下的 DebugProfile.entitlements 文件,向 entitlements 文件中添加 com.apple.security.files.downloads.read-write ,并将值设置为YES,保存后重启Flutter项目。发现已经可以向下载目录中读写文件了。

当然,这是正常操作。还有个骚操作就是关闭系统的沙盒机制。将 entitlements 文件的 App Sandbox 设置为NO。这样我们就可以访问任意路径了。当然关闭应用的沙盒也就相当于关闭了应用的防护机制,因此这个选项慎用。

原文地址: https://juejin.cn/post/7069689952459554830

我用php写了个程序,扒了扒北京房租飞涨的真相!

微信ID:coollabs


在北京租房市场上,如果你想租房,主要有这么三种方式:


1、找房屋中介公司

目前市场占有率最高的公司,名叫链家;


2、找长租公寓

目前市场占有率最高的,名叫自如;


3、上找房平台

目前市场占有率最高的,第一是安居客。而今年4月有一家新上线的公司,异军突起极速窜到了前五位,名叫贝壳找房;


这三种方式加起来,几乎决定着你我租房的价格。而更让人惊讶的是,上述几家公司,除了安居客以外,链家、自如、贝壳找房,他们的实际控制人是同一个人。


这就是这几天频繁出现在新闻中的链家集团的老板——左晖。


我用php写了个程序,扒了扒北京房租飞涨的真相!


这件事是我的小学同学程序猿Zero哥向我爆料的。我和Zero哥很多年没见,我只隐约记得他做的糖醋排骨超级好吃。


但是前几天他突然来找我,他说,他打算来北京发展,没想到遇上了一波房租上涨,就觉得很气,于是他用程序员的方式,扒了扒房租上涨背后的事情。


我的反应是:啥是程序员的方式??


我用php写了个程序,扒了扒北京房租飞涨的真相!


总之,在我的强烈要求下,Zero哥在公开合法的基础上,向我展示了他的调查过程,北京的空房子都在谁手上?


首先,如果我们要搞清楚是谁在控制租房市场,那就必须要搞清楚一件事:北京有多少可供出租的房源?它们都在谁的手上?


要调查北京可供出租的房源,可以查询政府的登记信息。


这么重要的信息,Zero哥本来以为北京市规划国土委,应该有统计和公示。于是我们登陆了北京市规划国土委的官网。


我用php写了个程序,扒了扒北京房租飞涨的真相!


但是翻遍了这个网站,却没有找到这样的数据。也就是说,北京市规划国土委并没有公开可供出租的房源信息。


那么其他部门会不会有这个数据呢?我们立刻想到最近北京房租的事情引起了不小的争议,于是自如、相寓和蛋壳被相关部门约谈整改。


我用php写了个程序,扒了扒北京房租飞涨的真相!


我们注意到,这个相关部门名叫北京市住房和城乡建设委员会,也就是北京住建委,看来这是租房行业的监管部门了,于是我们来到了该委员会的官方网站。


我用php写了个程序,扒了扒北京房租飞涨的真相!


可惜的是,我们在这个网站上,看到了很多年度报表和其他数据,但是其中却没有关于租房房源的数据。


我用php写了个程序,扒了扒北京房租飞涨的真相!


那么,房源数据到底在哪里能看到呢?Zero哥的调查结果是租房行业中有一个号称,掌握了最全的真实房源数据的项目叫“楼盘字典”。


我用php写了个程序,扒了扒北京房租飞涨的真相!


这个“楼盘字典”从2008年开始打造,如今据称已经有超过1200TB的数据量。目前记录在库的真实房屋数,已经突破1亿。


但是,这个数据从未对外公开,不仅没有公开过。它还是属于一个私人企业的这个企业,正是链家。


链家自己投资了6个亿,来做这个项目,被投资人认为是比它旗下的20万经纪人更值钱的资产。


我们甚至不知道政府是不是掌握这些数据。


我用php写了个程序,扒了扒北京房租飞涨的真相!


总之,行业内公认的是,目前所知的最全的真实房源数据,掌握在链家的手上。


于是到这里为止,以合法的手段,关于房源的调查就戛然而止了。


好在,我和Zero哥很快想到了新思路:我们能不能从租客可以租到的房源

来推测北京的房源情况?再通过查看从谁手上可以租到这些房子来推测房子在谁手上?


于是我们调查了一下北京租房的市场。对租客来说目前主要有这么三种渠道可以租到房子:


1、房屋中介公司;

2、长租公寓;

3、找房平台;


我们一项一项来调查一下。


首先是,房屋中介公司。


Zero哥首先查询到,根据链家自己在各种网站上的介绍,链家占据了北京70%的中介市场,是北京最大的房地产经纪公司。


我用php写了个程序,扒了扒北京房租飞涨的真相!


顺着这个信息,我们决定查一下,链家的手上有多少可供租房的房源。


于是Zero哥用php写了一个爬虫,用它爬取了一下链家的数据。


Zero哥的爬虫是这样做的:


首先去控制台看加载信息,找到相关数据api,按照请求头里面的所需参数,发送https请求即可,分析完成后使用xpath或者正则表达式工具去匹配你想要的内容,然后插入数据库中,即可完成抓取。


emmm...小编是没听懂……


总之就是,Zero哥爬取到了链家网上,今天可以看到的所有待租的房子,下面是结果:


我用php写了个程序,扒了扒北京房租飞涨的真相!


最终一共爬取到了12393条房源。


也就是说,2018年8月23日,链家网放出来的、普通消费者可以租到的北京的房子是12393间,其中包含了链家网以及旗下的自如整租、自如合租的房子。


从这个数据里,我们发现了一个大问题。。


那就是大概一周前,8月17日北京住建委约谈了几家中介公司最终的结果是

自如、相寓和蛋壳承诺将拿出12万间房子投入市场,其中,自如将拿出8万间。


我用php写了个程序,扒了扒北京房租飞涨的真相!


也就是说,平常的时候链家网+自如一共在网上待租的也就是1万多套房子,但是一被约谈,他们就一口气拿出了8万套房子??


你藏着那8万套房子不放出来干嘛呢??


让人很困惑啊。。


于是,我和Zero哥小皮了一下我们打算扒一扒链家背后的大佬。


根据天眼查的公开信息链家的实际控制人叫做左晖,占有38.88%的股份。


我用php写了个程序,扒了扒北京房租飞涨的真相!


接着我们继续扒,租房的第二种常用手段——长租公寓。


Zero哥同样用爬虫的方式,爬取了自如、蛋壳、蘑菇公寓等,长租公寓平台

最后得出的数据,我们做成了词云图。


这个图是这样的:谁的房源越多,它的名字在图上就会越大,而北京的长租公寓的词云图是这样的——


我用php写了个程序,扒了扒北京房租飞涨的真相!


恩,可以看到,其他的所有平台,和自如相比,差距非常悬殊。


而自如呢,一般被认为是链家孵化的产品,但实际上,它的股权结构非常简单——


我用php写了个程序,扒了扒北京房租飞涨的真相!

左晖持有的对自如的控股达到94.6%!


最后,找房平台。


这是一个竞争异常激烈的领域,在过去的几年中起来的、倒下的不计其数,目前暂居第一的APP叫安居客。


但今年更多的进入大家视野的是一个广告打得最铺天盖地的、目前增长情况惊人的APP,叫做贝壳找房。


贝壳在今年4月才正式上线运营,但目前已经蹿升到了前五的位置,可以说速度非常吓人,而贝壳找房,同样是链家孵化的实际由左晖控制的公司!


我用php写了个程序,扒了扒北京房租飞涨的真相!


看到这里,我的感受是,左老板真的好有钱。。


值得一提的是贝壳找房是今年才开始做的新产品,和链家网相比我们可以理解为链家网做的是自营,而贝壳上,既有链家自营的房子,也有别人家的房子,可以理解成是房产业的“京东”。


说到这里,4年前曾有一家如日中天的平台产品叫做“搜房网”。


当时,左老板曾评价说,搜房在开历史倒车,既做平台公司,又做中介公司,这是全中介行业的公敌。


没想到4年后,左老板自己也做了一家平台公司。


我爱我家的董事长谢勇,是这样评价贝壳找房的:


一家自称是平台的企业,既做线上,又做线下。既当裁判员,又当运动员,在商业伦理上和操作逻辑上是不能被接受的。


我用php写了个程序,扒了扒北京房租飞涨的真相!


总而言之,在北京租房行业的几个主要方向上,左老板的产业要么占据了龙头地位,要么正在飞速增长……


这也难怪前几天,有一条重量级的新闻说原来的我爱我家副总裁胡景晖,因为受到了某些压力辞职,并炮轰自如、蛋壳等长租公寓,以高出市场价20%-40%的价格争抢房源,完全不计成本地进行扩张……


我用php写了个程序,扒了扒北京房租飞涨的真相!


我想,商人逐利是无可厚非的而追求更大的市场占有率,也是正常的商业目标,只是当某一个企业过于强大时,会形成垄断或者寡头,而一旦形成垄断

它们就可以利用资源和资本优势,进行囤积居奇、左右甚至操纵这个行业的走向。


而在北京的租房行业,这样的垄断,似乎正在形成!


爬到这里以后,我和Zero哥陷入了沉思,最后我问Zero哥:我要写结尾了,你还有什么想跟读者说的吗?


Zero哥想了想,认真地说:“我想告诉大家,我坚信php是世界上最好的语言。”


我用php写了个程序,扒了扒北京房租飞涨的真相!


以上是关于Flutter真香,我用它写了个桌面版JSON解析工具的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中解析 JSON 日期

python learning

桌面上的Flutter:Electron又多了个对手

一次惨痛教训让我写了个Windows定期备份文件脚本

Flutter 中使用 OpenAI GPT-3 进行语义化处理

Flutter 中使用 OpenAI GPT-3 进行语义化处理