内容简介:####然后你会发现显示出来的Dialog回事这个样子的####你tm在逗我,这是个什么鬼,别慌,我们改一下####然后就变成了这个样子
Future<T> showDialog<T>({ @required BuildContext context, bool barrierDismissible = true, @Deprecated( 'Instead of using the "child" argument, return the child from a closure ' 'provided to the "builder" argument. This will ensure that the BuildContext ' 'is appropriate for widgets built in the dialog.' ) Widget child, WidgetBuilder builder, }) 复制代码
构造方法中有三个参数
'context' : 这个是必须传递的参数,也是可以显示出视图的关键 'barrierDismissible':这个是安卓中触摸dialog外部自动取消Dialog 'builder':用于创建Widget 复制代码
我们举个栗子
RaisedButton( child: Text("showDialog"), onPressed: () { showDialog( context: context, barrierDismissible: true, builder: (BuildContext context) { return Center( child: Text("data"), ); }); }, ) 复制代码
####然后你会发现显示出来的Dialog回事这个样子的
####你tm在逗我,这是个什么鬼,别慌,我们改一下
showDialog( context: context, barrierDismissible: true, builder: (BuildContext context) { return Scaffold( body: Center( child: Text("data"), ), ); }); 复制代码
####然后就变成了这个样子
####这种东西也不能用啊,我们继续看Dialog.dart文件然后发现了熟悉的AlterDialog,并且上面还有demo
###AlterDialog类
class AlertDialog extends StatelessWidget 复制代码
###显示AlterDialog的示例代码
/// Future<void> _neverSatisfied() async { /// return showDialog<void>( /// context: context, /// barrierDismissible: false, // user must tap button! /// builder: (BuildContext context) { /// return AlertDialog( /// title: Text('Rewind and remember'), /// content: SingleChildScrollView( /// child: ListBody( /// children: <Widget>[ /// Text('You will never be satisfied.'), /// Text('You\’re like me. I’m never satisfied.'), /// ], /// ), /// ), /// actions: <Widget>[ /// FlatButton( /// child: Text('Regret'), /// onPressed: () { /// Navigator.of(context).pop(); /// }, /// ), /// ], /// ); /// }, /// ); /// } 复制代码
####我们试一下官方示例
ojbk官方的dialog已经搞定。现在我们开始自定义一个Dialog
####1. 先看下AlterDialog构造
const AlertDialog({ Key key, this.title, this.titlePadding, this.titleTextStyle, this.content, this.contentPadding = const EdgeInsets.fromLTRB(24.0, 20.0, 24.0, 24.0), this.contentTextStyle, this.actions, this.backgroundColor, this.elevation, this.semanticLabel, this.shape, }) : assert(contentPadding != null), super(key: key); 复制代码
######我们看到一些基本属性定义,然后我们只关心content,而content是一个widget类
/// The (optional) content of the dialog is displayed in the center of the /// dialog in a lighter font. /// /// Typically this is a [SingleChildScrollView] that contains the dialog's /// message. As noted in the [AlertDialog] documentation, it's important /// to use a [SingleChildScrollView] if there's any risk that the content /// will not fit. final Widget content; 复制代码
######那正好,我们直接定义widget传进去就ojbk了 ####2. 我们定义一个类,比如MyDialog。按照AlterDaialog构造再搞一遍
import "package:flutter/material.dart"; class MyDailog extends StatelessWidget { final Widget content; final List<Widget> actions; final Color backgroundColor; final double elevation; final String semanticLabel; final ShapeBorder shape; const MyDailog({ Key key, this.content, this.actions, this.backgroundColor, this.elevation, this.semanticLabel, this.shape, }) : super(key: key); @override Widget build(BuildContext context) { return AlertDialog( content: content, actions: actions, backgroundColor: backgroundColor, elevation: elevation, shape: shape, ); } } 复制代码
####3.效果和之前显示的一样,只是我们把标题去掉了。我们做了简单的封装,就实现了自己的Dialog。 ####4.我们看到使用showDialog要写很长的代码,如果我们自定义那岂不是更长,能不能把showDialog简化一下,ojbk,接着搞!
import "package:flutter/material.dart"; void showMyDialog({ @required Widget content, TextStyle contentTextStyle, List<Widget> actions, Color backgroundColor, double elevation, String semanticLabel, ShapeBorder shape, bool barrierDismissible = true, @required BuildContext context, }) { assert(context != null); assert(content != null); showDialog<void>( context: context, barrierDismissible: barrierDismissible, builder: (BuildContext context) { return MyDailog( content: content, backgroundColor: backgroundColor, elevation: elevation, semanticLabel: semanticLabel, shape: shape, actions: actions, ); }, ); } class MyDailog extends StatelessWidget { final Widget content; 此处省略,参照前........ 复制代码
####4.我们使用一下
RaisedButton( child: Text("showDialog"), onPressed: () { showMyDialog( content: SingleChildScrollView( child: ListBody( children: <Widget>[ Text('You will never be satisfied.'), Text('You\’re like me. I’m never satisfied.'), ], ), ), actions: <Widget>[ FlatButton( child: Text('Regret'), onPressed: () { Navigator.of(context).pop(); }, ), ], context: context, ); }, 复制代码
######搞定,和上面的显示一模一样。 ##以上就是今天自定义的Dialog的全部内容。顺便在这儿推广一下的我的Dialog库 ,后续还在添加中。。。。。
以上所述就是小编给大家介绍的《flutter:教你自定义Dialog》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Android 自定义 View (04自定义属性)
- Vue自定义组件(简单实现一个自定义组件)
- Android 自定义View:深入理解自定义属性(七)
- Qt编写自定义控件20-自定义饼图 原 荐
- SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
- 『互联网架构』软件架构-springboot自定义视图和自定义Starter(90)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
1024·人与机器共同进化
东西文库 / 译言·东西文库/电子工业出版社 / 2013-12-20 / 55元
《1024》:国内第一本专注于科技文化的mook。 本期创刊号将目光定焦在“人与机器”这个超热点领域。 如果把机器获得思维能力看作是一种进化, 那人类具备不朽之躯同样也是一种进化。 这是一个野心勃勃但又充满不确定性的未来。 在我们一厢情愿地猜测机器将在不远的将来赶超自己而惶惶不可终日时,人类其实还有一个机会——变得更像机器。这并非科幻小说,而是正在发生的现实。人类创造......一起来看看 《1024·人与机器共同进化》 这本书的介绍吧!