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("对话框"),
            ),
          ],
        ),


      ),
    );
  }

}
相关推荐
程序员老刘5 小时前
Flutter版本选择指南:3.44系列继续观望 | 2026年6月
flutter·ai编程·客户端
用户965597361902 天前
Provider vs Bloc vs GetX vs Riverpod:Flutter 状态管理方案怎么选?
flutter
恋猫de小郭2 天前
Flutter Patchwork,不用 Fork 改依赖包源码的第三方工具
android·前端·flutter
程序员老刘2 天前
跑分第一的编程大模型,我为啥不用?
flutter·ai编程·vibecoding
恋猫de小郭3 天前
苹果 AirPods 协议,Android 也可以使用完整版 AirPods 能力
android·前端·flutter
张风捷特烈3 天前
Flutter 类库大揭秘#01 | path_provider架构与设计
android·flutter
恋猫de小郭5 天前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
恋猫de小郭5 天前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
程序员老刘8 天前
跨平台开发地图 | 2026年6月
flutter·ai编程·客户端
悟空瞎说9 天前
Flutter 架构详解:新手必懂底层原理
flutter