Flutter---带输入框的对话框

效果图

步骤

先创建文本控制器(作用为:

管理TextField的文本内容,监听文本变化,获取和设置文本值,清空文本内容

Dart 复制代码
final controller = TextEditingController();

然后创建具体的对话框

Dart 复制代码
// 带输入框的对话框
  void _showDeleteDialog() {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(

        //名称区域
        title: const Text("请输入名称"),
        
        //输入框区域
        content: TextField(  
          controller: controller, //绑定文本控制器,用于管理输入内容
          decoration: //输入框的装饰样式
          const InputDecoration(
            hintText: "请输入",//占位符文本,输入时消失
            border: OutlineInputBorder(),//边框样式,带外边框的输入框
          ),
        ),


        //操作按钮区域
        actions: [
          TextButton(
            child: const Text("取消"),
            onPressed: () => Navigator.pop(context),
          ),
          TextButton(
            child: const Text("提交"),
            onPressed: () {
              //这里写具体的提交逻辑事件
              print(controller.text);
              Navigator.pop(context);
            },
          ),
        ],
      ),
    );
  }

用户交互流程

①点击按钮 → 调用 _showDeleteDialog()

②显示对话框 → 用户看到输入框和按钮

③输入文本 → 文本存储在 controller

④点击提交 → 执行 onPressed 中的代码

⑤输出文本print(controller.text)

⑥关闭对话框Navigator.pop(context)

为了内存管理考虑,需要销毁控制器

Dart 复制代码
// 在 State 类中重写 dispose 方法
@override
void dispose() {
  controller.dispose(); // 释放控制器资源
  super.dispose();
}

代码实例

Dart 复制代码
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class HomePage extends StatefulWidget{
  const HomePage({super.key});

  @override
  State<StatefulWidget> createState() => _HomePageState();

}

class _HomePageState extends State<HomePage>{

  //创建文本编辑控制器
  //作用:管理TextField的文本内容,监听文本变化,获取和设置文本值,清空文本内容
  final controller = TextEditingController();


  // 带输入框的对话框
  void _showDeleteDialog() {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text("请输入名称"),
        content: TextField(  //输入框区域
          controller: controller, //绑定文本控制器,用于管理输入内容
          decoration: //输入框的装饰样式
          const InputDecoration(
            hintText: "请输入",//占位符文本,输入时消失
            border: OutlineInputBorder(),//边框样式,带外边框的输入框
          ),
        ),
        //操作按钮区域
        actions: [
          TextButton(
            child: const Text("取消"),
            onPressed: () => Navigator.pop(context),
          ),
          TextButton(
            child: const Text("提交"),
            onPressed: () {
              //这里写具体的提交逻辑事件
              print(controller.text);
              Navigator.pop(context);
            },
          ),
        ],
      ),
    );
  }

  //UI构建
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
           // const Text("home页面"),
            const SizedBox(height: 20),
            CupertinoButton(
              onPressed: _showDeleteDialog,//给按钮引入点击删除事件
              child: const Text("对话框"),
            ),
          ],
        ),


      ),
    );
  }

}
相关推荐
shankss2 小时前
Flutter 下拉刷新库 pull_to_refresh_plus 设计与实现分析
flutter
忆江南18 小时前
iOS 深度解析
flutter·ios
明君8799719 小时前
Flutter 实现 AI 聊天页面 —— 记一次 Markdown 数学公式显示的踩坑之旅
前端·flutter
恋猫de小郭20 小时前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
MakeZero1 天前
Flutter那些事-交互式组件
flutter
shankss1 天前
pull_to_refresh_simple
flutter
shankss1 天前
Flutter 下拉刷新库新特性:智能预加载 (enableSmartPreload) 详解
flutter
SoaringHeart3 天前
Flutter调试组件:打印任意组件尺寸位置信息 NRenderBox
前端·flutter
九狼3 天前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
_squirrel3 天前
记录一次 Flutter 升级遇到的问题
flutter