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

如何在Flutter(Dart)应用中展示DynamoDB数据库的所有条目?

实现Flutter通过API Gateway+Lambda读取DynamoDB全表数据

1. 编写Lambda扫描DynamoDB表的函数

  • 登录AWS控制台,创建Lambda函数,选择Python 3.x作为运行时
  • 给Lambda的IAM角色添加DynamoDB扫描权限(最小权限原则,只允许操作目标表)
  • 复制以下代码到Lambda编辑器,替换成你的表名:
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('你的DynamoDB表名')

def lambda_handler(event, context):
    try:
        # 扫描全表
        response = table.scan()
        items = response['Items']
        # 你的数据量小,不需要分页,若后续数据超过1MB可保留这段逻辑
        while 'LastEvaluatedKey' in response:
            response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
            items.extend(response['Items'])
        # 返回数据并允许跨域调用(适配Flutter移动端/前端)
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Origin': '*'
            },
            'body': items
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'headers': {
                'Access-Control-Allow-Origin': '*'
            },
            'body': {'error': str(e)}
        }

2. 配置API Gateway生成HTTP端点

  • 打开API Gateway控制台,创建REST API(选REST类型,操作更直观)
  • 新建资源,命名为/items,再给这个资源创建GET方法
  • 集成类型选择「Lambda函数」,勾选「使用Lambda代理集成」,选择你刚才创建的Lambda函数
  • 部署API:点击顶部「部署API」,选择一个阶段(比如prod),部署完成后会生成一个根URL
  • 你的全表查询端点就是根URL加上资源路径,格式类似:https://xxxxxx.execute-api.xx-xxxx-x.amazonaws.com/prod/items

3. Flutter端调用API获取数据

  • 先在pubspec.yaml中添加http包依赖:
dependencies:
  http: ^1.1.0
  • 编写Dart代码调用API并展示数据:
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';

Future<List<dynamic>> fetchAllItems() async {
  final response = await http.get(Uri.parse('你的API端点URL'));
  
  if (response.statusCode == 200) {
    return json.decode(response.body);
  } else {
    throw Exception('加载数据失败');
  }
}

class DynamoDBItemsScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('DynamoDB数据展示')),
      body: FutureBuilder<List<dynamic>>(
        future: fetchAllItems(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
              itemCount: snapshot.data!.length,
              itemBuilder: (context, index) {
                final item = snapshot.data![index];
                return ListTile(
                  title: Text(item['你的主键字段名']),
                  subtitle: Text(item['其他字段名']),
                );
              },
            );
          } else if (snapshot.hasError) {
            return Center(child: Text('${snapshot.error}'));
          }
          return const Center(child: CircularProgressIndicator());
        },
      ),
    );
  }
}

关键注意事项

  • 因为你的数据只有5-10条,DynamoDB的scan操作完全够用,无需担心性能问题
  • IAM权限要最小化,避免给Lambda全DynamoDB权限,示例策略如下:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "dynamodb:Scan",
            "Resource": "arn:aws:dynamodb:xx-xxxx-x:你的AWS账号ID:table/你的表名"
        }
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:07:26