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


      ),
    );
  }

}
相关推荐
iFlyCai13 分钟前
Flutter原理深度解析:从架构到渲染的全面剖析(二)
flutter·flutter 三棵树
里欧跑得慢2 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
iFlyCai11 小时前
深入理解Flutter:StatefulWidget生命周期全解析(一)
flutter·dart·状态管理·statefulwidget
xiangxiongfly91513 小时前
Flutter video_player总结
flutter·video_player·chewie
见山是山-见水是水1 天前
鸿蒙版 Flutter Video 视频播放组件:播放控制、全屏切换与倍速播放
flutter·音视频·harmonyos
六年码农1 天前
2026最新开源 屏译ScreenTranslator 0.4.4 开源 全屏实时翻译教程
运维·人工智能·flutter·开源
WeiAreYoung1 天前
Flutter+iOS 实现 Live Activity
flutter·ios
恋猫de小郭2 天前
超好用 R8 Configuration Analyzer, 优化你的 App 大小和内存
android·前端·flutter
键盘飞行员2 天前
Flutter App 全套实战学习计划:从零搭建到 APK 部署
学习·flutter
GitLqr2 天前
Flutter 实战:图片上传前的压缩优化,解决带宽与存储的“大户”问题
flutter·全栈·dart