W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本節(jié)我們先梳理一下 APP 中將用到的數(shù)據(jù),然后生成相應(yīng)的 Dart Model 類。Json 文件轉(zhuǎn) Dart Model 的方案采用前面介紹過的 json_model 包方案
登錄 Github 后,我們需要獲取當(dāng)前登錄者的 Github 賬號(hào)信息,Github API 接口返回 Json 結(jié)構(gòu)如下:
{
"login": "octocat", //用戶登錄名
"avatar_url": "https://github.com/images/error/octocat_happy.gif", //用戶頭像地址
"type": "User", //用戶類型,可能是組織
"name": "monalisa octocat", //用戶名字
"company": "GitHub", //公司
"blog": "https://github.com/blog", //博客地址
"location": "San Francisco", // 用戶所處地理位置
"email": "octocat@github.com", // 郵箱
"hireable": false,
"bio": "There once was...", // 用戶簡(jiǎn)介
"public_repos": 2, // 公開項(xiàng)目數(shù)
"followers": 20, //關(guān)注該用戶的人數(shù)
"following": 0, // 該用戶關(guān)注的人數(shù)
"created_at": "2008-01-14T04:33:35Z", // 賬號(hào)創(chuàng)建時(shí)間
"updated_at": "2008-01-14T04:33:35Z", // 賬號(hào)信息更新時(shí)間
"total_private_repos": 100, //該用戶總的私有項(xiàng)目數(shù)(包括參與的其它組織的私有項(xiàng)目)
"owned_private_repos": 100 //該用戶自己的私有項(xiàng)目數(shù)
... //省略其它字段
}
我們?cè)凇癹sons”目錄下創(chuàng)建一個(gè)“user.json”文件保存上述信息。
由于 Github 服務(wù)器在國內(nèi)訪問速度較慢,我們對(duì) Github API 應(yīng)用一些簡(jiǎn)單的緩存策略。我們?cè)凇癹sons”目錄下創(chuàng)建一個(gè)“cacheConfig.json”文件緩存策略信息,定義如下:
{
"enable":true, // 是否啟用緩存
"maxAge":1000, // 緩存的最長(zhǎng)時(shí)間,單位(秒)
"maxCount":100 // 最大緩存數(shù)
}
用戶信息(Profile)應(yīng)包括如下信息:
需要注意的是,目前 Github 有三種登錄方式,分別是賬號(hào)密碼登錄、oauth 授權(quán)登錄、二次認(rèn)證登錄;這三種登錄方式的安全性依次加強(qiáng),但是在本示例中,為了簡(jiǎn)單起見,我們使用賬號(hào)密碼登錄,因此我們需要保存用戶的密碼。
注意:在這里需要提醒讀者,在登錄場(chǎng)景中,保護(hù)用戶賬號(hào)安全是一個(gè)非常重要且永恒的話題,在實(shí)際開發(fā)中應(yīng)嚴(yán)格杜絕直接明文存儲(chǔ)用戶賬密的行為。
我們?cè)凇癹sons”目錄下創(chuàng)建一個(gè)“profile.json”文件,結(jié)構(gòu)如下:
{
"user":"$user", //Github賬號(hào)信息,結(jié)構(gòu)見"user.json"
"token":"", // 登錄用戶的token(oauth)或密碼
"theme":5678, //主題色值
"cache":"$cacheConfig", // 緩存策略信息,結(jié)構(gòu)見"cacheConfig.json"
"lastLogin":"", //最近一次的注銷登錄的用戶名
"locale":"" // APP語言信息
}
由于 APP 主頁要顯示其所有項(xiàng)目信息,我們?cè)凇癹sons”目錄下創(chuàng)建一個(gè)“repo.json”文件保存項(xiàng)目信息。通過參考 Github 獲取項(xiàng)目信息的 API 文檔,定義出最終的“repo.json”文件結(jié)構(gòu),如下:
{
"id": 1296269,
"name": "Hello-World", //項(xiàng)目名稱
"full_name": "octocat/Hello-World", //項(xiàng)目完整名稱
"owner": "$user", // 項(xiàng)目擁有者,結(jié)構(gòu)見"user.json"
"parent":"$repo", // 如果是fork的項(xiàng)目,則此字段表示fork的父項(xiàng)目信息
"private": false, // 是否私有項(xiàng)目
"description": "This your first repo!", //項(xiàng)目描述
"fork": false, // 該項(xiàng)目是否為fork的項(xiàng)目
"language": "JavaScript",//該項(xiàng)目的主要編程語言
"forks_count": 9, // fork了該項(xiàng)目的數(shù)量
"stargazers_count": 80, //該項(xiàng)目的star數(shù)量
"size": 108, // 項(xiàng)目占用的存儲(chǔ)大小
"default_branch": "master", //項(xiàng)目的默認(rèn)分支
"open_issues_count": 2, //該項(xiàng)目當(dāng)前打開的issue數(shù)量
"pushed_at": "2011-01-26T19:06:43Z",
"created_at": "2011-01-26T19:01:12Z",
"updated_at": "2011-01-26T19:14:43Z",
"subscribers_count": 42, //訂閱(關(guān)注)該項(xiàng)目的人數(shù)
"license": { // 該項(xiàng)目的開源許可證
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZW1pdA=="
}
...//省略其它字段
}
現(xiàn)在,我們需要的 Json 數(shù)據(jù)已經(jīng)定義完畢,現(xiàn)在只需要運(yùn)行 json_model package 提供的命令來通過 json 文件生成相應(yīng)的 Dart 類:
flutter packages pub run json_model
命令執(zhí)行成功后,可以看到 lib/models 文件夾下會(huì)生成相應(yīng)的 Dart Model 類:
├── models
│ ├── cacheConfig.dart
│ ├── cacheConfig.g.dart
│ ├── index.dart
│ ├── profile.dart
│ ├── profile.g.dart
│ ├── repo.dart
│ ├── repo.g.dart
│ ├── user.dart
│ └── user.g.dart
我們使用 shared_preferences 包來對(duì)登錄用戶的 Profile 信息進(jìn)行持久化。shared_preferences 是一個(gè) Flutter 插件,它通過 Android 和 iOS 平臺(tái)提供的機(jī)制來實(shí)現(xiàn)數(shù)據(jù)持久化。由于 shared_preferences 的使用非常簡(jiǎn)單,讀者可以自行查看其文檔,在此不再贅述。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: