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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:01:13