目前,我有AlertDialog一个IconButton。用户可以单击IconButton,每次单击都有两种颜色。问题是我需要关闭AlertDialog并重新打开以查看颜色图标的状态更改。我想在用户单击时立即更改IconButton的颜色。
这是代码:
bool pressphone = false;
//....
new IconButton(
icon: new Icon(Icons.phone),
color: pressphone ? Colors.grey : Colors.green,
onPressed: () => setState(() => pressphone = !pressphone),
),
Run Code Online (Sandbox Code Playgroud) 在这里,我有一个实用程序类,其中有一个用于显示 DialogBox 的函数,所以我正在尝试制作一个 AlertDialog Box,它可以在整个项目的任何地方使用。
因此,我必须将 Title、description 作为参数传递,并且还想传递 Class name,以便在按下警报对话框内的按钮时我们可以导航到该屏幕
class DialogBox {
static DialogBox dialogBox = null;
static DialogBox getInstance() {
if (dialogBox == null) {
dialogBox = DialogBox();
}
return dialogBox;
}
showAlertDialog(BuildContext context, String alertTitle, String alertMessage) {
showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15.0),
),
title: Center(child: Text(alertTitle)),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
alertMessage,
textAlign: TextAlign.center,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
FlatButton(
child: …Run Code Online (Sandbox Code Playgroud) 我正在学习在Flutter中构建应用程序。现在我来警报对话框。我之前在Android和iOS中完成过这些操作,但是如何在Flutter中发出警报?
以下是一些相关的SO问题:
我想进行更一般的规范问答,所以我的答案如下。
我有AlertDialog静态方法,因为我想在用户单击OK按钮时获得回调。
我尝试使用typedef但无法理解。
以下是我的代码:
class DialogUtils{
static void displayDialogOKCallBack(BuildContext context, String title,
String message)
{
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: new Text(title, style: normalPrimaryStyle,),
content: new Text(message),
actions: <Widget>[
new FlatButton(
child: new Text(LocaleUtils.getString(context, "ok"), style: normalPrimaryStyle,),
onPressed: () {
Navigator.of(context).pop();
// HERE I WANTS TO ADD CALLBACK
},
),
],
);
},
);
}
}
Run Code Online (Sandbox Code Playgroud) 我们想在一些异步处理(例如网络进程)之后显示一个 AlertDialog。
从外部类调用“showAlertDialog()”时,我想在没有上下文的情况下调用它。有什么好办法吗?
class SplashPage extends StatelessWidget implements SplashView {
BuildContext _context;
@override
Widget build(BuildContext context) {
this._context = context;
...
}
Run Code Online (Sandbox Code Playgroud)
我已经考虑过上述方法,但我担心附带问题。
帮助
class SplashPage extends StatelessWidget implements SplashView {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: MyStoreColors.eats_white1_ffffff,
body: Center(
child: new SvgPicture.asset('assets/ic_splash.svg'),
),
);
}
@override
void showAlertDialog() {
showDialog<void>(
context: /*How to get context?*/,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Not in stock'),
content: const Text('This item is no longer available'),
actions: <Widget>[
FlatButton( …Run Code Online (Sandbox Code Playgroud) 在我的第一个Flutter 项目中,我试图从Alert Dialog内的TextFormField获取值。我正在尝试验证输入,并根据该验证我想启用/禁用AlertDialog按钮。
_displayDialog(BuildContext context) async {
return showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('TextField AlertDemo'),
content: _container(),
actions: <Widget>[
RaisedButton(
onPressed: isValid
? () {
print("ISVALID:");
}
: null,
child: Text("Click Me"),
)
],
);
});
}
Run Code Online (Sandbox Code Playgroud)
Widget _container() {
return Container(
margin: EdgeInsets.all(25),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
onChanged: (text) {
setState(() {
if (text.length > 5) {
isValid = true; …Run Code Online (Sandbox Code Playgroud) 我正在从另一个对话框打开一个对话框并尝试关闭第一个对话框,但它正在关闭最近的对话框。类似的git 问题。
我试过了
ValueKeyAlertDialogrootNavigator:true在弹出时使用context变量并做Navigator.of(specifiqContext).pop()但它们都不起作用。在dartPad上重现问题的代码。
class MultiDialogTest extends StatefulWidget {
const MultiDialogTest({Key? key}) : super(key: key);
@override
State<MultiDialogTest> createState() => _MultiDialogTestState();
}
class _MultiDialogTestState extends State<MultiDialogTest> {
BuildContext? dialog1Context, dialog2Context;
Future<void> _showDialog1(BuildContext context) async {
await showDialog(
context: context,
barrierDismissible: false,
builder: (c) {
dialog1Context = c;
return AlertDialog(
key: const ValueKey("dialog 1"),
title: const Text("Dialog 1"),
content: ElevatedButton(
child: const Text("close dialog2"),
onPressed: () {
if …Run Code Online (Sandbox Code Playgroud) 在此屏幕中,每次我在警报文本字段中打开键盘时,我都会面临溢出。我已经尝试把SingleChildScrollVIew所有的地方都放进去了,但没有解决。这是具有警报对话框的组件:
Future<void> _showAlertDialog() async {
return showDialog<void>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('Type the Name', textAlign: TextAlign.center,
style: TextStyle(color: Colors.white)),
content: TextField(
controller: _nameController,
keyboardType: TextInputType.text,
textCapitalization: TextCapitalization.sentences,
)
);
},
);
}
Run Code Online (Sandbox Code Playgroud)
这是构建函数:
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomPadding: false,
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TableCalendar(//default code),
Divider(),
_showList(),
],
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add, color: Colors.white,),
onPressed: () => _showCity(context)
),
);
}
Run Code Online (Sandbox Code Playgroud)
_showAlertDialog在内部调用(_showCity参见构建 > 浮动操作按钮 > …
一小时前,当我将 TextField 放入 AlertDialog 中时,我发现了一个奇怪的行为,它不允许输入空格,否则它的行为正常,这是我的代码:
\n//================Flutter doctor -v\n[\xe2\x88\x9a] Flutter(频道稳定,2.0.2,在 Microsoft Windows 上 [版本 10.0.18363.1316] ,语言环境 en-US)\n\xe2\x80\xa2 Flutter 版本 2.0.2,位于 C:\\Flutter\\flutter-latest\n\xe2\x80\xa2 框架修订版 8962f6dc68(5 天前),2021-03 -11 13:22:20 -0800\n\xe2\x80\xa2 引擎修订版 5d8bf811b3\n\xe2\x80\xa2 Dart 版本 2.12.1
\n[\xe2\x88\x9a] Android 工具链 - 为 Android 设备开发(Android SDK 版本 29.0.3)\n\xe2\x80\xa2 Android SDK,位于 C:\\Users\\user\\AppData\\Local\\ Android\\sdk\n\xe2\x80\xa2 平台 android-30,构建工具 29.0.3\n\xe2\x80\xa2 Java 二进制文件位于:C:\\Program Files\\Android\\Android Studio\\ jre\\bin\\java\n\xe2\x80\xa2 Java 版本 OpenJDK 运行时环境(内部版本 1.8.0_202-release-1483-b03)\n\xe2\x80\xa2 接受所有 Android 许可证。
\n[\xe2\x88\x9a] Chrome - 为网络开发\n\xe2\x80\xa2 Chrome,位于 C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\Application\\chrome 。EXE文件
\n[\xe2\x88\x9a] Visual Studio - 针对 Windows 进行开发(Visual Studio …