Flutter中使用Drift获取数据表指定字段值的方法
用Drift获取单条员工数据的指定字段
核心实现思路
你需要基于员工的登录标识(比如id或username)过滤查询,获取单条数据后提取name字段即可。Drift提供了专门的方法获取单条快照,无需返回列表。
具体代码实现
- 编写单条数据查询方法
假设登录后你已获取到员工的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()更适合不确定数据是否存在的场景,容错性更强。
- 在UI中调用并展示
在应用右上角的位置,通过FutureBuilder来获取并展示名称:
FutureBuilder<String?>( future: getEmployeeName(loggedInEmployeeId), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Text('加载中...'); } return Text(snapshot.data ?? '未知用户'); }, )
- 实时监听数据更新(可选)
如果需要实时同步员工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
相关产品推荐
相关产品推荐

