FLutter Dialog setState及 Dialog被输入框挡住的问题

1.FLutter Dialog setState

使用StatefulBuilder组件,使用setState1方法管理Dialog状态

showDialog(
    context: context,
    builder: (context) {
     return StatefulBuilder(
       builder: (BuildContext context1,
           void Function(void Function()) setState1) {
         return Scaffold(
           backgroundColor: Colors.transparent,
           body: Center(
             child: Container(
               width: 600.px,
               height: 610.px,
               padding: EdgeInsets.all(20.px),
               decoration: BoxDecoration(
                 borderRadius: BorderRadius.circular(30.px),
                 color: Colors.white,
               ),
               child: Column(
                 children: [
                   Text("创建房间"),
                   SizedBox(height: 20.px),
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceAround,
                     children: [
                       if (roomList != null)
                         for (var data in roomList!)
                           Column(
                             children: [
                               GestureDetector(
                                 onTap: () {
                                   chooseType = data.type;
                                   print(chooseType);
                                   setState1(() {});
                                 },
                                 child: Container(
                                   child: Image.network(
                                     data.icon,
                                     width: 230.px,
                                   ),
                                   decoration: BoxDecoration(
                                       border:
                                       chooseType == data.type
                                           ? Border.all(
                                           color: Colors
                                               .blueAccent,
                                           width: 3.px)
                                           : Border()),
                                 ),
                               ),
                               Text(data.name)
                             ],
                           )
                     ],
                   ),
                   SizedBox(height: 40.px),
                   Row(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: [
                       Text(
                         "房间名称",
                       ),
                       SizedBox(
                         width: 30.px,
                       ),
                       Container(
                         width: 300.px,
                         height: 50.px,
                         color: Colors.black12,
                         child: TextField(
                           decoration: InputDecoration(),
                           controller: textEditingController,
                         ),
                       )
                     ],
                   ),
                   SizedBox(height: 40.px),
                   Row(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: [
                       GestureDetector(
                         onTap:(){
                           NavigatorUtil.pop(context);
                         },
                         child: Container(
                           width: 220.px,
                           height: 80.px,
                           decoration: BoxDecoration(
                             borderRadius: BorderRadius.circular(30.px),
                             color: Colors.black12,
                           ),
                           alignment: Alignment.center,
                           child: Text(
                             "取消",
                             style: TextStyle(color: Colors.purple),
                           ),
                         ),
                       ),
                       SizedBox(
                         width: 30.px,
                       ),
                       GestureDetector(
                         onTap: () {
                           if (textEditingController.text == "")
                             return;
                           if (chooseType == "") return;
                           _creatRoomV2(textEditingController.text);
                         },
                         child: Container(
                             width: 220.px,
                             height: 80.px,
                             decoration: BoxDecoration(
                               borderRadius:
                               BorderRadius.circular(30.px),
                               color: Colors.purple,
                             ),
                             alignment: Alignment.center,
                             child: Text("确定",
                                 style: TextStyle(
                                     color: Colors.white))),
                       )
                     ],
                   ),
                 ],
               )
             ),
           ),
         );
       },
     );
    });

2.Dialog被输入框挡住

使用背景颜色为透明的Scaffold组件包裹Container

核心代码:

Scaffold(
           backgroundColor: Colors.transparent,
           body: Center(
showDialog(
    context: context,
    builder: (context) {
     return StatefulBuilder(
       builder: (BuildContext context1,
           void Function(void Function()) setState1) {
         return Scaffold(
           backgroundColor: Colors.transparent,
           body: Center(
             child: Container(
               width: 600.px,
               height: 610.px,
               padding: EdgeInsets.all(20.px),
               decoration: BoxDecoration(
                 borderRadius: BorderRadius.circular(30.px),
                 color: Colors.white,
               ),
               child: Column(
                 children: [
                   Text("创建房间"),
                   SizedBox(height: 20.px),
                   Row(
                     mainAxisAlignment: MainAxisAlignment.spaceAround,
                     children: [
                       if (roomList != null)
                         for (var data in roomList!)
                           Column(
                             children: [
                               GestureDetector(
                                 onTap: () {
                                   chooseType = data.type;
                                   print(chooseType);
                                   setState1(() {});
                                 },
                                 child: Container(
                                   child: Image.network(
                                     data.icon,
                                     width: 230.px,
                                   ),
                                   decoration: BoxDecoration(
                                       border:
                                       chooseType == data.type
                                           ? Border.all(
                                           color: Colors
                                               .blueAccent,
                                           width: 3.px)
                                           : Border()),
                                 ),
                               ),
                               Text(data.name)
                             ],
                           )
                     ],
                   ),
                   SizedBox(height: 40.px),
                   Row(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: [
                       Text(
                         "房间名称",
                       ),
                       SizedBox(
                         width: 30.px,
                       ),
                       Container(
                         width: 300.px,
                         height: 50.px,
                         color: Colors.black12,
                         child: TextField(
                           decoration: InputDecoration(),
                           controller: textEditingController,
                         ),
                       )
                     ],
                   ),
                   SizedBox(height: 40.px),
                   Row(
                     mainAxisAlignment: MainAxisAlignment.center,
                     children: [
                       GestureDetector(
                         onTap:(){
                           NavigatorUtil.pop(context);
                         },
                         child: Container(
                           width: 220.px,
                           height: 80.px,
                           decoration: BoxDecoration(
                             borderRadius: BorderRadius.circular(30.px),
                             color: Colors.black12,
                           ),
                           alignment: Alignment.center,
                           child: Text(
                             "取消",
                             style: TextStyle(color: Colors.purple),
                           ),
                         ),
                       ),
                       SizedBox(
                         width: 30.px,
                       ),
                       GestureDetector(
                         onTap: () {
                           if (textEditingController.text == "")
                             return;
                           if (chooseType == "") return;
                           _creatRoomV2(textEditingController.text);
                         },
                         child: Container(
                             width: 220.px,
                             height: 80.px,
                             decoration: BoxDecoration(
                               borderRadius:
                               BorderRadius.circular(30.px),
                               color: Colors.purple,
                             ),
                             alignment: Alignment.center,
                             child: Text("确定",
                                 style: TextStyle(
                                     color: Colors.white))),
                       )
                     ],
                   ),
                 ],
               )
             ),
           ),
         );
       },
     );
    });
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值