将LCObject先保存在本地,再save()到云端是空的?


我先把一个LCObject先保存在本地,点击同步按钮后再调用save(),但保存到云端的没有内容。保存前toString看是有内容的。这是为什么?
I/flutter (19403): 日志拦截: sync = {"_type":"Pointer","className":"keijnz","objectId":null,"sportstype":0,"start_time":1637413867,"end_time":1637413870,"duration":3,"max_hr":0,"calories_max":0.0,"pressure_max":0.0}
I/flutter (19403): 日志拦截: *** Request ***
I/flutter (19403): 日志拦截: uri: https://voaji3og.api.lncldglobal.com/1.1/classes/keijnz
I/flutter (19403): 日志拦截: method: POST
I/flutter (19403): 日志拦截: responseType: ResponseType.json
I/flutter (19403): 日志拦截: followRedirects: true
I/flutter (19403): 日志拦截: connectTimeout: 0
I/flutter (19403): 日志拦截: sendTimeout: 0
I/flutter (19403): 日志拦截: receiveTimeout: 0
I/flutter (19403): 日志拦截: receiveDataWhenStatusError: true
I/flutter (19403): 日志拦截: extra: {}
I/flutter (19403): 日志拦截: headers:
I/flutter (19403): 日志拦截: X-LC-Id: vOaJI3OgY1lJ4dxFDQERvB3O-MdYXbMMI
I/flutter (19403): 日志拦截: User-Agent: LeanCloud-Flutter-SDK/0.7.6
I/flutter (19403): 日志拦截: X-LC-Sign: f61578e069c709d4eba6e602d650d04b,1637413885827
I/flutter (19403): 日志拦截: X-LC-Session: z18dnd0wjbg1hhg81adpn6ja2
I/flutter (19403): 日志拦截: content-type: application/json
I/flutter (19403): 日志拦截: data:
I/flutter (19403): 日志拦截: {}
I/flutter (19403): 日志拦截:
I/flutter (19403): 日志拦截: *** Response ***
I/flutter (19403): 日志拦截: uri: https://voaji3og.api.lncldglobal.com/1.1/classes/keijnz
I/flutter (19403): 日志拦截: statusCode: 201
I/flutter (19403): 日志拦截: headers:
I/flutter (19403): 日志拦截: connection: keep-alive
I/flutter (19403): 日志拦截: location: /1.1/classes/keijnz/6198f3fdd5b1eb115347aeb6
I/flutter (19403): 日志拦截: cache-control: no-cache,no-store
I/flutter (19403): 日志拦截: date: Sat, 20 Nov 2021 13:11:25 GMT
I/flutter (19403): 日志拦截: transfer-encoding: chunked
I/flutter (19403): 日志拦截: content-type: application/json;charset=utf-8
I/flutter (19403): 日志拦截: pragma: no-cache
I/flutter (19403): 日志拦截: server: openresty
I/flutter (19403): 日志拦截: Response Text:
I/flutter (19403): 日志拦截: {"objectId":"6198f3fdd5b1eb115347aeb6","createdAt":"2021-11-20T13:11:25.613Z"}
I/flutter (19403): 日志拦截:

请问是如何执行保存在本地操作的?
LCObject#save() 只会将之前修改过的字段保存至服务端。如果没有修改过,也有可能 data 为空

object.toString();后将字符串保存在本地,然后LCObject.parseObject(json);后再save()

请问 SDK 版本是多少?能否提供一个可以复现的 demo 或者代码段呢?

你说只会保存之前修改过的字段,我现在的逻辑是先把一个LCObject.save(),如果save失败了,就把这个LCObject.toString();将字符串保存在本地,然后按下同步按钮后LCObject.parseObject(json);后再save().会不会是第一次save()失败了也认为是保存了,第二交只保存了修改的部分?

直接用你们文档中的例子就可以复现这个问题

void lc_test() async
{
LCObject object = LCObject("Todo");
object['title'] = '马拉松报名';
object['priority'] = 2;
object['owner'] = LCUser.getCurrent();
String serializedString = object.toString();

LCObject newObject = LCObject.parseObject(serializedString);
await newObject.save();
}

内部沟通了一下,Flutter SDK 的实现是直接将当前值(即修改后的值)做了序列化,而没有序列化修改的信息(即 operationMap 为空),所以反序列化时就丢失了修改的信息,从而导致修改信息为空,save 时的 data 也为空。
下个版本将会修复这个问题,感谢反馈!

请问下个版本什么时候发布呢,我等着用 joy

预计下周可以发布

先在 fix-serialization 发布了,如果有需要可以先通过 git url 方式引入

测试了一下,没问题了,请尽快发布吧