Flutter Azure Cosmos DB操作插件dart_azure_cosmosdb的使用
Flutter Azure Cosmos DB操作插件dart_azure_cosmosdb的使用
Dart包用于Azure Cosmos数据库
目录
- 1 特性
- 2 开始使用
- 3 使用
- 4 接下来去哪里
- 5 Bug和问题
1 特性
dart_azure_cosmosdb 提供与Azure CosmosDB SQL API的交互。 更多详细信息,请参阅Microsoft CosmosDB文档。
2 开始使用
2.1 Android设置
此包使用HTTP包并需要访问互联网,在AndroidManifest.xml
中需要启用网络权限。
<manifest xmlns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
2.2 iOS设置
iOS无需任何步骤。
2.3 macOS设置
此包使用HTTP包并需要访问互联网,在.entitlements
中需要启用网络权限。
<key>com.apple.security.network.client</key>
<true/>
2.4 Windows设置
Windows无需任何步骤。
2.5 Linux设置
Linux无需任何步骤。
3 使用
3.1 CosmosDB实例创建和配置
首先,你需要创建一个CosmosDB类的实例,如下所示:
final cosmosDb = CosmosDb(
// 必填 -> Azure CosmosDB的URI。
connectionUri: 'https://<COSMOS_DB_NAME>.documents.azure.com:443/',
// 必填 -> CosmosDB的主键。
primaryKey: '<COSMOS_DB_KEY>',
// 可选 -> 提供令牌的授权类型。默认:master
authorizationType: 'master',
// 可选 -> 提供授权的版本。默认:1.0
authorizationVersion: '1.0',
// 可选 -> Azure Cosmos DB服务支持的REST API版本。默认:2018-12-31
xmsVersion: '2018-12-31',
);
3.2 数据库
每个Azure Cosmos DB帐户支持多个独立命名的数据库。数据库是一个逻辑命名空间,用于集合、用户和权限。
3.2.1 列出数据库
列出数据库帐户下的数据库,对数据库资源执行GET操作。
数据库列表操作返回一个 Future<CosmosDatabaseList>
,包含一个 CosmosDatabase
列表或错误对象。
查看3.2.5 CosmosDatabase模型以了解返回模型及其变量的信息。
final CosmosDatabaseList databaseList = await cosmosDb.database.list();
if(databaseList.error.isEmpty) {
// 如果错误为空,继续...
}
3.2.2 获取数据库
检索数据库资源,对数据库资源执行GET操作。
数据库获取操作返回一个 Future<CosmosDatabase>
。
查看3.2.5 CosmosDatabase模型以了解返回模型及其变量的信息。
final CosmosDatabase database = await cosmosDb.database.get(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
);
if (database.error.isEmpty) {
// 如果错误为空,继续...
}
3.2.3 创建数据库
创建操作在数据库帐户中创建新的数据库。
数据库创建操作返回一个 Future<CosmosDatabase>
。
查看3.2.5 CosmosDatabase模型以了解返回模型及其变量的信息。
final CosmosDatabase database = await cosmosDb.database.create(
// 必填 -> 用户生成的要创建的数据库名称/ID。
dbId: '<DB_ID>',
);
if (database.error.isEmpty) {
// 如果错误为空,继续...
}
3.2.4 删除数据库
删除操作删除数据库帐户中的现有数据库。
数据库删除操作返回一个 Future<CosmosDatabase>
。
查看3.2.5 CosmosDatabase模型以了解返回模型及其变量的信息。
final CosmosDatabase database = await cosmosDb.database.delete(
// 必填 -> 用户生成的要删除的数据库名称/ID。
dbId: '<DB_ID>',
);
if (database.error.isEmpty) {
// 如果错误为空,继续...
}
3.2.5 CosmosDatabase模型
CosmosDatabase
方法
CosmosDatabase.toMap()
-> 将模型转换为Map以供CosmosDB API使用。CosmosDatabase.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
id |
id |
myId1 | 资源的唯一用户生成名称,最多255个字符。 |
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
ts |
_ts |
1446192371 | 系统生成属性。它指定资源的最后更新时间戳。值是一个时间戳。 |
self |
_self |
dbs/qicAAA==/ | 系统生成属性。它是资源的唯一可寻址URI。 |
etag |
_etag |
00001800-… | 系统生成属性,表示所需的资源etag,用于乐观并发控制。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
colls |
_colls |
colls/ | 它是系统生成的属性,指定集合资源的可寻址路径。 |
users |
_users |
users/ | 它是系统生成的属性,指定用户资源的可寻址路径。 |
CosmosDatabaseList
方法
CosmosDatabaseList.toMap()
-> 将模型转换为Map以供CosmosDB API使用。CosmosDatabaseList.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
count |
_count |
3 | 这个属性显示了作为列表操作返回的资源数量。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
databases |
Databases |
[] | CosmosDB数据库列表。List<CosmosDatabase> |
3.3 集合
集合是JSON文档和相关JavaScript应用程序逻辑(如存储过程、触发器和用户定义函数)的容器。
3.3.1 列出集合
对特定数据库的集合资源执行GET操作,即colls URI路径,返回该数据库中的集合列表。
集合列表操作返回一个 Future<CollectionList>
,包含一个 Collection
列表或错误对象。
查看3.3.5 Collection模型以了解返回模型及其变量的信息。
final CollectionList collectionList = await cosmosDb.collection.list(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
);
if (collectionList.error.isEmpty) {
// 如果错误为空,继续...
}
3.3.2 获取集合
对特定集合资源执行GET操作,检索集合的属性。
集合获取操作返回一个 Future<Collection>
。
查看3.3.5 Collection模型以了解返回模型及其变量的信息。
final Collection collection = await cosmosDb.collection.get(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 现有集合的名称。
collectionId: '<COLLECTION_ID>',
);
if (collection.error.isEmpty) {
// 如果错误为空,继续...
}
3.3.3 创建集合
创建操作在数据库中创建新的集合。
集合创建操作返回一个 Future<Collection>
。
查看3.3.5 Collection模型以了解返回模型及其变量的信息。
final Collection collection = await cosmosDb.collection.create(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 要创建的集合名称。
collectionId: '<COLLECTION_ID>',
// 必填 -> 用于将数据分区到多个分区的分区键。
partitionKey: '/id',
// 必填 -> 设置为2以使用大分区键,否则设置为1。
version: 1,
);
if (collection.error.isEmpty) {
// 如果错误为空,继续...
}
3.3.4 删除集合
删除操作删除数据库中的现有集合。
集合删除操作返回一个 Future<Collection>
。
查看3.3.5 Collection模型以了解返回模型及其变量的信息。
final Collection collection = await cosmosDb.collection.delete(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 要删除的集合名称。
collectionId: '<COLLECTION_ID>',
);
if (collection.error.isEmpty) {
// 如果错误为空,继续...
}
3.3.5 Collection模型
Collection
方法
Collection.toMap()
-> 将模型转换为Map以供CosmosDB API使用。Collection.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
id |
id |
myId1 | 资源的唯一用户生成名称,最多255个字符。 |
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
ts |
_ts |
1446192371 | 系统生成属性。它指定资源的最后更新时间戳。值是一个时间戳。 |
self |
_self |
dbs/qicAAA==/ | 系统生成属性。它是资源的唯一可寻址URI。 |
etag |
_etag |
00001800-… | 系统生成属性,表示所需的资源etag,用于乐观并发控制。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
docs |
_docs |
docs/ | 它是系统生成的属性,指定文档资源的可寻址路径。 |
sprocs |
_sprocs |
sprocs/ | 它是系统生成的属性,指定存储过程(sprocs)资源的可寻址路径。 |
triggers |
_triggers |
triggers/ | 它是系统生成的属性,指定触发器资源的可寻址路径。 |
udfs |
_udfs |
udfs/ | 它是系统生成的属性,指定用户定义函数(udfs)资源的可寻址路径。 |
conflicts |
_conflicts |
conflicts/ | 它是系统生成的属性,指定冲突资源的可寻址路径。 |
partitionKey |
partitionKey |
{ “paths”: [ “/AccountNumber” ], “kind”: “Hash”, “Version”: 2 } |
此值用于配置用于将数据分区到多个分区的分区键。 |
indexingPolicy |
indexingPolicy |
[{ “path”: “/*”, “indexes”: [{ “dataType”: “String”, “precision”: -1, “kind”: “Range” }] }] |
此值用于配置索引策略。默认情况下,索引对于集合内的所有文档路径都是自动的。 |
uniqueKeyPolicy |
uniqueKeyPolicy |
[] | 借助唯一键,您可以确保一个或多个值在逻辑分区中是唯一的。默认情况下,唯一键策略是一个空数组或null对象。 |
geospatialConfig |
geospatialConfig |
{ “type”: “Geography” } |
地理空间配置指定如何对空间数据进行索引。指定每容器一个地理空间配置:地理或几何。 |
CollectionList
方法
CollectionList.toMap()
-> 将模型转换为Map以供CosmosDB API使用。CollectionList.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
count |
_count |
3 | 这个属性显示了作为列表操作返回的资源数量。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
collections |
DocumentCollections |
[] | CosmosDB集合列表。List<Collection> |
3.4 文档
文档由用户定义的JSON格式内容组成。除了必需的ID属性外,用户可以定义任意元素、结构和层次结构。ID元素是一个用户可设置的唯一字符串,不能超过255个字符。可以在集合中插入、替换、删除、读取、枚举和查询任意JSON文档。
3.4.1 列出文档
对特定集合的文档资源执行GET操作,即docs URI路径,返回集合下的文档列表。
文档列表操作返回一个 Future<CosmosDocumentList>
,包含一个 CosmosDocument
列表或错误对象。
查看3.4.7 CosmosDocument模型以了解返回模型及其变量的信息。
final CosmosDocumentList documentList = await cosmosDb.document.list(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 集合的名称/ID。
collectionId: '<COLLECTION_ID>',
);
if (documentList.error.isEmpty) {
// 如果错误为空,继续...
}
3.4.2 获取文档
获取操作通过其分区键和文档键检索文档。
集合获取操作返回一个 Future<CosmosDocument>
。
查看3.4.7 CosmosDocument模型以了解返回模型及其变量的信息。
final CosmosDocument document = await cosmosDb.document.get(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 集合的名称/ID。
collectionId: '<COLLECTION_ID>',
// 必填 -> 要检索的文档ID。
documentId: '<DOCUMENT_ID>',
// 必填 -> 要接收的文档的分区键值。
partitionKey: '<DOCUMENT_PARTITION_KEY>',
);
if (document.error.isEmpty) {
// 如果错误为空,继续...
}
3.4.3 创建文档
创建操作在集合中创建新的文档。
集合创建操作返回一个 Future<CosmosDocument>
。
查看3.4.7 CosmosDocument模型以了解返回模型及其变量的信息。
// 示例:创建一个Person实例写入文档。
final Person person = Person(
id: '01',
name: 'Jane',
familyName: 'Doe',
birthDate: '01.01.1970',
);
final CosmosDocument document = await cosmosDb.document.create(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 集合的名称/ID。
collectionId: '<COLLECTION_ID>',
// 必填 -> 要创建的文档的分区键值。
// 在本示例中使用分区键/id。
partitionKey: person.id,
// 必填 -> 任何带有字符串键和动态值的映射,将添加到文档中。
// 在本示例中,将Person实例转换为映射。
body: person.toMap(),
);
if (document.error.isEmpty) {
// 如果错误为空,继续...
}
3.4.4 替换文档
替换操作替换文档的整个内容。
集合替换操作返回一个 Future<CosmosDocument>
。
查看3.4.7 CosmosDocument模型以了解返回模型及其变量的信息。
// 示例:创建一个Person实例来覆盖。
final Person personUpdated = Person(
id: '02',
name: 'Jane',
familyName: 'Doe',
birthDate: '01.01.1970',
);
final CosmosDocument document = await cosmosDb.document.replace(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 集合的名称/ID。
collectionId: '<COLLECTION_ID>',
// 必填 -> 要创建的文档的分区键值。
// 在本示例中使用分区键/id。
partitionKey: person.id,
// 必填 -> 要替换的文档ID。
documentId: '01',
// 必填 -> 任何带有字符串键和动态值的映射,将替换之前的主体。
// 在本示例中,将Person实例转换为映射。
body: person.toMap(),
);
if (document.error.isEmpty) {
// 如果错误为空,继续...
}
3.4.5 删除文档
删除操作删除集合中的现有文档。
集合删除操作返回一个 Future<CosmosDocument>
。
查看3.4.7 CosmosDocument模型以了解返回模型及其变量的信息。
final CosmosDocument document = await cosmosDb.document.delete(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 集合的名称/ID。
collectionId: '<COLLECTION_ID>',
// 必填 -> 要删除的文档的分区键值。
partitionKey: '<DOCUMENT_PARTITION_KEY>',
// 必填 -> 要删除的文档ID。
documentId: '01',
);
if (document.error.isEmpty) {
// 如果错误为空,继续...
}
3.4.6 查询文档
3.4.7 CosmosDocument模型
CosmosDocument
方法
CosmosDocument.toMap()
-> 将模型转换为Map以供CosmosDB API使用。CosmosDocument.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
id |
id |
myId1 | 资源的唯一用户生成名称,最多255个字符。 |
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
ts |
_ts |
1446192371 | 系统生成属性。它指定资源的最后更新时间戳。值是一个时间戳。 |
self |
_self |
dbs/qicAAA==/ | 系统生成属性。它是资源的唯一可寻址URI。 |
etag |
_etag |
00001800-… | 系统生成属性,表示所需的资源etag,用于乐观并发控制。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
attachments |
_attachments |
attachments/ | 它是系统生成的属性,指定附件资源的可寻址路径。 |
values |
... |
{ “key1”: “val1”, “key2”: “val2” } |
任何保存或检索文档的键值对映射。 |
CosmosDocumentList
方法
CosmosDocumentList.toMap()
-> 将模型转换为Map以供CosmosDB API使用。CosmosDocumentList.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
count |
_count |
3 | 这个属性显示了作为列表操作返回的资源数量。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
documents |
Documents |
[] | CosmosDB文档列表。List<CosmosDocument> |
3.5 存储过程
存储过程是一段用JavaScript编写的业务逻辑,注册并针对集合执行为单个事务。在Azure Cosmos DB中,JavaScript托管在同一内存空间中,因此存储过程中发出的所有请求都在数据库会话的作用域内执行。此过程使Azure Cosmos DB能够保证所有属于单个存储过程的操作的ACID。
3.5.1 列出存储过程
对特定数据库的存储过程资源执行GET操作,即sprocs URI路径,返回集合中的存储过程列表。
存储过程列表操作返回一个 Future<StoredProcedureList>
,包含一个 StoredProcedure
列表或错误对象。
查看3.5.5 存储过程模型以了解返回模型及其变量的信息。
final StoredProcedureList storedProcedureList = await cosmosDb.storedProcedure.list(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 存储过程所在的集合名称。
collectionId: '<COLLECTION_ID>',
);
if (storedProcedureList.error.isEmpty) {
// 如果错误为空,继续...
}
3.5.2 创建存储过程
创建操作在集合中创建新的存储过程。
存储过程创建操作返回一个 Future<StoredProcedure>
。
查看3.5.5 存储过程模型以了解返回模型及其变量的信息。
final StoredProcedure storedProcedure = await cosmosDb.storedProcedure.create(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 存储过程创建的集合名称。
collectionId: '<COLLECTION_ID>',
// 必填 -> 存储过程的用户生成的唯一名称,最多255个字符。
storedProcedureId: '<SPROC_ID>',
// 必填 -> 存储过程的正文作为字符串。
function: 'function () { ... }',
);
if (storedProcedure.error.isEmpty) {
// 如果错误为空,继续...
}
3.5.3 替换存储过程
替换操作替换整个存储过程资源。 所有用户可设置的属性,包括ID和正文,都必须在主体中提交以执行替换。
存储过程替换操作返回一个 Future<StoredProcedure>
。
查看3.5.5 存储过程模型以了解返回模型及其变量的信息。
final StoredProcedure storedProcedure = await cosmosDb.storedProcedure.replace(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 存储过程更新的集合名称。
collectionId: '<COLLECTION_ID>',
// 必填 -> 存在的存储过程的用户生成的唯一名称。
storedProcedureId: '<SPROC_ID>',
// 必填 -> 存储过程的正文作为字符串,将替换当前函数。
function: 'function () { ...Updated function... }',
);
if (storedProcedure.error.isEmpty) {
// 如果错误为空,继续...
}
3.5.4 删除存储过程
删除操作删除集合中的现有存储过程。
存储过程删除操作返回一个 Future<StoredProcedure>
。
查看3.5.5 存储过程模型以了解返回模型及其变量的信息。
final StoredProcedure storedProcedure = await cosmosDb.storedProcedure.delete(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 存储过程删除的集合名称。
collectionId: '<COLLECTION_ID>',
// 必填 -> 存在的存储过程的用户生成的唯一名称。
storedProcedureId: '<SPROC_ID>',
);
if (storedProcedure.error.isEmpty) {
// 如果错误为空,继续...
}
3.5.5 执行存储过程
3.5.6 存储过程模型
StoredProcedure
方法
StoredProcedure.toMap()
-> 将模型转换为Map以供CosmosDB API使用。StoredProcedure.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
id |
id |
myId1 | 资源的唯一用户生成名称,最多255个字符。 |
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
ts |
_ts |
1446192371 | 系统生成属性。它指定资源的最后更新时间戳。值是一个时间戳。 |
self |
_self |
dbs/qicAAA==/ | 系统生成属性。它是资源的唯一可寻址URI。 |
etag |
_etag |
00001800-… | 系统生成属性,表示所需的资源etag,用于乐观并发控制。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
body |
body |
function() { … } | 用户可设置的属性。它是存储过程的正文。 |
StoredProcedureList
方法
StoredProcedureList.toMap()
-> 将模型转换为Map以供CosmosDB API使用。StoredProcedureList.toMap(Map<String, dynamic> map)
-> 将从CosmosDB API获得的Map转换为模型。
变量
名称 | Azure API键名 | 示例 | 描述 |
---|---|---|---|
rid |
_rid |
qicAAA== | 系统生成属性。资源ID(_rid)是一个唯一标识符。它用于内部放置和导航到资源。 |
count |
_count |
3 | 这个属性显示了作为列表操作返回的资源数量。 |
error |
code , message |
{ “code”: “…”, “message”: “…” } |
成功事务时为空的Map,否则包含代码和消息的Map。 |
storedProcedures |
StoredProcedures |
[] | CosmosDB存储过程列表。List<StoredProcedure> |
3.6 用户定义函数
用户定义函数(UDF)是一段无副作用的应用程序逻辑,用JavaScript编写。它允许开发人员构造查询运算符,从而扩展Cosmos DB查询语言的核心功能。像存储过程一样,UDF生活在集合的范围内,从而将应用程序逻辑限制在集合内。
3.6.1 列出用户定义函数
对特定数据库的触发器资源执行GET操作,返回集合中的触发器列表。
用户定义函数列表操作返回一个 Future<UserDefinedFunctionList>
,包含一个 UserDefinedFunction
列表或错误对象。
查看3.6.5 用户定义函数模型以了解返回模型及其变量的信息。
final UserDefinedFunctionList userDefinedFunctionList = await cosmosDb.userDefinedFunctions.list(
// 必填 -> 用户生成的数据库名称/ID。
dbId: '<DB_ID>',
// 必填 -> 用户定义函数所在的集合名称。
collectionId: '<COLLECTION_ID>',
);
if (userDefinedFunctionList.error.isEmpty) {
// 如果错误为空,继续...
}
3.6.2 创建用户定义函数
创建操作在集合中创建新的用户定义函数。
用户定义函数创建操作返回一个 Future<UserDefinedFunction>
。
查看3.6.5 用户定义函数模型以了解返回模型及其变量的信息。
更多关于Flutter Azure Cosmos DB操作插件dart_azure_cosmosdb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Azure Cosmos DB操作插件dart_azure_cosmosdb的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个使用 dart_azure_cosmosdb
插件在 Flutter 应用中与 Azure Cosmos DB 进行交互的代码示例。这个示例将展示如何连接到 Azure Cosmos DB、创建数据库和容器、以及插入和读取文档。
首先,确保你已经在 pubspec.yaml
文件中添加了 dart_azure_cosmosdb
依赖:
dependencies:
flutter:
sdk: flutter
dart_azure_cosmosdb: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,在你的 Flutter 项目中创建一个服务类来处理与 Azure Cosmos DB 的交互。以下是一个示例代码:
import 'package:flutter/material.dart';
import 'package:dart_azure_cosmosdb/dart_azure_cosmosdb.dart';
class CosmosDBService {
late CosmosClient _client;
late Database _database;
late Container _container;
CosmosDBService(String endpoint, String primaryKey, String databaseId, String containerId) {
_client = CosmosClient(endpoint, primaryKey);
_createDatabase(databaseId).then((database) {
_database = database;
_createContainer(containerId);
});
}
Future<Database> _createDatabase(String id) async {
try {
DatabaseResponse databaseResponse = await _client.databases.createIfNotExists(id: id);
return databaseResponse.database;
} catch (e) {
throw Exception("Failed to create database: $e");
}
}
Future<void> _createContainer(String id) async {
try {
ContainerResponse containerResponse = await _database.containers.createIfNotExists(
id: id,
partitionKey: PartitionKeyDefinition(paths: ['/id']),
);
_container = containerResponse.container;
} catch (e) {
throw Exception("Failed to create container: $e");
}
}
Future<void> insertItem(Map<String, dynamic> item) async {
try {
ItemResponse<Map<String, dynamic>> itemResponse = await _container.items.create(item);
print("Inserted item with id: ${itemResponse.resource['id']}");
} catch (e) {
throw Exception("Failed to insert item: $e");
}
}
Future<List<Map<String, dynamic>>> getAllItems() async {
try {
FeedResponse<Map<String, dynamic>> feedResponse = await _container.items.readAll().toList();
return feedResponse.resources;
} catch (e) {
throw Exception("Failed to get items: $e");
}
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late CosmosDBService _cosmosDBService;
List<Map<String, dynamic>> _items = [];
@override
void initState() {
super.initState();
String endpoint = 'YOUR_COSMOS_DB_ENDPOINT';
String primaryKey = 'YOUR_COSMOS_DB_PRIMARY_KEY';
String databaseId = 'yourDatabaseId';
String containerId = 'yourContainerId';
_cosmosDBService = CosmosDBService(endpoint, primaryKey, databaseId, containerId);
// 插入示例文档
Map<String, dynamic> item = {'id': '1', 'name': 'Test Item', 'value': 42};
_cosmosDBService.insertItem(item).then((_) {
// 读取所有文档
_cosmosDBService.getAllItems().then((items) {
setState(() {
_items = items;
});
});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Azure Cosmos DB Flutter Demo'),
),
body: ListView.builder(
itemCount: _items.length,
itemBuilder: (context, index) {
Map<String, dynamic> item = _items[index];
return ListTile(
title: Text('ID: ${item['id']}, Name: ${item['name']}, Value: ${item['value']}'),
);
},
),
),
);
}
}
说明:
- 依赖安装:确保在
pubspec.yaml
文件中添加了dart_azure_cosmosdb
依赖,并运行flutter pub get
。 - 服务类:
CosmosDBService
类封装了对 Azure Cosmos DB 的基本操作,包括创建数据库、创建容器、插入文档和读取文档。 - 插入和读取文档:在
MyApp
的initState
方法中,我们插入了一个示例文档,并读取了所有文档,然后显示在 UI 上。
注意事项:
- 替换
YOUR_COSMOS_DB_ENDPOINT
和YOUR_COSMOS_DB_PRIMARY_KEY
为你自己的 Azure Cosmos DB 终端和主键。 - 确保
yourDatabaseId
和yourContainerId
是你希望创建的数据库和容器的 ID。
这个示例代码展示了如何在 Flutter 应用中使用 dart_azure_cosmosdb
插件与 Azure Cosmos DB 进行基本的操作。根据你的具体需求,你可以进一步扩展这个服务类来处理更多的操作,比如更新和删除文档。