美文网首页
Flutter 3种ios常用弹框封装

Flutter 3种ios常用弹框封装

作者: LiWeiJ | 来源:发表于2021-01-13 16:57 被阅读0次

话不多说,直接上代码

第一种: 从底部弹出的选项

第二种: 从中间弹出的提示框

 第三种: 从中间弹出的输入框

PS:把3段代码都放出来了,直接使用就好。 不知道为什么图片这么大,见谅哈哈哈

class AppTool {

  /// 底部弹出2个选项框

  showBottomAlert(BuildContext context, confirmCallback, String title,

      String option1, String option2) {

    showCupertinoModalPopup(

        context: context,

        builder: (context) {

          return ShowCustomAlterWidget(

              confirmCallback, title, option1, option2);

        });

  }

  /// 中间弹出提示框

  showCenterTipsAlter(BuildContext context,confirmCallback,String title, String desText) {

    showDialog(

        context: context,

        builder: (BuildContext context) {

          return ShowTipsAlterWidget(confirmCallback, title, desText);

        });

  }

  /// 中间弹出输入框

  showCenterInputAlert(BuildContext context,confirmCallback,String title,String placeholder) {

    showDialog(

        context: context,

        builder: (BuildContext context) {

          return ShowInputAlertWidget(confirmCallback, title,placeholder);

        });

  }

}

class ShowInputAlertWidget extends StatefulWidget {

  final confirmCallback;

  final title;

  final placeholder;

  const ShowInputAlertWidget(

      this.confirmCallback, this.title,this.placeholder);

  @override

  _ShowInputAlertWidgetState createState() => _ShowInputAlertWidgetState();

}

class _ShowInputAlertWidgetState extends State<ShowInputAlertWidget> {

  String inputValue = '';

  @override

  Widget build(BuildContext context) {

    return CupertinoAlertDialog(

            title: Text(widget.title),

            content: Column(

              children: <Widget>[

              CupertinoTextField(placeholder: widget.placeholder,onChanged: (value){

                inputValue = value;

              },)

              ],

            ),

            actions: <Widget>[

              CupertinoDialogAction(

                child: Text("取消"),

                onPressed: () {

                  Navigator.pop(context);

                },

              ),

              CupertinoDialogAction(

                child: Text("确定"),

                onPressed: () {

                  widget.confirmCallback(inputValue);

                  Navigator.pop(context);

                },

              ),

            ],

          );

  }

}

class ShowTipsAlterWidget extends StatefulWidget {

  final confirmCallback;

  final title;

  final desText;

  const ShowTipsAlterWidget(

      this.confirmCallback, this.title, this.desText);

  @override

  _ShowTipsAlterWidgetState createState() => _ShowTipsAlterWidgetState();

}

class _ShowTipsAlterWidgetState extends State<ShowTipsAlterWidget> {

  @override

  Widget build(BuildContext context) {

    return CupertinoAlertDialog(

            title: Text(widget.title),

            content: Column(

              children: <Widget>[

                SizedBox(

                  height: 10,

                ),

                Align(

                  child: Text(widget.desText),

                  alignment: Alignment(0, 0),

                ),

              ],

            ),

            actions: <Widget>[

              CupertinoDialogAction(

                child: Text("取消"),

                onPressed: () {

                  Navigator.pop(context);

                },

              ),

              CupertinoDialogAction(

                child: Text("确定"),

                onPressed: () {

                  widget.confirmCallback('确定');

                  Navigator.pop(context);

                },

              ),

            ],

          );

  }

}

class ShowCustomAlterWidget extends StatefulWidget {

  final confirmCallback;

  final title;

  final option1;

  final option2;

  const ShowCustomAlterWidget(

      this.confirmCallback, this.title, this.option1, this.option2);

  @override

  _ShowCustomAlterWidgetState createState() => _ShowCustomAlterWidgetState();

}

class _ShowCustomAlterWidgetState extends State<ShowCustomAlterWidget> {

  final controller = TextEditingController();

  String inputValuue = "";

  @override

  Widget build(BuildContext context) {

    return CupertinoActionSheet(

      title: Text(

        widget.title,

        style: TextStyle(fontSize: 22),

      ),

      actions: <Widget>[

        CupertinoActionSheetAction(

          onPressed: () {

            Navigator.pop(context);

            widget.confirmCallback(widget.option1);

          },

          child: Text(widget.option1),

        ),

        CupertinoActionSheetAction(

          onPressed: () {

            Navigator.pop(context);

            widget.confirmCallback(widget.option2);

          },

          child: Text(widget.option2),

        ),

      ],

      cancelButton: CupertinoActionSheetAction(

        onPressed: () {

          Navigator.pop(context);

        },

        child: Text('取消'),

      ),

    );

  }

}

使用方法:

有问题的可以联系我哈。

相关文章

网友评论

      本文标题:Flutter 3种ios常用弹框封装

      本文链接:https://www.haomeiwen.com/subject/pzxpaktx.html