如何使 AlertDialog 的主体是图像?
How to make body of AlertDialog is Image?
我想像下面这样制作 AlertDialog:
我尝试用我的代码构建它:
return Center(
child: AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
elevation: 0.0,
content: Hero(
tag: 'banner-hero',
child: ClipRRect(
borderRadius:
BorderRadius.all(Radius.circular(10)),
child: Image.asset(
StringImageAsset.popUpBanner,
height: Sizes.width(context) / 1,
width: Sizes.width(context) / 1,
),
),
),
actions: <Widget>[
FlatButton(
child: Text('Open'),
onPressed: () {
Navigator.pop(context);
Navigation.intent(
context, AddsBannerDetail());
},
),
],
),
);
结果是这样的:
如何让AlertDialog的body像例子一样全是图片?以及图片前面的打开按钮。
尝试这样的事情:
RaisedButton(
child: Text("Open"),
onPressed: () => showDialog(
context: context,
builder: (context) {
return Center(
child: Container(
margin: EdgeInsets.all(16),
child: ClipRRect(
borderRadius:
BorderRadius.all(Radius.circular(10)),
child: Stack(
children: <Widget>[
Image.network("https://images.absolutdrinks.com/drink-images/Raw/Absolut/2f2f4c7b-9a52-467e-8c8f-6ad1f127bc35.jpg?imwidth=500",
fit: BoxFit.cover,),
Positioned(
right: 0,
bottom: 0,
child: FlatButton(
child: Text("Open"),
onPressed: () {},
),
)
],
),
),
)
);
}
),
)
看起来像这样:
在您的主屏幕上执行以下代码,然后导航到对话框屏幕(无论您要打开什么)
在您的 onPress/onTap 方法上调用此函数
void openDialogScreenPage() async {
var value = await Navigator.of(context).push(PageRouteBuilder(
opaque: false,
pageBuilder: (BuildContext context, _, __) {
return BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: DialogSCreen();
}));
if (value != null) {
print(value.toString());
}
}
不必创建对话框,您可以创建 activity
将此代码添加到您的 class
void _showDialog(){
showDialog(
context: context,
builder: (_)=> AlertDialog(
backgroundColor: Colors.transparent,
contentPadding: EdgeInsets.all(0),
content: BackdropFilter(
filter: prefix0.ImageFilter.blur(sigmaY: 4.0,sigmaX: 4.0),
child: Container(
width: scrw,
height: scrh,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
image: DecorationImage(
image: NetworkImage("https://images.pexels.com/photos/1591447/pexels-photo-1591447.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"),
fit: BoxFit.cover
)
),
),
),
)
);
}
并在您的 onTap/onPressed 函数中调用 _showDialog(),只需将您的 AlertDialogs 背景色设置为透明并将其 contentpadding 设置为 0,您的代码应该是好的
我想像下面这样制作 AlertDialog:
我尝试用我的代码构建它:
return Center(
child: AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
elevation: 0.0,
content: Hero(
tag: 'banner-hero',
child: ClipRRect(
borderRadius:
BorderRadius.all(Radius.circular(10)),
child: Image.asset(
StringImageAsset.popUpBanner,
height: Sizes.width(context) / 1,
width: Sizes.width(context) / 1,
),
),
),
actions: <Widget>[
FlatButton(
child: Text('Open'),
onPressed: () {
Navigator.pop(context);
Navigation.intent(
context, AddsBannerDetail());
},
),
],
),
);
结果是这样的:
如何让AlertDialog的body像例子一样全是图片?以及图片前面的打开按钮。
尝试这样的事情:
RaisedButton(
child: Text("Open"),
onPressed: () => showDialog(
context: context,
builder: (context) {
return Center(
child: Container(
margin: EdgeInsets.all(16),
child: ClipRRect(
borderRadius:
BorderRadius.all(Radius.circular(10)),
child: Stack(
children: <Widget>[
Image.network("https://images.absolutdrinks.com/drink-images/Raw/Absolut/2f2f4c7b-9a52-467e-8c8f-6ad1f127bc35.jpg?imwidth=500",
fit: BoxFit.cover,),
Positioned(
right: 0,
bottom: 0,
child: FlatButton(
child: Text("Open"),
onPressed: () {},
),
)
],
),
),
)
);
}
),
)
看起来像这样:
在您的主屏幕上执行以下代码,然后导航到对话框屏幕(无论您要打开什么)
在您的 onPress/onTap 方法上调用此函数
void openDialogScreenPage() async {
var value = await Navigator.of(context).push(PageRouteBuilder(
opaque: false,
pageBuilder: (BuildContext context, _, __) {
return BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: DialogSCreen();
}));
if (value != null) {
print(value.toString());
}
}
不必创建对话框,您可以创建 activity
将此代码添加到您的 class
void _showDialog(){
showDialog(
context: context,
builder: (_)=> AlertDialog(
backgroundColor: Colors.transparent,
contentPadding: EdgeInsets.all(0),
content: BackdropFilter(
filter: prefix0.ImageFilter.blur(sigmaY: 4.0,sigmaX: 4.0),
child: Container(
width: scrw,
height: scrh,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
image: DecorationImage(
image: NetworkImage("https://images.pexels.com/photos/1591447/pexels-photo-1591447.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"),
fit: BoxFit.cover
)
),
),
),
)
);
}
并在您的 onTap/onPressed 函数中调用 _showDialog(),只需将您的 AlertDialogs 背景色设置为透明并将其 contentpadding 设置为 0,您的代码应该是好的