Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 颤振-SimpleDialog in FloatingAction按钮_Dart_Flutter - Fatal编程技术网

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
,那么对话框将根本不会显示。这现在已经过时了吉尔!顺便说一句,你把我的姓拼错了奥沙利文不是沙利文:)