zoukankan      html  css  js  c++  java
  • 30 Flutter自定义Dialog

    MyDialog.dart

    import 'dart:async';
    
    import 'package:flutter/material.dart';
    
    class MyDialog extends Dialog {
      String title;
      String content;
    
      MyDialog({this.title="",this.content=""});
    
      _showTimer(context){
        var timer;
        timer=Timer.periodic(
          Duration(milliseconds:3000),(t){
            print("关闭");
            Navigator.pop(context);
            t.cancel();//取消定时器 timer.cancle();
          }
         );
      }
    
    
      @override
      Widget build(BuildContext context) {
        _showTimer(context);
        return Material(
          type: MaterialType.transparency,
          child: Center(
            child: Container(
              height: 300,
               300,
              color: Colors.white,
              child: Column(
                children: <Widget>[
                  Padding(
                    padding: EdgeInsets.all(10),
                    child: Stack(
                      children: <Widget>[
                        Align(alignment: Alignment.center, child: Text("${this.title}")),
                        Align(
                            alignment: Alignment.centerRight,
                            child:InkWell(
                              child: Icon(Icons.close),
                              onTap: (){
                                Navigator.pop(context);
                              },
                            )
                          ),
                      ],
                    ),
                  ),
                  Divider(),
                  Container(
                    padding: EdgeInsets.all(10),
                     double.infinity,
                    child: Text("${this.content}",textAlign: TextAlign.left),
                  )
                ],
              ),
            ),
          ),
        );
      }
    }

    Dialog.dart

    import 'package:flutter/material.dart';
    import 'package:flutter_example/components/MyDialog.dart';
    import 'package:fluttertoast/fluttertoast.dart';
    
    class DialogPage extends StatefulWidget {
      DialogPage({Key key}) : super(key: key);
    
      _DialogPageState createState() => _DialogPageState();
    }
    
    class _DialogPageState extends State<DialogPage> {
      _alertDialog() async {
        var result = await showDialog(
            context: context,
            builder: (context) {
              return AlertDialog(
                title: Text('提示信息'),
                content: Text('你确定要删除吗?'),
                actions: <Widget>[
                  FlatButton(
                    child: Text('取消'),
                    onPressed: () {
                      print('取消');
                      Navigator.pop(context, "Cancle");
                    },
                  ),
                  FlatButton(
                    child: Text('确定'),
                    onPressed: () {
                      Navigator.pop(context, "Ok");
                      print('确定');
                    },
                  )
                ],
              );
            });
        print(result);
      }
    
      _simpleDialog() async {
        var result = await showDialog(
            context: context,
            builder: (context) {
              return SimpleDialog(
                title: Text("选择内容"),
                children: <Widget>[
                  SimpleDialogOption(
                    child: Text("Option A"),
                    onPressed: () {
                      print("Options A");
                      Navigator.pop(context, "A");
                    },
                  ),
                  Divider(),
                  SimpleDialogOption(
                    child: Text("Option B"),
                    onPressed: () {
                      print("Options B");
                      Navigator.pop(context, "B");
                    },
                  ),
                  Divider(),
                  SimpleDialogOption(
                    child: Text("Option C"),
                    onPressed: () {
                      print("Options C");
                      Navigator.pop(context, "C");
                    },
                  )
                ],
              );
            });
        print(result);
      }
    
      _modelBottomSheet() async {
        showModalBottomSheet(
            context: context,
            builder: (context) {
              return Container(
                height: 220,
                child: Column(
                  children: <Widget>[
                    ListTile(
                      title: Text("分享 A"),
                      onTap: () {
                        print("分享 A");
                        Navigator.pop(context, "A");
                      },
                    ),
                    Divider(),
                    ListTile(
                      title: Text("分享 B"),
                      onTap: () {
                        print("分享 B");
                        Navigator.pop(context, "B");
                      },
                    ),
                    Divider(),
                    ListTile(
                      title: Text("分享 C"),
                      onTap: () {
                        print("分享 C");
                        Navigator.pop(context, "C");
                      },
                    )
                  ],
                ),
              );
            });
      }
    
      _toast() async {
        Fluttertoast.showToast(
            msg: '提示信息',
            toastLength: Toast.LENGTH_SHORT,
            gravity: ToastGravity.CENTER,
            timeInSecForIos: 3,
            backgroundColor: Colors.black87,
            textColor: Colors.white,
            fontSize: 16.0);
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Dialog'),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                RaisedButton(
                  child: Text('alert弹出框-AlertDialog'),
                  onPressed: _alertDialog,
                ),
                SizedBox(height: 20),
                RaisedButton(
                  child: Text('select弹出框-SimpleDialog'),
                  onPressed: _simpleDialog,
                ),
                SizedBox(height: 20),
                RaisedButton(
                  child: Text('ActionSheet弹出框-showModalBottomSheet'),
                  onPressed: _modelBottomSheet,
                ),
                SizedBox(height: 20),
                RaisedButton(
                  child: Text('toast-fluttertoast第三方库'),
                  onPressed: _toast,
                ),
                SizedBox(height: 20),
                RaisedButton(
                  child: Text('显示自定义Dialog'),
                  onPressed:(){
                    showDialog(
                      context: context,
                      builder: (context){
                        return MyDialog(title:'关于我们',content:'z这是内容部分');
                      }
                    );
                  },
                ),
              ],
            ),
          ),
        );
      }
    }

  • 相关阅读:
    【STM32H7的DSP教程】第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)
    【STM32F429的DSP教程】第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)
    【STM32F407的DSP教程】第28章 FFT和IFFT的Matlab实现(幅频响应和相频响应)
    《安富莱嵌入式周报》第209期:2021.04.19--2021.04.25
    H7-TOOL的APP固件升级至V2.04,上位机升级至V2.04,新增南京沁恒CH32,华大HC32和中科芯CKS32脱机烧录支持(2021-04-24)
    【STM32H7】第9章 ThreadX任务管理
    【STM32F429】第9章 ThreadX任务管理
    【STM32H7】第8章 ThreadX调试方法(串口和RTT两种方式打印任务执行情况)
    【STM32F429】第8章 ThreadX调试方法(串口和RTT两种方式打印任务执行情况)
    《安富莱嵌入式周报》第208期:2021.04.12--2021.04.18
  • 原文地址:https://www.cnblogs.com/yiweiyihang/p/11569521.html
Copyright © 2011-2022 走看看