我想创建一个带有深色背景的 CupertinoAlertDialog。
我尝试使用主题小部件来解决这个问题,但它不起作用。
这里有一些代码:
showDialog() {
showCupertinoDialog(
context: context,
builder: (context) {
return Theme(
data: ThemeData(
dialogBackgroundColor: Colors.black,
dialogTheme: DialogTheme(backgroundColor: Colors.black)),
child: CupertinoAlertDialog(
title: Text('Title'),
content: Text('Some message here'),
actions: <Widget>[
FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('OK'),
),
],
),
);
},
);
}
不要使用
Colors.black
,而使用 ThemeData.dark()
showDialog() {
showCupertinoDialog(
context: context,
builder: (context) {
return Theme(
data: ThemeData.dark(),
child: CupertinoAlertDialog(
title: Text('Title'),
content: Text('Some message here'),
actions: <Widget>[
FlatButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text('OK'),
),
],
),
);
},
);
}
背景颜色是硬编码的:
但是您可以创建自己的小部件而不是默认小部件。
对于您的深色模式
CupertinoAlertDialog
,可以执行以下操作:
bool isAppInDarkMode(BuildContext context) {
final brightness =
WidgetsBinding.instance.platformDispatcher.platformBrightness;
return brightness == Brightness.dark;
}
showDialog() {
showCupertinoDialog(
context: context,
builder: (context) {
final brightness = isAppInDarkMode(context) ? Brightness.dark : Brightness.light;
return CupertinoTheme(
data: CupertinoThemeData(
brightness: brightness,
),
child: CupertinoAlertDialog(
title: Text(title),
content: Text(subtitle),
actions: actionsWidgets,
),
);
},
);
}
也许你可以使用adaptive_Dialog代替它 https://pub.dev/packages/adaptive_dialog