Flutter 颤振-如何在弹出窗口中创建窗体

Flutter 颤振-如何在弹出窗口中创建窗体,flutter,dart,popup,flutter-layout,flutter-form-builder,Flutter,Dart,Popup,Flutter Layout,Flutter Form Builder,我想在弹出窗口中创建一个带有颤振的表单,如下图所示: 弹出窗口 我怎样才能用颤振做到这一点呢?给你!showDialog将WidgetBuilder作为参数,因此您可以返回任何小部件 import 'package:flutter/material.dart'; void main() { runApp(new MaterialApp(home: new MyApp())); } class MyApp extends StatefulWidget { @override

我想在弹出窗口中创建一个带有颤振的表单,如下图所示: 弹出窗口


我怎样才能用颤振做到这一点呢?

给你!showDialog将WidgetBuilder作为参数,因此您可以返回任何小部件

   import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new MyApp()));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _formKey = GlobalKey<FormState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flutter"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            showDialog(
                context: context,
                builder: (BuildContext context) {
                  return AlertDialog(
                    content: Stack(
                      overflow: Overflow.visible,
                      children: <Widget>[
                        Positioned(
                          right: -40.0,
                          top: -40.0,
                          child: InkResponse(
                            onTap: () {
                              Navigator.of(context).pop();
                            },
                            child: CircleAvatar(
                              child: Icon(Icons.close),
                              backgroundColor: Colors.red,
                            ),
                          ),
                        ),
                        Form(
                          key: _formKey,
                          child: Column(
                            mainAxisSize: MainAxisSize.min,
                            children: <Widget>[
                              Padding(
                                padding: EdgeInsets.all(8.0),
                                child: TextFormField(),
                              ),
                              Padding(
                                padding: EdgeInsets.all(8.0),
                                child: TextFormField(),
                              ),
                              Padding(
                                padding: const EdgeInsets.all(8.0),
                                child: RaisedButton(
                                  child: Text("Submitß"),
                                  onPressed: () {
                                    if (_formKey.currentState.validate()) {
                                      _formKey.currentState.save();
                                    }
                                  },
                                ),
                              )
                            ],
                          ),
                        ),
                      ],
                    ),
                  );
                });
          },
          child: Text("Open Popup"),
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(newmaterialapp)(主页:newmyapp());
}
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>\u MyAppState();
}
类MyAppState扩展了状态{
final _formKey=GlobalKey();
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“颤振”),
),
正文:中(
孩子:升起按钮(
已按下:(){
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
内容:堆栈(
溢出:溢出。可见,
儿童:[
定位(
右:-40.0,
top:-40.0,
孩子:InkResponse(
onTap:(){
Navigator.of(context.pop();
},
孩子:圆环星(
子:图标(Icons.close),
背景颜色:Colors.red,
),
),
),
形式(
键:_formKey,
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
填充物(
填充:边缘设置。全部(8.0),
子项:TextFormField(),
),
填充物(
填充:边缘设置。全部(8.0),
子项:TextFormField(),
),
填充物(
填充:常数边集全部(8.0),
孩子:升起按钮(
儿童:文本(“提交”),
已按下:(){
if(_formKey.currentState.validate()){
_formKey.currentState.save();
}
},
),
)
],
),
),
],
),
);
});
},
子项:文本(“打开弹出窗口”),
),
),
);
}
}

希望它有帮助

使用rflutter\u警报插件

必须将库作为依赖项添加到项目中

 dependencies:
   rflutter_alert: ^1.0.3
要打开弹出窗口,让我们成为一个函数并执行以下操作:

 _openPopup(context) {
    Alert(
        context: context,
        title: "LOGIN",
        content: Column(
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                icon: Icon(Icons.account_circle),
                labelText: 'Username',
              ),
            ),
            TextField(
              obscureText: true,
              decoration: InputDecoration(
                icon: Icon(Icons.lock),
                labelText: 'Password',
              ),
            ),
          ],
        ),
        buttons: [
          DialogButton(
            onPressed: () => Navigator.pop(context),
            child: Text(
              "LOGIN",
              style: TextStyle(color: Colors.white, fontSize: 20),
            ),
          )
        ]).show();
  }

下面是一个代码示例,它允许您创建一个可以生成此类弹出窗口的按钮

代码

RaisedButton(
          child: Text("Open Popup"),
          onPressed: () {
            showDialog(
                context: context,
                builder: (BuildContext context) {
                  return AlertDialog(
                    scrollable: true,
                    title: Text('Login'),
                    content: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Form(
                        child: Column(
                          children: <Widget>[
                            TextFormField(
                              decoration: InputDecoration(
                                labelText: 'Name',
                                icon: Icon(Icons.account_box),
                              ),
                            ),
                            TextFormField(
                              decoration: InputDecoration(
                                labelText: 'Email',
                                icon: Icon(Icons.email),
                              ),
                            ),
                            TextFormField(
                              decoration: InputDecoration(
                                labelText: 'Message',
                                icon: Icon(Icons.message ),
                              ),
                            ),
                          ],
                        ),
                      ),
                    ),
                     actions: [
                      RaisedButton(
                          child: Text("Submit"),
                          onPressed: () {
                            // your code
                          })
                    ],
                  );
                });
          },
        ),
RaisedButton(
子项:文本(“打开弹出窗口”),
已按下:(){
显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
可滚动:对,
标题:文本(“登录”),
内容:填充(
填充:常数边集全部(8.0),
孩子:表格(
子:列(
儿童:[
TextFormField(
装饰:输入装饰(
labelText:'名称',
图标:图标(图标。帐户框),
),
),
TextFormField(
装饰:输入装饰(
labelText:“电子邮件”,
图标:图标(Icons.email),
),
),
TextFormField(
装饰:输入装饰(
labelText:'消息',
图标:图标(Icons.message),
),
),
],
),
),
),
行动:[
升起的按钮(
儿童:文本(“提交”),
已按下:(){
//你的代码
})
],
);
});
},
),
输出:

要获得更多选项,您必须操纵 表单小部件、TextField小部件或RaisedButton小部件,例如 自动验证、装饰、颜色等。。。如果这还不够,你可以 可以使用小部件而不是小部件。但是在 在这种情况下,您将用child替换content属性。使 必要的修改


我尝试了上面的所有答案,但上面说没有重大的小部件错误。那我试试这个 在图标按钮的位置,你可以使用任何小部件,但你必须使用脚手架bg颜色作为一个透明和后退或取消按钮也

onTap: () {
                            showDialog(
                              context: context,
                              builder: (BuildContext context) {
                                return Scaffold(
                                  backgroundColor: Colors.transparent,
                                  body: IconButton(
                                    icon: Icon(Icons.ac_unit),
                                    onPressed: () {
                                      Navigator.pop(context);
                                    },
                                  ),
                                );
                              },
                            );
                          },
使用
showDialog()
showGeneralDialog()
showDialog(上下文:上下文,生成器:(BuildContext上下文){返回容器(高度:10.0,宽度:10.0,颜色:Colors.white,;})我这样做了,但显示了一个白色页面。
onTap: () {
                            showDialog(
                              context: context,
                              builder: (BuildContext context) {
                                return Scaffold(
                                  backgroundColor: Colors.transparent,
                                  body: IconButton(
                                    icon: Icon(Icons.ac_unit),
                                    onPressed: () {
                                      Navigator.pop(context);
                                    },
                                  ),
                                );
                              },
                            );
                          },