使用Supabase+SQFlite遇类型转换错误:int无法转为String
问题定位与修复方案
错误根源
报错type 'int' is not a subtype of type 'String' in type cast的核心原因:
- 创建
UserModel时未传入Supabase用户的String类型id,导致插入SQFlite时,数据库自动生成了int类型的自增主键id。 - 在
UserModel.fromMap中,强制将json['id']转为String类型,但实际从SQFlite返回的id是int类型,类型不匹配触发错误。
具体修复步骤
1. 传入正确的用户id到UserModel
在_updateProfile方法中,创建UserModel时添加Supabase用户的String类型id:
final UserModel model = UserModel( id: user.id, // 新增:传入Supabase用户的String类型id username: user!.userMetadata!["username"], email: user.email, gender: dropdownValue, age: int.parse(ageTextEditingController.text.trim()), height: int.parse(hightTextEditingController.text.trim()), weight: int.parse(weightTextEditingController.text.trim()), );
2. 修正SQFlite的查询条件
将固定的id=1查询改为用当前Supabase用户的id作为条件,保证匹配String类型主键:
Future<UserModel?> getDatabaseModelWithId() async { try { final db = await getDB(); final currentUserId = supabase.auth.currentUser?.id; if (currentUserId == null) return null; var response = await db.query( 'User', where: 'id = ?', // 使用占位符避免SQL注入 whereArgs: [currentUserId], ); print(response); if (response.isNotEmpty) { final userModel = UserModel.fromMap(response.first); print('userModel: $userModel'); return userModel; } else { print('No data found for id = $currentUserId'); return null; } } catch (e) { print('Error in getDatabaseModelWithId: $e'); return null; } }
3. 确保SQFlite表结构的id字段类型正确
检查并修改表创建语句,保证id字段为TEXT类型(匹配Supabase的String类型id):
CREATE TABLE IF NOT EXISTS User ( id TEXT PRIMARY KEY, username TEXT, email TEXT, weight INTEGER, height INTEGER, gender TEXT, age INTEGER );
若之前表结构为INTEGER类型id,需删除旧表后重新创建,或做数据迁移。
4. (可选)添加安全的类型转换逻辑
在UserModel.fromMap中增加类型检查,避免类似类型不匹配问题:
factory UserModel.fromMap(Map<String, dynamic> json) { return UserModel( id: json['id'] is int ? json['id'].toString() : json['id'] as String?, username: json['username'] as String?, email: json['email'] as String?, weight: json['weight'] as int?, height: json['height'] as int?, age: json['age'] as int?, gender: json['gender'] as String?, ); }
内容的提问来源于stack exchange,提问作者Shahad Alharbi
相关产品推荐
相关产品推荐

