【Flutter APP】Bug部分记录

312 阅读2分钟

1. 因为页面的数据修改时不会刷新,但每次重启后就会更新,所以起初是怀疑自己代码有问题,比如Obx的使用或者update不到位,所以导致ui没有更新数值,但是在debug的时候发现接口返回的数据就是旧的,而不是说没有更新UI,所以也不是obx的问题。 因此很有可能是没有去发起进行一个新的请求。在框架的github上发现有了提了类似的issue,说是要在query 操作里加force refresh, 所以定位到了queryOptions里有缓存策略,因为默认采用了cacheAndNetwork策略,所以在请求相同的请求时,默认用的是已经请求过的数据,所以就不会去更新。

原因:

image.png 由于在实例化GraphQL客户端这里使用的是内存缓存,所以每次重启后会清除。如果用的是本地缓存,那就重启也没用了。

修改:

image.png 更改请求里的缓存策略,改为networkOnly

image.png

2. json.decode 解析空字符串时报错 error log:FormatException: Unexpected end of input (at character 1) 原因: json.decode无法解析空字符串,需要作判断或者强转。

if (data['images'] != null && data['images'] != '') {
  List<dynamic> temp = jsonDecode(data['images'] ?? '');
  for (var path in temp) {
    images!.add(path);
  }
}

3. 登录时验证码错误会报type null is not a subtype of type sstring in type cast

image.png

原因: 一开始以为是后端返回了null字段但flutter_gql,处理不了null,但是后面发现后端并没有返回null, 经过一步步执行gql-link包 把 message 的value强转为String了。但是后端接口返回的response的errors里没有message字段而是用msg,所以建议写全称,写个msg,sdk要求message。 修改

image.png

4. 运行到chrome发现dio请求api全部失败,出现 DioError[DioErrorType.RESPONSE]:XMLHttpRequesterror 错误,这是由于跨域问题导致。

做法: 在flutter\packages\flutter_tools\lib\src\web\chorme.dart文件中添加 --disable-web-security 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。