是什么?

这是一个Flutter组件库插件,用于快速部署开发环境,由于谷歌的Material UI跟国内设计风格不一,所以参考小程序实现了showModal、showToast、showLoading、showMessage、actionSheet、 picker等组件以及提供一种能够精确还原设计搞的适配方案。

点击前往github库

03.gif

安装

  1. ksir:
  2. git:
  3. url: https://github.com/debugksir/Ksir.git
  4. ref: 09c5ed9

使用

  1. import 'package:ksir/ksir.dart';
  2. ...
  3. void main() {
  4. runApp(MyApp());
  5. }
  6. class MyApp extends StatelessWidget {
  7. @override
  8. Widget build(BuildContext context) {
  9. return MaterialApp(
  10. title: 'Welcome to Flutter',
  11. debugShowCheckedModeBanner: false,
  12. home: HomePage(),
  13. );
  14. }
  15. }
  16. class HomePage extends StatefulWidget {
  17. @override
  18. _HomePageState createState() => _HomePageState();
  19. }
  20. class _HomePageState extends State<HomePage> {
  21. @override
  22. Widget build(BuildContext context) {
  23. // 在入口文件初始化,其中width为设计稿宽度,默认值为750,也推荐设置750
  24. Ksir.init(context, width: 750);
  25. return ...
  26. }
  27. }

组件

showLoading

  • API | 属性 | 说明 | 类型 | 默认值 | | —- | —- | —- | —- | | iconType | 加载图标类型。枚举如下:BallBeatIndicator()、BallSpinFadeLoaderIndicator()、LineScaleIndicator() | Indicator | BallSpinFadeLoaderIndicator() |

  • 使用案例

    1. MaterialButton(
    2. minWidth: setSize(690),
    3. color: Color(0xff07c160),
    4. onPressed: () {
    5. Ksir.showLoading();
    6. Timer(Duration(seconds: 2), () {
    7. Navigator.pop(context);
    8. });
    9. },
    10. child: Ksir.text('showLoading', color: Colors.white),
    11. )

showModal

  • API
属性 说明 类型 默认值
confirm 点击确定的回调函数 Function -
cancel 点击取消的回调函数 Function -
confirmTitle 确定按钮标题 String “确定”
cancelTitle 取消按钮标题 String “取消”
  • 使用案例
  1. MaterialButton(
  2. minWidth: setSize(690),
  3. color: Color(0xff07c160),
  4. onPressed: () {
  5. Ksir.showModal('确认提交吗?');
  6. },
  7. child: Ksir.text('showModal', color: Colors.white),
  8. )

showToast

  • API
属性 说明 类型 默认值
callback Toast消失时的回调函数 Function -
duration Toast展示时长 int 1500
isSuceess 是否展示成功的图标 bool true
  • 使用案例
  1. MaterialButton(
  2. minWidth: setSize(690),
  3. color: Color(0xff07c160),
  4. onPressed: () {
  5. Ksir.showToast('提交成功!');
  6. },
  7. child: Ksir.text('showToast success', color: Colors.white),
  8. ),
  9. MaterialButton(
  10. minWidth: setSize(690),
  11. color: Color(0xff07c160),
  12. onPressed: () {
  13. Ksir.showToast('提交失败!', isSuccess: false);
  14. },
  15. child: Ksir.text('showToast fail', color: Colors.white),
  16. )

showMessage

  • API
属性 说明 类型 默认值
callback Message消失时的回调函数 Function -
duration Toast展示时长 int 1500

• 使用案例

  1. MaterialButton(
  2. minWidth: setSize(690),
  3. color: Color(0xff07c160),
  4. onPressed: () {
  5. Ksir.showMessage('账号不能为空!');
  6. },
  7. child: Ksir.text('showMessage', color: Colors.white),
  8. )

actionSheet

  • API
属性 说明 类型 默认值
options 子项列表 List -
  • ActionSheetType API
属性 说明 类型 默认值
title 标题 String -
onTap 点击函数 Function -
color 标题颜色 Color Color(0xff333333)
isShow 是否展示 bool true

• 使用案例

  1. MaterialButton(
  2. minWidth: setSize(690),
  3. color: Color(0xff07c160),
  4. onPressed: () {
  5. Ksir.actionSheet([
  6. ActionSheetType(title: '修改', onTap: () {
  7. print('修改');
  8. }),
  9. ActionSheetType(title: '删除', onTap: () {
  10. print('删除');
  11. }, color: Colors.red),
  12. ]);
  13. },
  14. child: Ksir.text('showAction', color: Colors.white),
  15. )

picker

  • API
属性 说明 类型 默认值
options 选项 List -
title 标题 String -
defaultValue 默认值 dynamic -
onChange 选项监听函数 Function -
onCancel 点击取消函数 Function -
onConfirm 点击确认函数 Function -
cancelTitle 取消标题 String “取消”
confirmTitle 确认标题 String “确认”
cancelColor 取消标题颜色 Color Color(0xff999999)
confirmColor 确认标题颜色 Color Color(0xff459EF9)
optionTextStyle 选项字体样式 TextStyle TextStyle(fontSize: setSize(28), color: Color(0xff666666))
titileTextStyle 标题字体样式 TextStyle TextStyle(fontSize: setSize(32), color: Color(0xff333333))
optionsHeight 选项集高度 double 300
optionHeight 选项高度 double 60
closeAble 是否可以关闭 bool true
  • PickerType API
