iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >fluttershowModalBottomSheet常用属性及说明
  • 935
分享到

fluttershowModalBottomSheet常用属性及说明

2024-04-02 19:04:59 935人浏览 安东尼
摘要

目录showModalBottomSheet常用属性showModalBottomSheetFlutter常见控件及例子贝塞尔曲线底部弹窗下拉框展开闭合控件输入框弹出框加叠加(一个红

showModalBottomSheet常用属性

在使用showModalBottomSheet这个控件时,想要设置圆角,在内容widget设置不管用,然后直接看这个控件的实现原理,一看有个shape属性,感觉有戏!果然设置完毕后,成功了。

注意:一定不要设置builder中的背景颜色,否则会覆盖导致不能显示出圆角!

showModalBottomSheet

shape可以设置成自己想要的形状!通常直接设置圆角即可

  • isScrollControlled:是否时全屏还是半屏
  • isDismissible:外部是否可以点击,false不可以点击,true可以点击,点击后消失
  • backgroundColor : 通常可以设置白色和透明,
  • barrierColor:设置遮挡底部的半透明颜色,默认是black54,可以设置成透明的;
  • enableDrag: 是否可以向下拖动关闭,默认是true打开的;

以下代码:

  showModalBottomSheet(
      context: context,
       isScrollControlled:false,
      backgroundColor: Colors.white,
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(10))),
      builder: (BuildContext context) {
        return Container(
        	height:50,//对话框高度就是此高度
          child: Center(child: Text("居中文字")),
        );
      });

flutter常见控件及例子

贝塞尔曲线

class BottomClipper extends CustomClipper<Path>{//切割类继承
  @override
  Path getClip(Size size) {//必备属性一
    var path = Path();
    path.lineTo(0, 0);
    path.lineTo(0, size.height-60);
    var frit = Offset(size.width/2,size.height);
    var frit2 = Offset(size.width,size.height-60);
    path.quadraticBezierTo(frit.dx, frit.dy, frit2.dx, frit2.dy);//二次贝塞尔曲线
    path.lineTo(size.width, size.height-60);
    path.lineTo(size.width, 0);
    return path;
  }
  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) {//必备属性二
    // TODO: implement shouldReclip
    return false;
  }
}

调用方法

 ClipPath(
                      clipper: BottomClipper(),
                      child: Container(),
)

底部弹窗

底部弹起
 showModalBottomSheet(
                      context: context,
                      builder:(BuildContext context){
                        return  TabMyApp();//返回的是一个容器
                      }
                    );
// ps:这个控件由于是系统自带空间,下面带了一个白色背景容器,导致弹起容器不能设置圆角
// 解决思路,因为这个背景的大小取决于覆盖于其上的容器大小,故,可以给他一个很小的容器,再用用stack控件把一个较大的
// 的控件悬浮其上,在设置悬浮其上的容器,这样看不到下边大概是
Stack(
    alignment: const FractionalOffset(0.5, 0.935),//相对坐标
      children: <Widget>[
         SizeBox(
			height:10
		),
        // 看的到的容器 设置圆角 
		Container(
			height:300
			...
		)
]
)

下拉框

DropdownButtonHideUnderline(
                          child:new DropdownButton(
                              hint: new Text(''),//第一次把hint展示位下拉菜单条目的第一个值(默认值)
                              //设置这个value之后,选中对应位置的item,
                              //再次呼出下拉菜单,会自动定位item位置在当前按钮显示的位置处
                              value: selectItemValue,//下拉菜单选择完之后,呈现给用的值
                              items: generateItemList(),//下拉菜单item点击之后的回调
                              iconSize: 24.0,
                              isDense: true,
                              onChanged: (T){
                                setState(() {
                                  selectItemValue=T;
                                });
                              }
                          ),
                        ),
回调函数
var selectItemValue;
  var selectItemValue1;
  
  List<DropdownMenuItem> generateItemList() {
    List<DropdownMenuItem> items = new List();
    for(int i =0;i<100;i++){
      DropdownMenuItem itemi = new DropdownMenuItem(
          value: i.toString(), child: new Text(i.toString())
      );
      items.add(itemi);
    }
    return items;
  }

展开闭合控件

ExpansionTile 
const ExpansionTile({
    Key key,
    this.leading,
    @required this.title,//开关的名称
    this.backgroundColor,//展开背景色
    this.onExpansionChanged,
    this.children = const <Widget>[],
    this.trailing,
    this.initiallyExpanded = false,//默认关闭
  }) : assert(initiallyExpanded != null),
       super(key: key);

输入框

Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Container(
                  constraints: BoxConstraints.tightFor( width: 200.0),
                  child:  TextField(
                    autofocus: false,
                    //maxLength: 8,
                    textAlign: TextAlign.right,//右对齐
                    keyboardType: TextInputType.number,//数字键盘
                    onChanged: (v) {
                      setState(() {
                        price = double.parse('$v');
                      });
                      //记录金额
                      print("onChange: $v");
                    },
                    decoration: InputDecoration(
                        border: InputBorder.none,//去掉输入框的下滑线
                        hintText: "0.00",
                        hintStyle: TextStyle( fontSize: 14.0)
                    ),
                  ),
                ),
                Text(' 元  ',style: TextStyle(color: Colors.black),),
              ],
            ),
          ],
        ),

