热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

矿小助基础配置|利用代码补全|Flutter

如果将App比作一座建筑,那么基础配置就是地基。自定义一些统一高效的配置在各处进行复用,可以起到事半功倍的效果。文章接上回0前言|从零开始写App|Fl

如果将App比作一座建筑,那么基础配置就是地基。自定义一些统一高效的配置在各处进行复用,可以起到事半功倍的效果。


文章接上回 0 前言 | 从零开始写App | Flutter


文章目录

    • 基础配置 ConfigInfo
        • 字体大小 fontSize
        • 边距 spaceCard
        • 色彩 color
        • 圆角值 border
        • 容器阴影 shadow
        • 基础像素 device
        • 初始化
    • 持久化存储 Prefs
        • 基础使用
        • 封装为Prefs
    • 路由管理 toXxxPage


基础配置 ConfigInfo


统一的设计离不开统一的基础配置



字体大小 fontSize

double fontSizeTitle50; //headline1
double fontSizeTitle45; //headline2
double fontSizeMain40; //body1
double fontSizeMini38; //body2
double fontSizeTip33; //subtitle1
double fontSizeTipMini25; //subtitle2

不难看出,所有的字体变量都以fontSize开头。这样做是为了更高效的使用IDE自带的代码补全功能,只需要键入fontSize,IDE就会将这些变量展示到面前。



边距 spaceCard

double spaceCardMarginTB;//上下外边距
double spaceCardPaddingTB;//上下内边距
double spaceCardMarginRL;//左右外边距
double spaceCardPaddingRL;//左右内边距

色彩 color

//单色
Color colorMain; //主题色
Color colorSecond; //主题副色
Color colorMainText; //字体主色
Color colorMainTextWhite; //白字
Color colorScaffoldBackground;//脚手架背景色
Color colorPageBackground;//页面背景色
Color colorLoginPageMain; //登录页主题色
//多色
List colorCourseCard; //课表卡片色彩列表
List colorFuncButton; //多种功能按钮的背景色
List colorExamCard; //考试倒计时进度条色彩

圆角值 border

double borderRadiusValue; //卡片的圆角值

容器阴影 shadow

BoxShadow shadowBoxMain; //容器阴影

基础像素 device

double deviceWidth;
double deviceHeight;

设置这两个值是为了适配各种分辨率的设备



初始化

void initConfigInfo(){//以1080*1920为基准适配屏幕deviceWidth = 1080;deviceHeight = 1920;//色彩初始化colorMain = Color(0xff00c5a8);colorSecond = Color(0xFF33CC99).withAlpha(255);colorMainText = Color.fromARGB(255, 0, 0, 0);colorMainTextWhite = Colors.white;colorScaffoldBackground = Color.fromARGB(255, 255,255,255);colorPageBackground = Color.fromARGB(255, 247,247,247);colorLoginPageMain = Color.fromARGB(255, 40,216,161);colorCourseCard = [Color.fromARGB(255, 102,204,153),Color(0xFF6699FF),Color.fromARGB(255, 255,153,153),Color.fromARGB(255, 166,145,248),Color.fromARGB(255, 62,188,202),Color.fromARGB(255, 255,153,102),Color(0xFF4ecccc),Color(0xFFff9bcb)];colorFuncButton = [Color.fromARGB(255, 88,188,216),Color.fromARGB(255, 238,121,192),Color.fromARGB(255, 125,123,227),Color.fromARGB(255, 93,169,248),Color.fromARGB(255, 90,138,234),Color.fromARGB(255, 82,172,98),Color.fromARGB(255, 229,105,72),];colorExamCard = [Colors.red,//红色Colors.deepOrangeAccent,//橙黄色Colors.blue,//蓝色Colors.green,//绿色Color.fromARGB(255, 191,188,183),//灰色];//圆角值borderRadiusValue = 10;//阴影shadowBoxMain = BoxShadow(blurRadius: 10,spreadRadius: 0.05,color: Colors.black12.withAlpha(10));//字体大小,使用ScreenUtil进行字体适配fontSizeTitle50 = ScreenUtil().setSp(50); //headline1fontSizeTitle45 = ScreenUtil().setSp(45); //headline2fontSizeMain40 = ScreenUtil().setSp(40); //body1fontSizeMini38 = ScreenUtil().setSp(37); //body2fontSizeTip33 = ScreenUtil().setSp(33); //subtitle1fontSizeTipMini25 = ScreenUtil().setSp(25); //subtitle2//边距等配置,使用ScreenUtil进行适配spaceCardMarginTB = ScreenUtil().setSp(25);//上下外边距spaceCardPaddingTB = ScreenUtil().setSp(25);//上下内边距spaceCardMarginRL = ScreenUtil().setWidth(30);//左右外边距spaceCardPaddingRL = ScreenUtil().setWidth(50);//左右内边距
}

持久化存储 Prefs

我们当然不愿意用户在每次重启之后一些配置丢失,因此将数据持久化存储以备下次使用是必须的。

考虑到矿小助的数据量不会很大,因此使用了适合单进程、小批量的数据存储与访问的SharePreference组件。


基础使用

SharePreference的使用非常简单,首先创建实例:

//创建实例
SharedPreferences prefs = await SharedPreferences.getInstance();

创建实例之后就可以直接使用了,支持的类型有Stringintdoublebool等。


由于绝大多数数据类型(Object)都能通过jsonEncode()方法来转换为JSON String ,因此矿小助存储最多的类型也是String


//存储'ccatom',其key为'name'
prefs.setString('name', 'ccatom');
//使用getString获取存储的值
var username = prefs.getString('name');

但是每次还需要创建一个实例,显得特别麻烦,因此我们封装一下。


封装为Prefs

class Prefs{//实例static SharedPreferences prefs;//keystatic String _username = 'username';//用户名//get方法,用于获取valuestatic String get username => prefs.getString(_username);//set方法,用于设置valuestatic set username(String value) =>prefs.setString(_username, value);//初始化实例,App启动时需要执行一次static Future init()async{prefs = await SharedPreferences.getInstance();}}

这里简化了很多数据,实际项目中这个类很长


封装后,我们在获取信息时就会变得非常容易

Prefs.username = 'ccatom'; //存储,自动调用set方法
var a = Prefs.username; //获取,自动调用get方法

在这里我们同样充分利用了IDE的补全功能,输入Prefs.即可看到所有的key变量。


路由管理 toXxxPage

为了在开发中充分利用代码补全,我使用了一种很笨但是十分高效的方式进行路由管理。

就是在每个页面类的前面加一个独立的函数toXxxPage()

//用于路由跳转的函数
void toXxxPage(BuildContext context) {Navigator.push(context, CupertinoPageRoute(builder: (context) => XxxPage()));
}
//页面类
class XxxPage extends StatefulWidget {@override_XxxPageState createState() => _XxxPageState();
}class _XxxPageState extends State {@overrideWidget build(BuildContext context) {return Container();}
}

页面跳转时,只需要在IDE中输入to,IDE就会很聪明的把所有页面的路由跳转函数展示出来,以供选择。


这只是我个人耍的一点“小聪明”,如果有更好的方法,欢迎在评论区中提出!


推荐关注矿小助项目总结专栏


推荐阅读
author-avatar
DomeSmart
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有