Flutter中Failed host lookup错误及注册接口问题求助
解决Flutter中"Failed host lookup"错误及注册接口问题
首先看你代码里的明显错误:你已经定义了正确的注册接口地址var url = '$baseUrl/register';,但实际发起请求时却用了根路径https://shamo-backend.buildwithangga.id/api,漏掉了/register后缀,这会导致请求地址错误,先把这个改过来。
接下来解决主机查找失败的问题,常见原因和解决方法:
添加网络权限
在Android项目的android/app/src/main/AndroidManifest.xml中,确保添加了互联网权限:<uses-permission android:name="android.permission.INTERNET" />iOS项目则需要在
Info.plist中确认ATS配置(如果你的域名是https,默认是允许的,但若有特殊情况,可添加以下配置):<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>确认域名可用性
在设备浏览器中直接访问https://shamo-backend.buildwithangga.id,看是否能正常打开。如果打不开,说明域名本身有问题;如果能打开,检查设备的网络连接,切换到手机流量或者其他WiFi试试。关闭代理
如果你设备开启了代理(比如Charles、Fiddler),可能会导致域名解析失败,先关闭代理再测试。
修正后的完整代码:
import 'package:altamazee/models/user_model.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; 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, }); // 改为使用定义好的url变量,而不是硬编码根路径 var response = await http.post( Uri.parse(url), headers: headers, body: body, ); print(response.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 { // 建议解析错误信息,而不是固定抛出同一个异常 var errorData = jsonDecode(response.body); throw Exception(errorData['message'] ?? '注册失败'); } } }
另外补充一个小建议:不要固定抛出"Email sudah terdaftar"的异常,因为接口返回的错误可能有多种情况,最好解析返回的错误信息再抛出,这样更准确。
内容的提问来源于stack exchange,提问作者Muhammad Prakas
相关产品推荐
相关产品推荐

