Dart 颤振-SimpleDialog in FloatingAction按钮
我试图在点击Dart 颤振-SimpleDialog in FloatingAction按钮,dart,flutter,Dart,Flutter,我试图在点击FloatingActionButton后创建一个SimpleDialog,但是当按下该按钮时,什么也没有发生 我做错了什么 import "package:flutter/material.dart"; void main() { runApp(new ControlleApp()); } class ControlleApp extends StatelessWidget { @override Widget build(BuildContext context)
FloatingActionButton
后创建一个SimpleDialog
,但是当按下该按钮时,什么也没有发生
我做错了什么
import "package:flutter/material.dart";
void main() {
runApp(new ControlleApp());
}
class ControlleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) => new Scaffold(
appBar: new AppBar(
backgroundColor: new Color(0xFF26C6DA),
),
floatingActionButton: new FloatingActionButton(
tooltip: 'Add',
child: new Icon(Icons.add),
backgroundColor: new Color(0xFFF44336),
onPressed: (){
new SimpleDialog(
title: new Text('Test'),
children: <Widget>[
new RadioListTile(
title: new Text('Testing'), value: null, groupValue: null, onChanged: (value) {},
)
],
);
}
),
);
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(新的ControlleApp());
}
类ControlleApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回新材料PP(
主页:新主页(),
);
}
}
类主页扩展了无状态小部件{
@凌驾
小部件构建(BuildContext上下文)=>new Scaffold(
appBar:新的appBar(
背景色:新颜色(0xFF26C6DA),
),
floatingActionButton:新的floatingActionButton(
工具提示:“添加”,
子:新图标(Icons.add),
背景颜色:新颜色(0xFFF44336),
已按下:(){
新SimpleDialog(
标题:新文本(“测试”),
儿童:[
新放射科医生(
标题:新文本('Testing'),值:null,组值:null,onChanged:(值){},
)
],
);
}
),
);
}
您需要将其包装在“显示动作”对话框中
showDialog(context: context, child:
new AlertDialog(
title: new Text("My Super title"),
content: new Text("Hello World"),
)
);
我注意到公认的答案是使用
child
作为showDialog
,这实际上是不推荐的,因此我建议避免使用它。您应该使用builder
,我提供了一个示例:
onPressed: () {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: Text('Dialog Title'),
content: Text('This is my content'),
)
);
}
从
floatingActionButton
如果您这样编写代码
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
showDialog(
context: context,
builder: (ctxt) => new AlertDialog(
title: Text("Text Dialog"),
)
);
}),
)
);
}
}
它不会显示警报对话框,但会引发异常“未找到MaterialLocalizations”
当调用对话框的根目录不是MaterialApp
时,就会发生这种情况。在这种情况下,根小部件就是应用程序。但是,如果我们将代码更改为
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyAppImpl()
);
}
}
class MyAppImpl extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
showDialog(
context: context,
builder: (ctxt) => new AlertDialog(
title: Text("Text Dialog"),
)
);
}),
);
}
}
MaterialApp
成为根目录,一切正常。在这种情况下,颤振自动创建材料定位,否则需要手动创建
我在官方文件中找不到任何相同的文件
希望它能帮助您按照下面给出的代码进行操作 首先在
pubspec.yaml
文件中添加rflutter\u警报
依赖项
dependencies:
rflutter_alert: ^1.0.3
将其导入到要使用的位置
import 'package:rflutter_alert/rflutter_alert.dart';
并创建一个要打开的函数
confirmationPopup(BuildContext dialogContext) {
var alertStyle = AlertStyle(
animationType: AnimationType.grow,
overlayColor: Colors.black87,
isCloseButton: true,
isOverlayTapDismiss: true,
titleStyle: TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
descStyle: TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
animationDuration: Duration(milliseconds: 400),
);
Alert(
context: dialogContext,
style: alertStyle,
title: "Detete?",
desc: "Are you sure you want to delete this Gatekeeper?",
buttons: [
DialogButton(
child: Text(
"Cancel",
style: TextStyle(color: Colors.white, fontSize: 18),
),
onPressed: () {
Navigator.pop(context);
},
color: appThemeColor,
),
DialogButton(
child: Text(
"Delete",
style: TextStyle(color: Colors.white, fontSize: 18),
),
onPressed: () {
Navigator.pop(context);
},
color: appThemeColor,
)
]).show();
}
在你想打开的地方打电话
onTap: () {
confirmationPopup(context);
},
这个答案是正确的。您可能最终希望获得对话框的结果,在这种情况下,您可以
等待showDialog
的结果,并在调用Navigator.pop()时输入要返回的值
在对话框操作中。经过多次尝试,我终于找到了问题的症结所在:如果你的应用程序声明了一个本地化委托列表
,但你忘记了包含全局材料本地化。委托
和/或全局WidgetsLocalizations.delegate
,那么对话框将根本不会显示。这现在已经过时了吉尔!顺便说一句,你把我的姓拼错了奥沙利文不是沙利文:)