弹出框加叠加(一个红包的样子)

showDialog<Null>(//调用方法
                      context: context, //BuildContext对象
                      barrierDismissible: false,
                      builder: (BuildContext context) {
                        return new LoadingDialog( //调用对话框
                            text: '滚烫',
                            ponto:  "https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=3463668003,3398677327&fm=58"
                        );
                      });
//弹出的内容
class LoadingDialog extends Dialog {
  String text;//传递的名字
  String ponto;//头像地址
  LoadingDialog({Key key, @required this.text,this.ponto}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    var stack = new Stack(//创建折叠层
      alignment: const FractionalOffset(0.5, 0.935),//相对坐标
      children: <Widget>[
        //底层
        new Material( //创建透明层
        type: MaterialType.transparency, //透明类型
          child: new Center( //保证控件居中效果
            child: new SizedBox(
              width: 260.0,
              height: 420.0,
              child: new Container(
                decoration: ShapeDecoration(
                  color: Colors.red,
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.all(
                      Radius.circular(8.0),
                    ),
                  ),
                ),
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.start,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    //new CircularProgressIndicator(),
                    ClipPath(
                      clipper: BottomClipper(),
                      child: Container(
                        height: 360,
                        width: 300,
                        //color:
                        decoration: ShapeDecoration(
                          color: Colors.red[600],
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.all(
                              Radius.circular(8.0),
                            ),
                          ),
                        ),
                        child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            Image.network(
                              ponto,
                              scale: 3.0,
                            ),
                            SizedBox(
                              height: 10,
                            ),
                            Text(text,style: new TextStyle(fontSize: 16.0,color: Colors.orangeAccent)),
                            Text('恭喜发财,大吉大利',style: new TextStyle(fontSize: 24.0,color: Colors.orangeAccent)),
                            SizedBox(
                              height: 100,
                            ),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
       //折叠层
        Container(
          height: 200,
          child:Column(
            children: <Widget>[
              Container(
                height: 70,
                width: 70,
                child: FlatButton(
                  onPressed: (){
                    Navigator.push( context,
                        new MaterialPageRoute(builder: (context) {
                          return  Hongbaoxiangqing();
                        })).then((String){//回调函数
                      Navigator.pop(context);
                    });
                  },
                  child: Text('開',style: TextStyle(fontSize: 30),),
                ),
                decoration: BoxDecoration( //背景装饰
                  color: Colors.amber[200],
                  borderRadius: BorderRadius.circular(35),
                ),
              ),
              SizedBox(
                height: 70,
              ),
              FlatButton(
                  onPressed: (){
                    Navigator.pop(context);
                  },
                  child:Icon(
                    Icons.clear,color: Colors.red[800],
                  )
              )
            ],
          ),
        ),
      ],
    );
    return stack;
  }
}
//美化界面
class BottomClipper extends CustomClipper<Path>{//切割类继承
  @override
  Path getClip(Size size) {//必备属性一
    var path = Path();
    path.lineTo(0, 0);
    path.lineTo(0, size.height-60);
    var frit = Offset(size.width/2,size.height);
    var frit2 = Offset(size.width,size.height-60);
    path.quadraticBezierTo(frit.dx, frit.dy, frit2.dx, frit2.dy);//二次贝塞尔曲线
    path.lineTo(size.width, size.height-60);
    path.lineTo(size.width, 0);
    return path;
  }
  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) {//必备属性二
    // TODO: implement shouldReclip
    return false;
  }
}

InkWell

  • inkWell 在listTile里看到的控件,用这个可以自己组合Tile控件,并自带点击 和 长按 两个事件,
  • 同时在用到按钮的时候,我发现自带的按钮都有一定的大小,用InkWell写的按钮可以自定义大小

多文字一行显示不同效果

 RichText(
                      text: TextSpan(
                          children: <TextSpan>[
                            TextSpan(
                              text:'        黑名单功能目标:一是期望能打击具有不良行为的个人和单位的社会声誉,促使其与您',style:TextStyle(fontSize: 15,color: Colors.white),),
                            TextSpan(text:'和解',style:TextStyle(fontSize: 18,color: Colors.blue),),
                            TextSpan(text:';二是为用户提供一个向亲朋好友',style:TextStyle(fontSize: 15,color: Colors.white),),
                            TextSpan(text:'示警',style:TextStyle(fontSize: 18,color: Colors.red),),
                            TextSpan(text:'的平台;三是心中有气,',style:TextStyle(fontSize: 15,color: Colors.white),),
                            TextSpan(text:'不吐不快',style:TextStyle(fontSize: 18,color: Colors.green),),
                            TextSpan(text:'。',style:TextStyle(fontSize: 15,color: Colors.white),),
                          ]
                      ),
                    ),

RichText为必须,TextSpan相当于html里的span,属于行级元素

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: fluttershowModalBottomSheet常用属性及说明

本文链接: https://www.lsjlt.com/news/168612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • fluttershowModalBottomSheet常用属性及说明
    目录showModalBottomSheet常用属性showModalBottomSheetflutter常见控件及例子贝塞尔曲线底部弹窗下拉框展开闭合控件输入框弹出框加叠加(一个红...
    99+
    2024-04-02
  • Elasticsearch属性单词常用解析说明
    一、前言       说实话,刚测试ES的时候,我的内心是崩溃的,好多单词都不知道代表什么意思,只能一边测试,一边查询。看...
    99+
    2024-04-02
  • Vue.component的属性说明
    目录Vue.component的属性1.template2.data3.methods4.propsVue的component标签作用is属性Vue.component的属性 Vue...
    99+
    2024-04-02
  • 基于Unity Line Renderer组件的常用属性说明
    Line Renderer(线条渲染器) 这个组件可以在场景中渲染出"线",比如说:做出手枪瞄准敌人时有红外线的射击辅助线,可以用LineRenderer来完成 不过这个组件对新手还...
    99+
    2024-04-02
  • vue中标签自定义属性的使用及说明
    目录vue标签自定义属性使用举个例子vue自定义属性的设置及获取vue中设置自定义属性及获取总结vue标签自定义属性使用 在 vue 中,尽量避免对dom的操作,通过对状态的管理实现...
    99+
    2023-05-19
    vue标签 vue标签自定义属性 vue定义属性
  • Vue中computed(计算属性)和watch(监听属性)的用法及区别说明
    目录计算属性computed侦听属性watch计算属性computed 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持异步,当computed内有异步操作时无效,无法监听数...
    99+
    2024-04-02
  • mybatis中xml之trim属性说明
    mybatis的xml中trim标签有四个属性 1.prefix 前缀增加的内容 2.suffix 后缀增加的内容 3.prefixOverrides 前缀需要覆盖的内容,一般是第一...
    99+
    2024-04-02
  • 简单说明VB.NET默认属性
    这篇文章主要讲解了“简单说明VB.NET默认属性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“简单说明VB.NET默认属性”吧!在向大家详细介绍VB.NET默认属性之前,首先让大家了解下Te...
    99+
    2023-06-17
  • iframe标签属性说明详解
    `iframe`标签是HTML中的内联框架元素,用于在当前HTML文档中嵌入另一个HTML文档。它具有以下属性:1. `src`:指...
    99+
    2023-09-21
    iframe
  • Android开发手册shape属性和子属性使用说明
    目录shape属性详解子属性详解shape属性详解 <xml version="1.0" encoding="utf-8"> <shape xmlns:androi...
    99+
    2024-04-02
  • iframe标签属性说明 详解
    iframe标签是HTML中的一个标签,用于在当前HTML页面中嵌入另一个HTML页面。它有以下一些常用的属性:1. src:指定要...
    99+
    2023-09-20
    iframe
  • python类的私有属性和公共属性说明
    目录python类私有属性和公共属性python私有属性的定义python类私有属性和公共属性 对于python而言,类的属性的可见度只有两种,public和private。 类的私...
    99+
    2024-04-02
  • Android 中TextureView和SurfaceView的属性方法及示例说明
    目录实践过程SurfaceView属性和方法TextureView属性和方法TextureView示例SurfaceView示例实践过程 SurfaceView属性和方法 surfa...
    99+
    2024-04-02
  • vue中计算属性和方法的区别及说明
    目录vue计算属性和方法区别区别vue向计算属性传递参数vue计算属性和方法区别 当我们实现翻转字符串的业务逻辑时,使用插值表达式打码如下: <div id="app">...
    99+
    2024-04-02
  • Mybatis的mapper标签 namespace属性用法说明
    目录Mybatis mapper标签namespace属性说明MyBatis的命名空间(我们以下图的文件结构来说明)下面我来说一下他们三个之间的关系,我们Mybatis中namesp...
    99+
    2024-04-02
  • FeignClient中name和url属性的作用说明
    目录name和url属性的作用定义场景解释@FeignClient注解属性vaule和name 其实是一个属性关于调用目前有两种name和url属性的作用 定义 feign是声明式的...
    99+
    2024-04-02
  • Vue.delete()删除对象的属性说明
    目录Vue.delete()删除对象的属性delete和Vue.delete的区别Vue.delete()删除对象的属性 Vue.delete( target, key ) da...
    99+
    2024-04-02
  • SpringBoot的属性赋值@Value的用法说明
    目录今天学习到了SpringBoot 的属性赋值@Value用法先总结例子@Value的使用及注意事项为什么使用参数形式前置条件(注意事项)今天学习到了SpringBoot 的属性赋...
    99+
    2024-04-02
  • VBS对象Dictionary的属性和说明
    本篇内容主要讲解“VBS对象Dictionary的属性和说明”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VBS对象Dictionary的属性和说明”吧!Dictionary 保存数据键和项目对...
    99+
    2023-06-08
  • @FeignClient注解中属性contextId的使用说明
    目录一、概述二、解决方案2.1 方案12.2 方案2三、源代码分析相关代码1相关代码2一、概述 如果我们使用Feign定义了两个接口,但是目标服务是同一个,那么在SpringBoot...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作