• FLutter自定义dialog并可传回调函数


    自定义dialog代码:

    import 'package:flutter/cupertino.dart';
    import 'package:flutter/material.dart';

    class addLabelPageDialog extends StatefulWidget {
    final confirmCallback;
    const addLabelPageDialog(
    {
    Key key,
    this.confirmCallback
    }) : super(key: key);

    @override
    State<StatefulWidget> createState() {
    return _addLabelPageDialog();
    }
    }

    class _addLabelPageDialog extends State<addLabelPageDialog>{
    final controller = TextEditingController();
    String inputValuue = "";

    @override
    Widget build(BuildContext context) {
    return GestureDetector(
    child: Material(//遮罩层
    type: MaterialType.transparency, //透明类型
    //透明度
    child: new Center(
    child: Container(
    400,
    height: 300,
    decoration: BoxDecoration(
    color: Colors.white,
    shape: BoxShape.rectangle,
    //可以设置角度,BoxShape.circle直接圆形
    borderRadius: BorderRadius.all(Radius.circular(15.0)),
    ),
    child: Column(
    children: <Widget>[
    Container(
    400,
    height: 60,
    alignment: Alignment.center,
    decoration: BoxDecoration(
    color: Colors.red,
    shape: BoxShape.rectangle,
    //可以设置角度,BoxShape.circle直接圆形
    borderRadius: BorderRadius.only(
    topLeft: Radius.circular(15.0),
    topRight: Radius.circular(15.0)),
    ),
    child: Text(
    "新建标签",
    style: TextStyle(
    color: Colors.white,
    fontSize: 30,
    ),
    ),
    ),
    Container(
    padding: new EdgeInsets.all(30),
    color: Colors.white,
    child: Container(
    padding: new EdgeInsets.all(10),
    decoration: BoxDecoration(
    color: Color(0xFFFFCDD2),
    border: Border.all(color: Colors.red, 1.0),
    borderRadius: BorderRadius.circular(5.0),
    ),
    child: TextFormField(
    style: TextStyle(fontSize: 20,),
    textAlign: TextAlign.center,
    controller: controller,
    onFieldSubmitted: (val) {
    print("============键盘按回车完成=============" + val);
    inputValuue = val;
    },
    decoration: InputDecoration(
    hintText: '内容',
    border: UnderlineInputBorder(
    borderSide: BorderSide.none)),
    )),
    ),
    Container(
    padding: new EdgeInsets.only(top: 30),
    child: GestureDetector(
    child: Container(
    100,
    height: 50,
    alignment: Alignment.center,
    decoration: BoxDecoration(
    color: Colors.red,
    borderRadius: BorderRadius.circular(10.0),
    ),
    child: Text("确定", style: TextStyle(fontSize: 25,color: Colors.white),),
    ),
    onTap: (){
    //通过回调函数回传新建的标签内容
    widget.confirmCallback(inputValuue);
    Navigator.of(context).pop();
    },
    ),
    ),
    ],
    )),
    ),
    ),
    onTap: () {
    print("关闭dialog");
    Navigator.pop(context); //关闭对话框
    },
    );
    }
    }




    调用方式:
    onTap: () {//点击事件触发
    print("添加标签");
    return showDialog<Null>(
    context: context, //BuildContext对象
    barrierDismissible: false,
    builder: (BuildContext context) {
    return addLabelPageDialog(confirmCallback: confirmCallback);
    });
    },
    
    
    //回调函数,接收新建的标签内容
    void confirmCallback(value){
    if(value == null || value == ""){
    return;
    }
    if(labelList.contains(value)){
    Fluttertoast.showToast(msg: "已添加,请勿重复添加",gravity: ToastGravity.CENTER);
    }
    print("添加的标签内容::::" + value);
    setState(() {
    labelList.add(value);
    });
    }
    so easy!!!加油Flutter开发者们!!!祝一路顺风!!!!!!!!!!!!!!!!!!
  • 相关阅读:
    第01组 每周小结(2/3)(组长)
    第01组 每周小结 (1/3)(组长)
    第01组 Beta冲刺 总结(组长)
    第01组Beta冲刺(5/5)(组长)
    第01组Beta冲刺(4/5)(组长)
    第01组Beta冲刺(3/5)(组长)
    第01组Beta冲刺(2/5)(组长)
    第01组Beta冲刺(1/5)(组长)
    软工实践个人总结
    每周小结(3/3)
  • 原文地址:https://www.cnblogs.com/Anonyme/p/13539362.html
Copyright © 2020-2023  润新知