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

如何从Lambda函数正确写入AWS Amplify DynamoDB并在Flutter端查询到数据

问题排查及解决方案

原因1:缺失Amplify要求的系统字段

Amplify 自动生成的 DynamoDB 表默认包含3个必填系统字段,用于DataStore的增量同步、冲突检测,Lambda写入时未携带这些字段会导致记录被DataStore同步逻辑忽略:

  • _version:初始写入填1即可
  • _lastChangedAt:填写当前Unix时间戳(毫秒级)
  • _deleted:初始写入填false

修正后的Lambda代码如下:

'use strict';

var AWS = require('aws-sdk'),
mydocumentClient = new AWS.DynamoDB.DocumentClient();

exports.handler = function(event, context, callback){
    const now = Date.now();
    var params = {
        Item : {
            id :  '12345',
            "senderID" : "test",
            "recieverID" : "test",
            "message" : "test",
            // 新增Amplify要求的系统字段
            "_version": 1,
            "_lastChangedAt": now,
            "_deleted": false
        },
        TableName : 'Chat-hdwvylbm45a23azaykzyshblu4-staging'
    }
    
    mydocumentClient.put(params, function(err, data){
        callback(err, data);
    })
}

原因2:DataStore本地缓存未触发全量同步

如果是Lambda写入后立刻查询,DataStore可能还未完成云端新数据的同步,可按如下方式处理:

  • 调用Amplify.DataStore.clear()清空本地缓存后重新查询,强制触发全量同步
  • 或者在查询前主动调用Amplify.DataStore.start()确保同步服务处于运行状态

修正后的Flutter查询代码参考:

Future<void> read() async {
    try {
      // 可选:强制同步最新数据
      await Amplify.DataStore.clear();
      List<Chat> chatItems = await Amplify.DataStore.query(Chat.classType);
      setState(() {
        randomExcerciseData = chatItems;
      });
    } on Exception catch (e) {
      print('Query failed: $e');
    }
}

其他需要确认的点

  • 确认Flutter端Amplify使用的环境与Lambda写入的表环境一致(当前Lambda写入的是staging环境表,确认Flutter未切换成prod等其他环境)
  • 确认DynamoDB中Lambda写入的记录字段名、字段类型与Amplify schema中定义的Chat模型完全匹配,大小写、拼写错误都会导致DataStore无法解析记录(比如注意你代码里的recieverID是不是拼写错误,正确应该是receiverID,如果schema里是正确拼写,这里字段名不匹配也会导致无法查询)

内容的提问来源于stack exchange,提问作者Gabby10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:15:04