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

Flutter中使用Drift获取数据表指定字段值的方法

用Drift获取单条员工数据的指定字段

核心实现思路

你需要基于员工的登录标识(比如id或username)过滤查询,获取单条数据后提取name字段即可。Drift提供了专门的方法获取单条快照,无需返回列表。

具体代码实现

  1. 编写单条数据查询方法
    假设登录后你已获取到员工的id(比如loggedInEmployeeId),可以修改查询逻辑如下:
Future<String?> getEmployeeName(int loggedInEmployeeId) async {
  // 过滤指定id的员工,获取单条数据
  final targetEmployee = await select(employee)
      .where((e) => e.id.equals(loggedInEmployeeId))
      .getSingleOrNull(); // 找不到数据时返回null,避免抛出异常
  return targetEmployee?.name; // 提取name字段返回
}
  • 若确定该员工一定存在,可替换getSingleOrNull()为getSingle(),但找不到数据时会抛出异常;
  • 用getSingleOrNull()更适合不确定数据是否存在的场景,容错性更强。
  1. 在UI中调用并展示
    在应用右上角的位置,通过FutureBuilder来获取并展示名称:
FutureBuilder<String?>(
  future: getEmployeeName(loggedInEmployeeId),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return const Text('加载中...');
    }
    return Text(snapshot.data ?? '未知用户');
  },
)
  1. 实时监听数据更新(可选)
    如果需要实时同步员工name字段的修改,可改用watchSingle()实现流监听:
Stream<String?> watchEmployeeName(int loggedInEmployeeId) {
  return select(employee)
      .where((e) => e.id.equals(loggedInEmployeeId))
      .watchSingleOrNull()
      .map((employee) => employee?.name);
}

然后用StreamBuilder替代FutureBuilder,数据更新时UI会自动刷新。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:24:13