• 一个完整的Flutter应用


    本文基于以下链接进行细节补充15.2 Flutter APP代码结构 | 《Flutter实战·第二版》

    代码结构

    我们先来创建一个全新的Flutter工程,命名为"github_client_app"

    我们在项目根目录下分别创建imgs和fonts、jsons、l10n文件夹

    工程目录如下:

    在lib下创建文件夹如下:

    配置json

    Github账号信息

    在“jsons”目录下创建一个“user.json”文件,获取当前登录者的Github账号信息

    1. {
    2. "login": "octocat", //用户登录名
    3. "avatar_url": "https://github.com/images/error/octocat_happy.gif", //用户头像地址
    4. "type": "User", //用户类型,可能是组织
    5. "name?": "monalisa octocat", //用户名字
    6. "company?": "GitHub", //公司
    7. "blog?": "https://github.com/blog", //博客地址
    8. "location?": "San Francisco", // 用户所处地理位置
    9. "email?": "octocat@github.com", // 邮箱
    10. "hireable?": false,
    11. "bio?": "There once was...", // 用户简介
    12. "public_repos": 2, // 公开项目数
    13. "followers": 20, //关注该用户的人数
    14. "following": 0, // 该用户关注的人数
    15. "created_at": "2008-01-14T04:33:35Z", // 账号创建时间
    16. "updated_at": "2008-01-14T04:33:35Z", // 账号信息更新时间
    17. "total_private_repos": 100, //该用户总的私有项目数(包括参与的其他组织的私有项目)
    18. "owned_private_repos": 100 //该用户自己的私有项目数
    19. ... //省略其他字段
    20. }

    API缓存策略信息

    在“jsons”目录下创建一个“cacheConfig.json”文件缓存策略信息

    1. {
    2. "enable":true, // 是否启用缓存
    3. "maxAge":1000, // 缓存的最长时间,单位(秒)
    4. "maxCount":100 // 最大缓存数
    5. }

    用户信息

    在“jsons”目录下创建一个“profile.json”文件

    1. {
    2. "user?":"$user", //Github账号信息,结构见"user.json"
    3. "token?":"", // 登录用户的token(oauth)或密码
    4. "theme":0, //主题索引
    5. "cache?":"$cacheConfig", // 缓存策略信息,结构见"cacheConfig.json"
    6. "lastLogin?":"", //最近一次的注销登录的用户名
    7. "locale?":"" // APP语言信息
    8. }

    项目信息

    在“jsons”目录下创建一个“repo.json”文件保存项目信息

    1. {
    2. "id": 1296269,
    3. "name": "Hello-World", //项目名称
    4. "full_name": "octocat/Hello-World", //项目完整名称
    5. "owner": "$user", // 项目拥有者,结构见"user.json"
    6. "parent?":"$repo", // 如果是fork的项目,则此字段表示fork的父项目信息
    7. "private": false, // 是否私有项目
    8. "description": "This your first repo!", //项目描述
    9. "fork": false, // 该项目是否为fork的项目
    10. "language?": "JavaScript",//该项目的主要编程语言
    11. "forks_count": 9, // fork了该项目的数量
    12. "stargazers_count": 80, //该项目的star数量
    13. "size": 108, // 项目占用的存储大小
    14. "default_branch": "master", //项目的默认分支
    15. "open_issues_count": 2, //该项目当前打开的issue数量
    16. "pushed_at": "2011-01-26T19:06:43Z",
    17. "created_at": "2011-01-26T19:01:12Z",
    18. "updated_at": "2011-01-26T19:14:43Z",
    19. "subscribers_count?": 42, //订阅(关注)该项目的人数
    20. "license?": { // 该项目的开源许可证
    21. "key": "mit",
    22. "name": "MIT License",
    23. "spdx_id": "MIT",
    24. "url": "https://api.github.com/licenses/mit",
    25. "node_id": "MDc6TGljZW5zZW1pdA=="
    26. }
    27. ...//省略其他字段
    28. }

    生成Dart Model类

    在配置文件pubspec.yaml中增加配置

    1. dependencies:
    2. json_annotation: ^4.4.0
    3. json_model: ^1.0.0
    4. dev_dependencies:
    5. json_serializable: ^6.2.0
    6. build_runner: ^2.0.0

    执行命令

    1. flutter packages get
    2. flutter packages pub run json_model

    如果没有生成profile.g.dart等文件,则删除pubspec.lock文件,重新执行

    flutter packages pub run json_model

    数据持久化

    我们使用shared_preferences包来对登录用户的Profile信息进行持久化。

    在 pubspec.yaml 配置文件中 , 导入插件包

    1. dependencies:
    2. shared_preferences: ^2.0.7

    在Dart代码中导入,即可使用

    import 'package:shared_preferences/shared_preferences.dart';

  • 相关阅读:
    发布自动化:Gradle发布插件的配置全攻略
    区块链技术的应用场景和优势
    Edge浏览器没有让我失望! 今天终于可以在win10中模拟IE内核进行前端测试了!
    Servlet上传文件
    SS-Model【6】:U2-Net
    DBCO点击试剂1629057-08-4,DBCO-C3-Maleimide,DBCO-C3-Mal
    星空投影仪美国亚马逊审核标准UL62368检测项目介绍
    R包WGCNA---转录组WGCNA共表达网络构建(基本概念)
    字节码进阶之java Instrumentation原理详解
    uniapp+地图 实现目的地导航
  • 原文地址:https://blog.csdn.net/qq_17613195/article/details/139838368