地图:采用高德地图,仅简单完成了部分功能,基础地图,地址检索,逆地理编码。
界面:仿滴滴主界面,地图中心请求动效果,服务tabs展开效果,地址检索界面,城市列表界面。
项目结构:详见作者另外一个Flutter完整项目[flutter_wanandroid]( )。??????
目前本项目仅部分开源~
已开源内容:
1、Dart汉字转拼音库 [lpinyin]( )
2、城市列表,索引&悬停效果 [AzListView]( )
3、也许是目前最好用的Sp工具类 [SpUtil]( )
4、也许是目前最好用的屏幕工具类 [ScreenUtil]( )
5、国际化 [fluintl]( )
6、Dart常用工具类库 [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]( )

详细使用请参考仓库说明。

import package:flustars/flustars.dart;

// App启动时读取Sp数据,需要异步等待Sp初始化完成。
await SpUtil.getInstance();

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

/// save object example.
/// 存储实体对象示例。
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.
/// 存储实体对象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]( )

详细使用请参考仓库说明。

import package:flustars/flustars.dart;

// 如果设计稿尺寸默认配置一致,无需该设置。 配置设计稿尺寸 默认 360.0 / 640.0 / 3.0
setDesignWHD(_designW,_designH,_designD);

// 不依赖context
// 屏幕宽
double screenWidth = ScreenUtil.getInstance().screenWidth;
// 根据屏幕宽适配后尺寸
double adapterW100 = ScreenUtil.getInstance().getWidth(100);

// 依赖context
// 屏幕宽
double screenWidth = ScreenUtil.getScreenW(context);
// 根据屏幕宽适配后尺寸
double adapterW100 = ScreenUtil.getScaleW(context, 100);

[fluintl]( )

详细使用请参考仓库说明。

import package:fluintl/fluintl.dart;

/// 替换字符串格式要求:%/${index}/$s ,{index} 第几个参数,从0开始。

Ids.click_times: %/$0/$s点击了%/$1/$s次;

IntlUtil.getString(context, Ids.click_times, params: [Tom, $_counter]);
/// print: Tom点击了0次

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。

下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。

不论

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

遇到什么困难,都不应该成为我们放弃的理由!

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

本文已被[CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录