博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
北京实时公交查询——Flutter 入坑实战
阅读量:5829 次
发布时间:2019-06-18

本文共 1953 字,大约阅读时间需要 6 分钟。

项目起因

本人租房在融泽嘉园,每天去上地上班,日常交通路线是乘坐963到软件园广场,再转447/446/982/365到上地七街,但有好几次等963公交就等了30到40分钟(西二旗太堵了),之后我通过“北京公交”微信公众号来查看963到站信息再出门,这样就只需计算好时间出门,每次都能恰好赶上。

然而,恕我直言,通过微信公众号查询的步骤太繁琐了:

打开微信 ->搜索北京公众号-> 点击实时查询公交菜单 -> 选择公交路线-> 选择方向 ->选择当前站点 -> 查询

操作貌似不是很复杂呀,额,我有个偏执的观点,玩游戏选区时,我都尽量往靠前的区选,这样以后领取奖励的时候不用滑太久,不然->_->

所以,为了化解我心中的偏执,我打算写一个App,简化查询实时公交到站信息的流程,本来打算用Android写的,但Google推出的Flutter移动UI框架有一段时间了,作为一个移动开发从业者,不尝试一下貌似有点不太给面子。膜拜了下Flutter Live里展示的几个有意思的demo,就开始学习Dart语法了。

开启准备

前期工作主要分为两部分,一是接口数据抓取,分析,处理,二是Flutter环境搭建,学习Dart语法规范,Flutter组件使用。

数据处理

打开,打开浏览器“检查”,通过操作实时公交查询,分析发出的请求和请求结果,最后提取出所需要的几个接口

获取北京所有公交路线

http://www.bjbus.com/home/index.php

根据所选路线获取该路线的路线方向

根据所选路线,路线的方向,获取该路线上的所有站点列表

根据所选路线,路线方向,当前站点获取该路线上的公交到站信息

http://www.bjbus.com/home/ajax_rtbus_data.php?act=busTime&selBLine=10&selBDir=5582831127904445311&selBStop=3

接下来就是对上述结果进行html解析,json解析了,具体可查看项目源码。

Flutter学习

入坑开发

Flutter异步

Dart是一个单线程的语言,Dart中实现异步的方式是:当遇到有需要延迟的运算(async)时,将其放入到延迟运算的消息队列(await)中去,把不需要延迟运算的部分先执行掉,最后再来处理延迟运算的部分。

Dart的命令行应用可以通过创建isolates来达到并行运行,但isolates之间不会共享内存,它们就像几个运行在不同进程中的app,通过传递message来进行交流。除非明确指出运行在额外的isolates或者workers中的代码,所有的应用代码都是运行在应用的main isolate中

一个Dart应用开始的标志是它的main isolate执行了main方法。当main方法退出后,main isolate的线程就会去逐一处理消息队列中的消息,消息队列有两种:

  • Event队列

包括I/O,mouse events,drawing events,timers,isolate之间的message等。可以通过new Future或者new Future.delayed()来向event队列中添加事件

  • Microtask队列

只包含来自当前isolate的内部代码,用scheduleMicrotask()方法添加

最后代码执行顺序为,main方法代码-> Microtask队列 ->Event队列,所有消息队列里的事件执行按照先进先出原则顺序,

Flutter控件

在Flutter但世界里,一切都是Weight,,不管是输入框,图片,还是布局容器,甚至居中,内边距,外边距,都是Weight,这些Weight相互嵌套构成完整的界面,因此需要运用设计模式编写优雅的代码。Flutter自带了十分丰富等控件,虽然也存在一些不足,但随着Flutter社区不断壮大,相信日后必将逐渐完善,本次项目使用了不少组件,如SimpleDialog,ListView,Stepper

Flutter动画

Flutter动画在本次项目中主要有三种

  • 闪屏界面的应用图标放大动画,采用Animation和AnimationController控制
  • 页面切换动画,通过自定义Route实现
  • Flare动画,参考,在网站上有许多Demo

启动页面和闪屏页面

App每次刚开始启动由于应用需要初始化资源,往往有一段白屏,显示白屏是由于Android默认给启动时的界面设置了一个白色背景,我们可以通过自己修改配置来改变启动页背景。

而闪屏页面,即在启动页之后显示,之后需要移除任务栈,具体设置方法可以参考下述文章

项目地址

感兴趣的道友也可以可以下载项目后本地打包

转载地址:http://mildx.baihongyu.com/

你可能感兴趣的文章
python+selenium之字符串切割操作
查看>>
串结构练习——字符串匹配
查看>>
linux下输入密码不回显
查看>>
《构建之法》读书笔记
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>
android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏
查看>>
【ERP】如何在多行数据块中实现仅能勾选唯一的主联系人
查看>>
Oracle 数据库优化的R方法(Method R)
查看>>
CentOS最小化安装系统开启网卡
查看>>
互联网+升级到智能+ 开启万物智联新时代
查看>>
Linux文本编辑器之Nano
查看>>
【原】IOS中KVO模式的解析与应用
查看>>
理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
查看>>
[MFC] CList
查看>>
[Android Pro] 完美Android Cursor使用例子(Android数据库操作)
查看>>
c++中sizeof的分析
查看>>
线程间操作无效: 从不是创建控件的线程访问它的解决方法
查看>>
hdu 1236 排名
查看>>
PHP面向对象深入研究之【继承】,减少代码重复
查看>>
RBAC权限管理
查看>>