You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter实现一键复制教师邮箱至剪贴板(保留现有变量)

解决方案

直接修改邮箱对应的ListTile,添加点击事件和复制逻辑,同时增加视觉提示和操作反馈,全程保留现有变量:

import 'package:flutter/material.dart';
import 'package:mcgapp/widgets/app_bar.dart';
import 'package:flutter/services.dart';

import '../classes/teacher.dart';

class TeacherDetailsScreen extends StatelessWidget {
  const TeacherDetailsScreen({
    Key? key,
    required this.teacher,
  }) : super(key: key);

  final Teacher teacher;

  // 封装复制邮箱的逻辑,代码更清晰
  void _copyEmailToClipboard(BuildContext context) {
    if (teacher.email.isEmpty) return; // 邮箱为空时不执行操作
    
    Clipboard.setData(ClipboardData(text: teacher.email)).then((_) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('邮箱已复制到剪贴板')),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("${teacher.pronoun} ${teacher.name}"),
      ),
      body: ListView(
        children: [
          ListTile(
            title: Text("${teacher.firstname} ${teacher.name}" != ""
                ? "${teacher.firstname} ${teacher.name}"
                : "No Name"),
            leading: const Icon(Icons.person),
          ),
          ListTile(
            title: Text(teacher.subject != ""
                ? teacher.subject
                : "No Subjects"),
            leading: const Icon(Icons.subject),
          ),
          ListTile(
            title: Text(teacher.kuerzel != ""
                ? teacher.kuerzel
                : "Nothing"),
            leading: const Icon(Icons.tag),
          ),
          // 修改后的邮箱ListTile
          ListTile(
            title: Text(teacher.email != ""
                ? teacher.email
                : "No Mail"),
            leading: const Icon(Icons.email),
            trailing: const Icon(Icons.copy, size: 20), // 添加复制图标,给用户明确的操作提示
            onTap: () => _copyEmailToClipboard(context), // 绑定点击复制事件
          )
        ],
      ),
    );
  }
}

关键修改说明:

  • 新增_copyEmailToClipboard方法:先判断邮箱是否为空,避免无效操作;调用Clipboard.setData完成复制,通过SnackBar给用户即时反馈,提升操作体验。
  • 给邮箱ListTile添加trailing复制图标:让用户一眼就能识别这个条目支持复制操作。
  • 绑定onTap事件:点击整个邮箱条目即可触发复制,操作便捷。
  • 修正了AppBar标题的小细节:原代码直接将字符串赋值给title,规范写法用Text组件包裹(不影响现有功能,更符合Flutter组件规范)。

内容的提问来源于stack exchange,提问作者MeloneDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:01:07