Dart代码报错求助:非空类型与参数类型不匹配两类问题
解决Dart代码中的两类HTTP请求错误
错误1:方法存在潜在非空返回问题
你的register方法声明返回Future<UserModel>,但仅在响应状态码为200时返回UserModel实例,其他分支无返回或抛出逻辑,Dart会判定方法可能返回null,违反非空类型约束。
解决方式:在非200状态码分支中抛出异常,明确处理请求失败场景。
错误2:参数类型不匹配(String vs Uri)
http.post方法的第一个参数要求传入Uri类型,但你直接传入了字符串格式的URL,导致类型不匹配报错。
解决方式:使用Uri.parse()方法将字符串URL转换为Uri对象。
修正后的完整代码
import 'dart:convert'; import 'package:altamazee/models/user_model.dart'; import 'package:http/http.dart' as http; class AuthService { String baseUrl = 'https://shamo-backend.buildwithangga.id/api'; Future<UserModel> register({ required String name, required String username, required String email, required String password, }) async { var url = '$baseUrl/register'; var headers = {'Content-Type': 'application/json'}; var body = jsonEncode({ 'name': name, 'username': username, 'email': email, 'password': password, }); var response = await http.post( Uri.parse(url), // 转换为Uri类型 headers: headers, body: body, ); if (response.statusCode == 200) { var data = jsonDecode(response.body)['data']; UserModel user = UserModel.fromJson(data['user']); user.token = 'Bearer ' + data['access_token']; return user; } else { // 抛出异常处理非200的情况 throw Exception('注册失败,状态码:${response.statusCode}'); } } }
内容的提问来源于stack exchange,提问作者Muhammad Prakas
相关产品推荐
相关产品推荐

