Flutter笔记-实战, 仿追书

作者: 叶落清秋 | 来源:发表于2019-06-25 15:31 被阅读173次

    目的

    使用flutter对追书神器的一个仿写,主要交流和学习
    因为并不是美工,很多颜色方面只是近似,尺寸方面也不严格,所以部分界面可能看起来有些丑
    基本是系统提供控件的基础使用,并未去魔改系统的控件,刚接触flutter的人学习起来比较快

    效果图

    主页 阅读 搜索 讨论

    实现了书架、书单、排行榜、分类,阅读、换源、搜索、历史、夜间模式等功能

    1. 路由使用了咸鱼的ARoute框架
    2. 图标新建了一个自己的图标库(图标都来源自iconfont)
    3. 对网络状况、系统电量、系统亮度做了处理

    不足:

    1. 未有状态管理(个人偏向于 bloc+rxdart,毕竟是小项目, 界面和逻辑分离总是好的)
    2. 并未实现全部功能,后续功能应该也不会再添加了
    3. 有些做的不够严谨,并未单独抽出来放在一个常量文件中(比如颜色、文字等)
    4. 优化卡顿

    关于打包

    flutter的打包体验并不好,官网流程:https://flutter.dev/docs/deployment/android

    步骤:

    1. 生成key(jks文件,androidstudio有自带的工具)
    2. 创建key.properties文件


      key.properties

    注:keyAlias注意保持一致,androidstudio工具生成的key默认是key0

    1. 修改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 {
        ...
    }
    
    1. 去掉AndroidMainifest.xml中的android:debuggable="true"(允许debug)
    2. 命令行运行 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测试,多少还存在些。不得用于任何商业以及利益活动。由此引起的责任,跟我无关。谢谢!

    相关文章

      网友评论

        本文标题:Flutter笔记-实战, 仿追书

        本文链接:https://www.haomeiwen.com/subject/ddixqctx.html