Flutter权限分配报错:NoSuchMethodError调用null的idUser setter
解决Flutter权限分配中的NoSuchMethodError错误
问题原因
错误Unhandled Exception: NoSuchMethodError: The setter 'idUser=' was called on null是因为AdministratorRolesAssignController中的rol对象为null,调用rol.idUser = idUser时触发空指针异常。大概率是页面初始化时传入的rol参数未正确赋值,或者该参数本身就为null。
解决方案
1. 避免空对象调用
修改assignRol方法,不再依赖传入的rol对象,而是创建新的Rol实例仅传递分配权限所需的字段(用户ID和角色ID),同时增加参数校验:
void assignRol() async { // 校验用户和角色是否已选择 if (idUser == null || idUser.isEmpty || idRol == null || idRol.isEmpty) { Fluttertoast.showToast(msg: '请选择用户和角色'); return; } // 创建仅包含必要字段的Rol实例 Rol assignRol = Rol( idUser: idUser, idRol: idRol, ); // 调用接口并处理结果 ResponseApi responseApi = await _rolesProvider.assignRol(assignRol); Fluttertoast.showToast(msg: responseApi.message); if (responseApi.success) { Navigator.pop(context); // 成功后返回上一页 } print('Usuario elegido: ${idUser}'); print('Rol elegido: ${idRol}'); }
2. 确保控制器中rol对象非空
如果需要保留传入rol的逻辑,修改init方法,给rol设置默认值避免null:
Future init(BuildContext context, Function refresh, [Rol rol]) async { this.context = context; this.refresh = refresh; this.rol = rol ?? Rol(); // 若传入null则创建空实例 user = User.fromJson(await _sharedPref.read('user')); _usersProvider.init(context, sessionUser: user); _rolesProvider.init(context, user); getUsers(); getRoles(); refresh(); }
3. 后端SQL表适配
确保后端有存储用户-角色关联的表(例如user_roles),表结构应包含:
user_id:关联用户表IDrole_id:关联角色表ID- 可选:主键、创建时间等字段
后端接口api/roles/assign需要接收id_user和id_rol参数,执行插入或更新操作到关联表中。
额外优化建议
- 在页面UI中,禁用未选择用户和角色时的"分配"按钮,避免无效操作
- 处理
getUsers和getRoles的null返回,避免UI渲染异常
内容的提问来源于stack exchange,提问作者Marcelo_uy
相关产品推荐
相关产品推荐

