Flutter 版 -WanAndroid-App
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"; //退出
//?拼接 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 实体对象
评论