<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在使用showModalBottomSheet這個控制元件時,想要設定圓角,在內容widget設定不管用,然後直接看這個控制元件的實現原理,一看有個shape屬性,感覺有戲!果然設定完畢後,成功了。
注意:一定不要設定builder中的背景顏色,否則會覆蓋導致不能顯示出圓角!
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("居中文字")), ); });
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; /*DropDownState(){ selectItemValue=getDropdownMenuItem()[0].value; }*/ 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
多文字一行顯示不同效果
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,屬於行級元素
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45