开源 从零上手flutter一个月可以做出什么东西?

前言

上手flutter 差不多一个月 的时间了,总结一下吧!毕竟沉淀(摸鱼)两个月了,还是得重新记录记录下。

先说一下本来是打算空闲时间写个app来玩耍一下的,一开始本来想用原生安卓的,后来又想跨平台.然后就筛选了3个方案

  • react-native: facebook旗下的,但是网上找了下资料,发现大多数都是几年前的,在说对react不是特别熟悉。 故放弃。
  • uni-app:国内团队,目前公司小程序就是用的这个,不想在入坑了。故放弃。
  • flutter: 谷歌开源,国内也有很多公司在使用,比如最早的 闲鱼,然后上手写了个demo感觉还不错,再加上本身就是个UI框架。最终决定使用flutter开发。

在当时决定时我是根本没有接触过flutter的,就当作学习了,给予最大帮助的还是github(全球最大的同性交友网站gayhub),官方文档。
也就每天下班后和周末有时间可以写写

什么是flutter?

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。简单来说,Flutter是一款移动应用程序SDK,包含框架、控件和一些工具,可以用一套代码同时构建Android和iOS应用,并且性能可以达到原生应用一样的性能。详情请参考Flutter简介

flutter使用心得

从我的观点来看的话 flutter还是很不错,生态也在慢慢的发展,就是这个套娃语法有时候看着有点吃力,不过拆分一下还是可读的。

目前flutter的第三方库还是能满足日常的app的,反正我写个视频类的app还是行的,说到这就得吐槽下flutter的视频方面感觉比较弱一点,官方的video player 又太麻烦,比较出名点的有chewiefijkplayer。支持自定义UI。
可能部分手机会有掉帧的情况,网上也有人遇到过,不过我身边除了我的手机好像并没有出现这样的情况(oneplus 5T 钉子户)
写到这突然就不知道怎么写了,感觉很乱,还是结合一下具体项目说一下吧。

开源 alltv 一个app看全网主播

写这个app也只是为了图个方便,在一个想学学新的的东西。

路由管理 fluro

其实本身app页面并不多,flutter原生路由也可以满足,但还是决定用下框架,项目使用fluro很痛心的一点,框架本身并不支持中文参数,所以得手动处理。
详情请见

网络请求 dio

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等。
dio

视屏播放器

采用 开源fijkplayer作者好像也在掘金。基于b站开源的ijkplayer 具体请见 fijkplayer

其他的就不详细说了
dependencies:
  flutter:
    sdk: flutter
  # storage
  shared_preferences: ^0.5.6+3
  # 状态管理
  provider: ^4.0.5+1
  # 屏幕适配
  flutter_screenutil: ^1.1.0
  # 路由管理
  fluro: "^1.6.3"
  # 下拉刷新
  pull_to_refresh: ^1.5.7
  # toast
  fluttertoast: ^4.0.0
  # 网络请求
  dio: ^3.0.9
  cached_network_image: ^2.2.0
  #websocket
  web_socket_channel: ^1.1.0
  # 视频播放
  fijkplayer: ^0.8.3
  crypto: ^2.1.3
  cupertino_icons: ^0.1.2

JSON to Dart

安利一个比较方面的工具,flutter是不支持反射的,那么后端获取的json 怎么快速转成对象呢?
那么这个网站比较方便 json to dart

flutter 踩坑日记

flutter build apk 真机无法请求网络

具体原因是安卓高版本默认不开启网络访问权限,需要自己手动开启,
在这个文件里,android\app\src\profile\AndroidManifest.xml,manifest 里添加这段代码:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

你以为就完了?还有呢,在src\main下面也有一个AndroidManifest.xml,同样需要相同的操作,主要不要放到application下了。

不能访问http请求

原因:IOS和Android 9.0+对非HTTPS请求做了一些限制,不能直接访问Http请求,在Android中会出现net:ERR_CLEARTEXT_NOT_PERMITTED的错误
解决办法

  • 在src/res/xml下面创建network_security_config.xml,配置如下所示:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
     <base-config cleartextTrafficPermitted="true" />
</network-security-config>
  • 在src\main下的AndroidManifes.xml上添加:
 <?xml version="1.0" encoding="utf-8"?>
    <manifest ... >
        <application android:networkSecurityConfig="@xml/network_security_config">
            <!-- ... -->
        </application>
    </manifest>

其实项目中往往不止这些坑,只不过当时没记录,这时候你很难想到了。

项目地址

传送门:github
apk蓝奏云

END

如果觉得对你有所帮助,那就麻烦点个Star,谢谢!