Flutter 显示颤振应用程序中另一个文件中的对话框
我试图在Flutter 显示颤振应用程序中另一个文件中的对话框,flutter,dart,Flutter,Dart,我试图在StatefullWidget的另一个文件中显示一个对话框,但是当我调用它的函数时,什么都没有发生 我之所以想这样做,是因为我的代码中有太多的代码嵌套,所以我希望保持简单和干净 下面是对话框.dart文件 导入“包装:颤振/材料.省道”; 类PersonDetailsDialog扩展StatefulWidget{ PersonDetailsDialog({Key}):super(Key:Key); @凌驾 _PersonDetailsDialogState createState(){
StatefullWidget
的另一个文件中显示一个对话框,但是当我调用它的函数时,什么都没有发生
我之所以想这样做,是因为我的代码中有太多的代码嵌套,所以我希望保持简单和干净
下面是对话框.dart文件
导入“包装:颤振/材料.省道”;
类PersonDetailsDialog扩展StatefulWidget{
PersonDetailsDialog({Key}):super(Key:Key);
@凌驾
_PersonDetailsDialogState createState(){
返回_PersonDetailsDialogState();
}
}
类_PersonDetailsDialogState扩展状态{
@凌驾
小部件构建(构建上下文){
Future\u neversatified()异步{
返回显示对话框(
上下文:上下文,
barrierDismissible:false,//用户必须点击按钮!
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“倒带并记住”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('你永远不会满意'),
文本('你和我一样,我从来都不满足'),
],
),
),
行动:[
扁平按钮(
儿童:文本(“遗憾”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
},
);
}
}
}
下面是main.dart文件
mport'包装:颤振/材料.dart';
导入“包:实用_0/homepage.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色
),
主页:主页(),
);
}
}
下面是homepage.dart文件,当用户单击RaisedButton
时,我试图在其中显示对话框,但什么也没发生
导入“包装:颤振/材料.省道”;
类主页扩展了无状态小部件{
最终双高度系数=600/896;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
孩子:升起按钮(
onPressed:PersonDetailsDialog(),//显示对话框
),
),
);
}
}
您必须使用要显示对话框的位置
我希望下面的例子能澄清你的想法
class Delete extends StatefulWidget {
@override
_DeleteState createState() => _DeleteState();
}
class _DeleteState extends State<Delete> {
BuildContext parent, child;
@override
Widget build(BuildContext context) => Scaffold(
body: Container(
child: Center(
child: RaisedButton(
onPressed: () {
showDialog(
context: context,
barrierDismissible: false,
child: PersonDetailsDialog());
}, // show dialog
),
),
),
);
}
class PersonDetailsDialog extends StatefulWidget {
PersonDetailsDialog({Key key}) : super(key: key);
@override
_PersonDetailsDialogState createState() {
return _PersonDetailsDialogState();
}
}
class _PersonDetailsDialogState extends State<PersonDetailsDialog> {
@override
Widget build(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();
},
),
],
);
}
}
class Delete扩展StatefulWidget{
@凌驾
_DeleteState createState()=>\u DeleteState();
}
类_DeleteState扩展了状态{
构建上下文父、子;
@凌驾
小部件构建(构建上下文)=>Scaffold(
主体:容器(
儿童:中心(
孩子:升起按钮(
已按下:(){
显示对话框(
上下文:上下文,
禁止:错误,
child:PersonDetailsDialog());
},//显示对话框
),
),
),
);
}
类PersonDetailsDialog扩展StatefulWidget{
PersonDetailsDialog({Key}):super(Key:Key);
@凌驾
_PersonDetailsDialogState createState(){
返回_PersonDetailsDialogState();
}
}
类_PersonDetailsDialogState扩展状态{
@凌驾
小部件构建(构建上下文){
返回警报对话框(
标题:文本(“倒带并记住”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('你永远不会满意'),
文本('你和我一样,我从来都不满足'),
],
),
),
行动:[
扁平按钮(
儿童:文本(“遗憾”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
}
}
您必须使用要显示对话框的位置
我希望下面的例子能澄清你的想法
class Delete extends StatefulWidget {
@override
_DeleteState createState() => _DeleteState();
}
class _DeleteState extends State<Delete> {
BuildContext parent, child;
@override
Widget build(BuildContext context) => Scaffold(
body: Container(
child: Center(
child: RaisedButton(
onPressed: () {
showDialog(
context: context,
barrierDismissible: false,
child: PersonDetailsDialog());
}, // show dialog
),
),
),
);
}
class PersonDetailsDialog extends StatefulWidget {
PersonDetailsDialog({Key key}) : super(key: key);
@override
_PersonDetailsDialogState createState() {
return _PersonDetailsDialogState();
}
}
class _PersonDetailsDialogState extends State<PersonDetailsDialog> {
@override
Widget build(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();
},
),
],
);
}
}
class Delete扩展StatefulWidget{
@凌驾
_DeleteState createState()=>\u DeleteState();
}
类_DeleteState扩展了状态{
构建上下文父、子;
@凌驾
小部件构建(构建上下文)=>Scaffold(
主体:容器(
儿童:中心(
孩子:升起按钮(
已按下:(){
显示对话框(
上下文:上下文,
禁止:错误,
child:PersonDetailsDialog());
},//显示对话框
),
),
),
);
}
类PersonDetailsDialog扩展StatefulWidget{
PersonDetailsDialog({Key}):super(Key:Key);
@凌驾
_PersonDetailsDialogState createState(){
返回_PersonDetailsDialogState();
}
}
类_PersonDetailsDialogState扩展状态{
@凌驾
小部件构建(构建上下文){
返回警报对话框(
标题:文本(“倒带并记住”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('你永远不会满意'),
文本('你和我一样,我从来都不满足'),
],
),
),
行动:[
扁平按钮(
儿童:文本(“遗憾”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
}
}
以下是一个示例:
显示对话框是一个异步函数
child: RaisedButton(
onPressed: () async{
final result = await showDialog(
context: context,
builder: (_) => AlertWidget(),
);
return result;
},
以下是一个例子:
显示对话框是一个异步函数
child: RaisedButton(
onPressed: () async{
final result = await showDialog(
context: context,
builder: (_) => AlertWidget(),
);
return result;
},
谢谢!对于更精确的描述:“您必须在想要显示对话框的位置调用
showDialog
方法,但您可以从单独的文件导入此对话框小部件,并将其指定为showDialog
方法的子项。”此解决方案对我不起作用,因为showDialog的“子项”似乎已被弃用。但是hackemate的解决方案奏效了。非常感谢!