写点什么

Flutter 版 -WanAndroid-App

用户头像
Android架构
关注
发布于: 21 小时前

data 网络数据层

  • |--data

  • |-- api (url 字段)

  • |-- net (单例 DioUtil)

  • |-- protocol (请求与返回实体类)

  • |-- repository (接口请求 &解析)

api

class WanAndroidApi {/// 首页 banner http://www.wanandroid.com/banner/jsonstatic const String BANNER = "banner";static const String USER_REGISTER = "user/register"; //注册 static const String USER_LOGIN = "user/login"; //登录 static const String USER_LOGOUT = "user/logout"; //退出


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


//?拼接 urlstatic String getPath({String path: '', int page, String resType: 'json'}) {StringBuffer sb = new StringBuffer(path);if (page != null) {sb.write('/page');}if (resType != null && resType.isNotEmpty) {sb.write('/resType');}return sb.toString();}}

请求与返回实体类 protocol

class LoginReq {String username;String password;


LoginReq(this.username, this.password);


LoginReq.fromJson(Map<String, dynamic> json): username = json['username'],password = json['password'];


Map<String, dynamic> toJson() => {'username': username,'password': password,};


@overrideString toString() {StringBuffer sb = new StringBuffer('{');sb.write(""username":"password");sb.write('}');return sb.toString();}}

接口请求 &解析 repository

class WanRepository {Future<List<BannerModel>> getBanner() async {BaseResp<List> baseResp = await DioUtil().request<List>(Method.get, WanAndroidApi.getPath(path: WanAndroidApi.BANNER));List<BannerModel> bannerList;if (baseResp.code != Constant.STATUS_SUCCESS) {return new Future.error(baseResp.msg);}if (baseResp.data != null) {bannerList = baseResp.data.map((value) {return BannerModel.fromJson(value);}).toList();}return bannerList;}}

资源文件 resources

  • |--resources

  • |-- colors.dart

  • |-- dimens.dart

  • |-- strings.dart

  • |-- styles.dart

colors.dart

class ColorT {static const Color app_main = Color(0xFF666666);


static const Color text_dark = Color(0xFF333333);static const Color text_normal = Color(0xFF666666);static const Color text_gray = Color(0xFF999999);


}

dimens.dart

class Dimens {static const double font_sp12 = 12;static const double font_sp14 = 14;static const double font_sp16 = 16;


static const double gap_dp5 = 5;static const double gap_dp10 = 10;}

strings.dart

class Ids {static const String titleHome = 'title_home';}


Map<String, Map<String, Map<String, String>>> localizedValues = {'en': {'US': {Ids.titleHome: 'Home',}},'zh': {'CN': {Ids.titleHome: '主页',},'HK': {Ids.titleHome: '主頁',},'TW': {Ids.titleHome: '主頁',}}};

styles.dart

class TextStyles {static TextStyle listTitle = TextStyle(fontSize: Dimens.font_sp16,color: ColorT.text_dark,fontWeight: FontWeight.bold,);static TextStyle listContent = TextStyle(fontSize: Dimens.font_sp14,color: ColorT.text_normal,);static TextStyle listExtra = TextStyle(fontSize: Dimens.font_sp12,color: ColorT.text_gray,);}

Flutter 国际化相关

fluintl?是一个为应用提供国际化的库,可快速集成实现应用多语言。该库封装了一个国际化支持类,通过提供统一方法 getString(id)获取字符串。


// 在 MyApp initState 配置多语言资源 setLocalizedValues(localizedValues); //配置多语言资源// 在 MaterialApp 指定 localizationsDelegates 和 supportedLocalesMaterialApp(


home: MyHomePage(),


localizationsDelegates: [


GlobalMaterialLocalizations.delegate,


GlobalWidgetsLocalizations.delegate,


CustomLocalizations.delegate //设置本地化代理


],


supportedLocales: CustomLocalizations.supportedLocales,//设置支持本地化语言集合


);// 字符串获取 IntlUtil.getString(context, Ids.titleHome);CustomLocalizations.of(context).getString(StringIds.titleHome);

Flutter 屏幕适配?ScreenUtil

方案一、不依赖 context


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


步骤 2// 在 MainPageState build 调用 MediaQuery.of(context)class MainPageState extends State<MainPage> {@overrideWidget build(BuildContext context) {// 在 MainPageState build 调用 MediaQuery.of(context)MediaQuery.of(context);return new Scaffold(appBar: new AppBar(),);}}


步骤 3ScreenUtil.getInstance().screenWidthScreenUtil.getInstance().screenHeight//屏幕适配相关


ScreenUtil.getInstance().getWidth(size); //返回根据屏幕宽适配后尺寸(单位 dp or pt)ScreenUtil.getInstance().getHeight(size); //返回根据屏幕高适配后尺寸 (单位 dp or pt)ScreenUtil.getInstance().getWidthPx(sizePx); //sizePx 单位 pxScreenUtil.getInstance().getHeightPx(sizePx); //sizePx 单位 pxScreenUtil.getInstance().getSp(fontSize); //返回根据屏幕宽适配后字体尺寸


方案二、依赖 context


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


ScreenUtil.getScreenW(context); //屏幕 宽 ScreenUtil.getScreenH(context); //屏幕 高//屏幕适配相关


ScreenUtil.getScaleW(context, size); //返回根据屏幕宽适配后尺寸(单位 dp or pt)ScreenUtil.getScaleH(context, size); //返回根据屏幕高适配后尺寸 (单位 dp or pt)ScreenUtil.getScaleSp(context, size) ;//返回根据屏幕宽适配后字体尺寸

Flutter 数据存储?SpUtil

SpUtil : 单例"同步" SharedPreferences 工具类。项目中为大家提供 SpHelper,方便存取实体对象类。


// 存储 SplashModel 实体对象

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Flutter版-WanAndroid-App