属性 说明 类型 默认值
label 选项标题 String -
value 选项值 dynamic -

• 使用案例

  1. MaterialButton(
  2. minWidth: setSize(690),
  3. color: Color(0xff07c160),
  4. onPressed: () {
  5. Ksir.picker(
  6. options: [PickerType(label: '北京', value: '1'), PickerType(label: '广州', value: '2'), PickerType(label: '上海', value: '3'), PickerType(label: '杭州', value: '4')],
  7. title: '请选择',
  8. optionHeight: 80,
  9. optionTextStyle: TextStyle(fontSize: 14, color: Colors.blueAccent),
  10. defaultValue: '3',
  11. onChange: (index, item) {
  12. print('$index : $item');
  13. },
  14. onConfirm: (index, item) {
  15. print('$index : ${item.label} / ${item.value}');
  16. }
  17. );
  18. },
  19. child: Ksir.text('showPicker', color: Colors.white),
  20. )

text

  • API
属性 说明 类型 默认值
value 文字内容 String -
fontSize 字体大小 double 32
color 字体颜色 Color Colors.black
fontWeight 字体厚度,枚举:bold、normal、100、200、300、400、500、600、700、800、900 String “normal”
lineHeight 行高 double 1.2
textAlign 对齐方式 TextAlign TextAlign.left
overflow 超出展示形式 TextOverflow TextOverflow.ellipsis
maxLines 最大行数 int -
  • 使用案例
  1. Container(
  2. width: setFullWidth(),
  3. child: Ksir.text('好好学习,天天向上!', fontSize: 48, color: Colors.black, fontWeight: 'bold', textAlign: TextAlign.right),
  4. ),

image

  • API
属性 说明 类型 默认值
src 图片路径 String -
width 宽度 double 300
height 高度 double 300
fit 图片适配方式 BoxFit BoxFit.cover
  • 使用案例
  1. /// 图片组件使用cached_network_image插件缓存图片,节省用户请求,同时自动识别asset和network图片类型,当传入src是以http开头时判定为network类型,否则为asset类型。暂不支持file类型
  2. Ksir.image('http://via.placeholder.com/350x150', width: 500, height: 500, fit: BoxFit.cover),

avatar

  • API
属性 说明 类型 默认值
src 图片路径 String -
width 宽度 double 60
  • 使用案例
  1. Ksir.avatar('http://via.placeholder.com/350x150', width: 200),

nextPage

  • API
属性 说明 类型 默认值
color 图标颜色 Color Colors.black
size 大小 double 32
params 传递参数 Map -
onTap 点击函数 Function -
  • 使用案例
  1. Container(
  2. width: setSize(690),
  3. height: setSize(100),
  4. decoration: BoxDecoration(
  5. border: Border(bottom: BorderSide(width: setSize(1), color: Color(0xffe8e8e8)))
  6. ),
  7. child: Row(
  8. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  9. crossAxisAlignment: CrossAxisAlignment.center,
  10. children: <Widget>[
  11. Ksir.text('下一页', fontSize: 32, color: Color(0xff666666)),
  12. Ksir.nextPage(onTap: () {
  13. Navigator.push(context, MaterialPageRoute(builder: (context) => NextPage(),));
  14. })
  15. ],
  16. ),
  17. ),

goback

  • API
属性 说明 类型 默认值
context 上下文 BuildContext -
color 图标颜色 Color Colors.black
size 大小 double 32
params 传递参数 Map -
onTap 点击函数 Function -
  • 使用案例
  1. Widget build(BuildContext context) {
  2. return Scaffold(
  3. appBar: AppBar(
  4. leading: Ksir.goBack(context, color: Colors.white),
  5. title: Ksir.text('返回上一页', color: Colors.white),
  6. ),
  7. body: Ksir.text(demo),
  8. );
  9. }

适配方案

默认以750px设计为准, 如果需要自定义,可以在初始化的时候指定, 如设计稿宽度375:Ksir.init(context, width: 375); 推荐设置750px,以下Demo以750为例。
image.png

  1. Container(
  2. width: setSize(690),
  3. height: setSize(690),
  4. decoration: BoxDecoration(
  5. color: Colors.blueGrey,
  6. borderRadius: BorderRadius.circular(setSize(16))
  7. ),
  8. alignment: Alignment.center,
  9. child: Ksir.text(demo01, color: Colors.white),
  10. )

更多方法如下:
设置设备上的尺寸计算设计稿的尺寸:setSize(double rpx)
根据设计稿尺寸计算设备上的尺寸:sizeSet(double xpr)
底部操作栏高度:bottomBarHeight()
每个逻辑像素的字体像素数,字体的缩放比例:textScaleFactory()
设备的像素密度: pixelRatio()
当前设备宽度 dp:screenWidthDp()
当前设备高度 dp:screenHeightDp()
当前设备宽度 px:screenWidth()
当前设备高度 px:screenHeight()
状态栏高度 dp:statusBarHeight()
设置最大宽度:setFullWidth(BuildContext context)
设置最大高度:setFullHeight(BuildContext context)