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


      ),
    );
  }

}
相关推荐
ITKEY_11 小时前
flutter 运行windows版本 Nuget.exe not found解决办法
flutter
kirk_wang11 小时前
Flutter `flutter_statusbarcolor_ns` 在 OpenHarmony 平台的状态栏颜色适配实践
flutter·移动开发·跨平台·arkts·鸿蒙
不爱吃糖的程序媛11 小时前
开源鸿蒙跨平台赋能:Flutter/RN/KMP/CMP 多栈适配
flutter·开源·harmonyos
走在路上的菜鸟11 小时前
Android学Dart学习笔记第二十二节 类-扩展方法
android·笔记·学习·flutter
子榆.11 小时前
【2025 最新实践】Flutter 与 OpenHarmony 的“共生模式”:如何构建跨生态应用?(含完整项目架构图 + 源码)
flutter·华为·智能手机·electron
kirk_wang12 小时前
Flutter 三方库在 OHOS 平台的适配实践:以 flutter_test_lib 为例
flutter·移动开发·跨平台·arkts·鸿蒙
巴拉巴拉~~12 小时前
KMP 算法通用折叠面板组件:KmpExpandablePanelWidget 平滑动画 + 单 / 多面板 + 全样式自定义
flutter
hudawei99612 小时前
对比kotlin和flutter中的异步编程
开发语言·flutter·kotlin·异步·
庄雨山12 小时前
深度解析Flutter手势系统:原理、实战与开源鸿蒙ArkUI手势交互对比
flutter·openharmonyos
kirk_wang12 小时前
Flutter 三方库在 OHOS 平台的适配实践
flutter·移动开发·跨平台·arkts·鸿蒙