地圖:采用高德地圖,僅簡(jiǎn)單完成了部分功能,基礎(chǔ)地圖,地址檢索,逆地理編碼。
界面:仿滴滴主界面,地圖中心請(qǐng)求動(dòng)效果,服務(wù)tabs展開效果,地址檢索界面,城市列表界面。
項(xiàng)目結(jié)構(gòu):詳見作者另外一個(gè)Flutter完整項(xiàng)目[flutter_wanandroid]( )。??????
目前本項(xiàng)目?jī)H部分開源~
已開源內(nèi)容:
1、Dart漢字轉(zhuǎn)拼音庫(kù) [lpinyin]( )
2、城市列表,索引&懸停效果 [AzListView]( )
3、也許是目前最好用的Sp工具類 [SpUtil]( )
4、也許是目前最好用的屏幕工具類 [ScreenUtil]( )
5、國(guó)際化 [fluintl]( )
6、Dart常用工具類庫(kù) [common_utils]( )

[lpinyin]( )

import package:lpinyin/lpinyin.dart;

String pinyin = PinyinHelper.getPinyin("成都市");

[AzListView]( )

import package:azlistview/azlistview.dart;

AzListView(
{Key key,
this.data,
this.topData,
this.itemBuilder,
this.suspensionWidget,
this.isUseRealIndex: true,
this.itemHeight: 50,
this.suspensionHeight: 40,
this.onSusTagChanged,
this.header,
this.indexBarBuilder,
this.indexHintBuilder,
this.showIndexHint: true});

[SpUtil]( )

詳細(xì)使用請(qǐng)參考倉(cāng)庫(kù)說明。

import package:flustars/flustars.dart;

// App啟動(dòng)時(shí)讀取Sp數(shù)據(jù),需要異步等待Sp初始化完成。
await SpUtil.getInstance();

SpUtil.getString(key, defValue: );
SpUtil.getInt(key, defValue: 0);

/// save object example.
/// 存儲(chǔ)實(shí)體對(duì)象示例。
City city = new City();
city.name = "成都市";
SpUtil.putObject("loc_city", city);

Map dataStr = SpUtil.getObject("loc_city");
City hisCity = dataStr == null ? null : City.fromJson(dataStr);
print("thll Str: " + (hisCity == null ? "null" : hisCity.toString()));

/// save object list example.
/// 存儲(chǔ)實(shí)體對(duì)象List示例。
List list = new List();
list.add(new City(name: "成都市"));
list.add(new City(name: "北京市"));
SpUtil.putObjectList("loc_city_list", list);

List dataList = SpUtil.getObjectList("loc_city_list");
List _cityList = dataList?.map((value) {
return City.fromJson(value);
})?.toList();

print("thll List: " + (_cityList == null ? "null" : _cityList.toString()));

[ScreenUtil]( )

詳細(xì)使用請(qǐng)參考倉(cāng)庫(kù)說明。

import package:flustars/flustars.dart;

// 如果設(shè)計(jì)稿尺寸默認(rèn)配置一致,無需該設(shè)置。 配置設(shè)計(jì)稿尺寸 默認(rèn) 360.0 / 640.0 / 3.0
setDesignWHD(_designW,_designH,_designD);

// 不依賴context
// 屏幕寬
double screenWidth = ScreenUtil.getInstance().screenWidth;
// 根據(jù)屏幕寬適配后尺寸
double adapterW100 = ScreenUtil.getInstance().getWidth(100);

// 依賴context
// 屏幕寬
double screenWidth = ScreenUtil.getScreenW(context);
// 根據(jù)屏幕寬適配后尺寸
double adapterW100 = ScreenUtil.getScaleW(context, 100);

[fluintl]( )

詳細(xì)使用請(qǐng)參考倉(cāng)庫(kù)說明。

import package:fluintl/fluintl.dart;

/// 替換字符串格式要求:%/${index}/$s ,{index} 第幾個(gè)參數(shù),從0開始。

Ids.click_times: %/$0/$s點(diǎn)擊了%/$1/$s次;

IntlUtil.getString(context, Ids.click_times, params: [Tom, $_counter]);
/// print: Tom點(diǎn)擊了0次

最后

對(duì)于很多初中級(jí)Android工程師而言,想要提升技能,往往是自己摸索成長(zhǎng),不成體系的學(xué)習(xí)效果低效漫長(zhǎng)且無助。整理的這些架構(gòu)技術(shù)希望對(duì)Android開發(fā)的朋友們有所參考以及少走彎路,本文的重點(diǎn)是你有沒有收獲與成長(zhǎng),其余的都不重要,希望讀者們能謹(jǐn)記這一點(diǎn)。

同時(shí)我經(jīng)過多年的收藏目前也算收集到了一套完整的學(xué)習(xí)資料以及高清詳細(xì)的Android架構(gòu)進(jìn)階學(xué)習(xí)導(dǎo)圖及筆記分享給大家,希望對(duì)想成為架構(gòu)師的朋友有一定的參考和幫助。

下面是部分資料截圖,誠(chéng)意滿滿:特別適合有開發(fā)經(jīng)驗(yàn)的Android程序員們學(xué)習(xí)。

不論

《Android學(xué)習(xí)筆記總結(jié)+最新移動(dòng)架構(gòu)視頻+大廠安卓面試真題+項(xiàng)目實(shí)戰(zhàn)源碼講義》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整內(nèi)容開源分享

遇到什么困難,都不應(yīng)該成為我們放棄的理由!

如果你看到了這里,覺得文章寫得不錯(cuò)就給個(gè)贊唄?如果你覺得那里值得改進(jìn)的,請(qǐng)給我留言,一定會(huì)認(rèn)真查詢,修正不足,謝謝。

本文已被[CODING開源項(xiàng)目:《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》]( )收錄