Flutter笔记-实战, 仿追书
目的
使用flutter对追书神器的一个仿写,主要交流和学习
因为并不是美工,很多颜色方面只是近似,尺寸方面也不严格,所以部分界面可能看起来有些丑
基本是系统提供控件的基础使用,并未去魔改系统的控件,刚接触flutter的人学习起来比较快
效果图
主页 阅读 搜索 讨论实现了书架、书单、排行榜、分类,阅读、换源、搜索、历史、夜间模式等功能
- 路由使用了咸鱼的ARoute框架
- 图标新建了一个自己的图标库(图标都来源自iconfont)
- 对网络状况、系统电量、系统亮度做了处理
不足:
- 未有状态管理(个人偏向于 bloc+rxdart,毕竟是小项目, 界面和逻辑分离总是好的)
- 并未实现全部功能,后续功能应该也不会再添加了
- 有些做的不够严谨,并未单独抽出来放在一个常量文件中(比如颜色、文字等)
- 优化卡顿
关于打包
flutter的打包体验并不好,官网流程:https://flutter.dev/docs/deployment/android
步骤:
- 生成key(jks文件,androidstudio有自带的工具)
-
创建key.properties文件
key.properties
注:keyAlias注意保持一致,androidstudio工具生成的key默认是key0
- 修改app下的biuld.gradle
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
...
//添加
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
...
//添加
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
//修改为release
signingConfig signingConfigs.release
}
}
}
flutter {
source '../..'
}
dependencies {
...
}
- 去掉AndroidMainifest.xml中的
android:debuggable="true"
(允许debug) - 命令行运行 flutter build apk (需要配置环境变量)
F:\flutter\flutter_app>flutter build apk
Initializing gradle... 1.7s
Resolving dependencies... 6.3s
Running Gradle task 'assembleRelease'... 7.6s
Built build\app\outputs\apk\release\app-release.apk (5.6MB).
运行成功,显示生成apk的目录
总结
1. 函数的返回值和参数类型别省略(即便dart可以省略)
举个例子:
main(){
//调用,传递一个int,这里不会进行转换
print("执行后:"+change(1).toString());
}
//自己写的方法,缺省了函数返回值和参数类型
change(i)=> changeNum(i);
//假设是系统写好的方法
double changeNum(double i) => i/2.0;
这里会报: type 'int' is not a subtype of type 'double'
的错误,缺省了最麻烦的还是在解析网络json数据时,这里报的错一般和列表相关,但是并不会定位代码位置,找起来有些麻烦
2. 能局部刷新的最好别全局刷新
举个例子:
我们在ListView中,比如某条消息显示未阅读状态,然后点击这个item,然后进到具体消息详情界面。但是当前这个列表的item需要更新状态,显示已阅读。
这个时候没必要在整个ListView中去调用setState,只需要在item中调用setState(即:item单独抽出来作为一个StatefulWidget)
3. 多层级复杂的列表最好用CustomScrollView或NestedScrollView
使用ListView嵌套ListView会有部分卡顿的情况
最后说明
github地址: https://github.com/leaf-fade/zhuishu
ps: 毕竟是个人兴趣做的小项目,未进行深入bug测试,多少还存在些。不得用于任何商业以及利益活动。由此引起的责任,跟我无关。谢谢!