Flutter升级Null Safety后模拟器连接本地API报错求助
Flutter Null Safety升级后本地API连不上?看这些解决办法
先搞懂问题出在哪
报错里的nullapi/auth/login/明显是API的基础地址(host部分)变成了null,拼接路径后就出了错。Null Safety启用后,非空变量必须明确初始化,之前那种默认null的写法现在不允许了,这就是核心原因。
一步步解决
先查基础URL的定义
之前可能写的是String baseUrl;,Null Safety前默认null也能凑合用,但现在不行。改成下面两种方式之一:// 直接赋值本地地址:Android用10.0.2.2,iOS用localhost/127.0.0.1,记得加端口 String baseUrl = 'http://10.0.2.2:3000/'; // 或者用late延迟初始化,但必须在使用前给它赋值 late String baseUrl;注意末尾的斜杠别漏,不然拼接路径时就会变成
nullapi这种错误格式。检查URL拼接的代码
要是之前直接用字符串拼接baseUrl + 'api/auth/login/',一旦baseUrl是null就会出问题。要么确保baseUrl绝对非空后用非空断言baseUrl!,要么用更安全的Uri拼接方法:// 安全拼接方式 Uri.base.replace(host: '10.0.2.2', port: 3000, path: 'api/auth/login/');确认模拟器的网络配置
- Android模拟器别用
localhost,得用10.0.2.2映射本地主机 - iOS模拟器直接用
localhost或者127.0.0.1就行
另外别忘了确认本地API服务正在运行,端口号和代码里写的一致。
- Android模拟器别用
用环境变量的话要检查加载逻辑
要是用.env文件管理API地址,比如用flutter_dotenv,得确保加载正确,而且变量值非空。比如:await dotenv.load(fileName: ".env"); // 用空合并运算符兜底,避免环境变量没加载到导致null String baseUrl = dotenv.env['BASE_URL'] ?? 'http://10.0.2.2:3000/';
内容的提问来源于stack exchange,提问作者Frank Castle
相关产品推荐
相关产品推荐

