Flutter数据管理或存储插件sheets_store的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter数据管理或存储插件sheets_store的使用

介绍

sheets_store 是一个简单易用的插件,允许你在 Google Sheets 中存储和管理数据。通过这个插件,你可以轻松地将数据读取和写入到 Google Sheets 中,而无需复杂的配置。

使用步骤

1. 设置 Google Cloud 项目

首先,你需要创建一个 Google Cloud 项目,并启用 Google Sheets API。具体步骤如下:

  • 创建一个 Google Cloud 项目。
  • 在“API 和服务”中启用 Google Sheets API。
  • 创建一个服务帐户,并生成一个 JSON 格式的密钥文件。将该 JSON 文件保存到你的项目目录中。
  • 如果你打算将代码上传到 GitHub 或与他人共享,请确保将 JSON 文件路径添加到 .gitignore 文件中,以防止泄露敏感信息。

2. 分享 Google Sheets

在 Google Drive 中创建一个电子表格,并将其分享给你的服务帐户。服务帐户的电子邮件地址可以在 Google Cloud 控制台的“服务帐户”页面中找到。

3. 初始化 SheetsClient

接下来,在你的 Flutter 项目中初始化 SheetsClient。你需要提供电子表格的 ID 和 JSON 密钥文件的路径。以下是初始化 SheetsClient 的示例代码:

import 'dart:convert';
import 'dart:io';

import 'package:sheets_store/sheets_store.dart';

// 读取 JSON 文件并解析为 Map
Map<String, dynamic> readJsonFile(String filePath) {
  final input = File(filePath).readAsStringSync(); // 读取文件内容
  final decoded = jsonDecode(input); // 解析 JSON
  return decoded;
}

void main() async {
  // 初始化 SheetsClient
  final client = await SheetsClient.fromServiceAccountCredentials(
    'YOUR_SPREADSHEET_ID', // 替换为你的电子表格 ID
    readJsonFile('path/to/your/json/keyfile.json'), // 替换为你的 JSON 密钥文件路径
  );

  // 创建一个表(即列),用于存储字符串类型的数据
  final testTable = SheetColumn<String>(
    column: 'A', // 列名,例如 'A' 表示 A 列
    sheetName: 'Sheet1', // 电子表格的工作表名称,例如 'Sheet1'
    sheetsClient: client,
    decodeFunction: (rawValue) => jsonDecode(rawValue), // 可选:用于解码从 Google Sheets 读取的数据
  );

  // 读取表中的第一个元素
  final firstRowElement = await testTable.at(0); // 读取第 0 行的数据
  print(firstRowElement); // 打印读取到的数据

  // 向表中写入数据
  await testTable.set(1, 'Hello World'); // 在第 1 行写入 'Hello World'
}

详细说明

  • SheetsClient:这是与 Google Sheets 进行交互的核心类。你需要通过服务帐户凭据来初始化它。SheetsClient 提供了对电子表格的操作功能。

  • SheetColumn<T>:这是 sheets_store 插件中表示电子表格列的类。你可以通过它读取和写入特定列中的数据。T 是列中存储的数据类型,支持任何可以被 jsonEncode 编码的类型。

  • readJsonFile:这是一个辅助函数,用于读取并解析 JSON 文件。你需要将 Google Cloud 服务帐户的 JSON 密钥文件路径传递给这个函数。

  • at(index):用于读取指定索引处的单元格数据。index 是从 0 开始的行号。

  • set(index, value):用于向指定索引处的单元格写入数据。index 是从 0 开始的行号,value 是要写入的数据。

完整示例

以下是一个完整的示例代码,展示了如何使用 sheets_store 插件与 Google Sheets 进行交互:

import 'dart:convert';
import 'dart:io';

import 'package:sheets_store/sheets_store.dart';

// 读取 JSON 文件并解析为 Map
Map<String, dynamic> readJsonFile(String filePath) {
  final input = File(filePath).readAsStringSync(); // 读取文件内容
  final decoded = jsonDecode(input); // 解析 JSON
  return decoded;
}

void main() async {
  // 初始化 SheetsClient
  final client = await SheetsClient.fromServiceAccountCredentials(
    'YOUR_SPREADSHEET_ID', // 替换为你的电子表格 ID
    readJsonFile('path/to/your/json/keyfile.json'), // 替换为你的 JSON 密钥文件路径
  );

  // 创建一个表(即列),用于存储字符串类型的数据
  final testTable = SheetColumn<String>(
    column: 'A', // 列名,例如 'A' 表示 A 列
    sheetName: 'Sheet1', // 电子表格的工作表名称,例如 'Sheet1'
    sheetsClient: client,
    decodeFunction: (rawValue) => jsonDecode(rawValue), // 可选:用于解码从 Google Sheets 读取的数据
  );

  // 读取表中的第一个元素
  final firstRowElement = await testTable.at(0); // 读取第 0 行的数据
  print('First row element: $firstRowElement'); // 打印读取到的数据

  // 向表中写入数据
  await testTable.set(1, 'Hello World'); // 在第 1 行写入 'Hello World'
  print('Data written to row 1: Hello World');

  // 读取刚刚写入的数据
  final secondRowElement = await testTable.at(1); // 读取第 1 行的数据
  print('Second row element: $secondRowElement'); // 打印读取到的数据
}

更多关于Flutter数据管理或存储插件sheets_store的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据管理或存储插件sheets_store的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用sheets_store插件进行数据管理和存储的示例代码。sheets_store插件通常用于与Google Sheets进行交互,以实现数据的存储和检索。不过请注意,实际使用中你需要设置Google Sheets API的认证和权限。

首先,确保你已经在pubspec.yaml文件中添加了sheets_store依赖:

dependencies:
  flutter:
    sdk: flutter
  sheets_store: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来获取依赖。

下面是一个基本的Flutter应用示例,展示了如何使用sheets_store插件:

1. 设置Google Sheets API

在使用sheets_store之前,你需要设置Google Sheets API,并获取访问凭证(通常是一个JSON文件)。这包括在Google Cloud Console中创建一个项目,启用Google Sheets API,并创建一个OAuth 2.0客户端ID。

2. 初始化SheetsStore

在你的Flutter应用中,你需要初始化SheetsStore实例。假设你已经将Google Sheets API凭证文件放在了应用的assets目录下。

import 'package:flutter/material.dart';
import 'package:sheets_store/sheets_store.dart';
import 'dart:io' show Platform;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SheetsStore Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SheetsStoreDemo(),
    );
  }
}

class SheetsStoreDemo extends StatefulWidget {
  @override
  _SheetsStoreDemoState createState() => _SheetsStoreDemoState();
}

class _SheetsStoreDemoState extends State<SheetsStoreDemo> {
  late SheetsStore sheetsStore;

  @override
  void initState() {
    super.initState();

    // 读取Google Sheets API凭证文件
    RootBundle.bundle()
        .loadString('assets/google-sheets-credentials.json')
        .then((credentialsJson) async {
      // 初始化SheetsStore
      sheetsStore = SheetsStore(
        credentialsJson: credentialsJson,
        spreadsheetId: '你的Google Sheets文档ID', // 替换为你的Google Sheets文档ID
        sheetName: 'Sheet1', // 替换为你的工作表名称
      );

      // 初始化完成后可以执行一些操作,例如读取数据
      await sheetsStore.initialize();
      List<Map<String, dynamic>> data = await sheetsStore.readAll();
      print('Initial data: $data');
    })
    .catchError((error) {
      print('Failed to initialize SheetsStore: $error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SheetsStore Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Loading...'), // 简单的加载提示
          ],
        ),
      ),
    );
  }
}

3. 读取和写入数据

在上面的代码中,我们已经初始化了SheetsStore并在初始化完成后读取了所有数据。你可以扩展这个示例,添加更多功能,例如写入数据。

// 写入数据的示例方法
Future<void> writeDataToSheet() async {
  Map<String, dynamic> newData = {
    'Column1': 'Value1',
    'Column2': 'Value2',
  };

  try {
    await sheetsStore.append(newData);
    print('Data written successfully');
  } catch (error) {
    print('Failed to write data: $error');
  }
}

// 在某个按钮点击事件中调用这个方法
void _onWriteButtonClick() async {
  await writeDataToSheet();
  // 刷新UI或执行其他操作
}

在UI中添加一个按钮来触发写入操作:

// 在_SheetsStoreDemoState类的build方法中
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('SheetsStore Demo'),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text('Loading...'), // 简单的加载提示
          ElevatedButton(
            onPressed: _onWriteButtonClick,
            child: Text('Write Data'),
          ),
        ],
      ),
    ),
  );
}

这个示例展示了如何在Flutter应用中初始化和使用sheets_store插件,以及如何进行基本的数据读取和写入操作。请注意,实际使用中你需要处理更多的错误情况和边界情况,并根据你的具体需求进行扩展。

回到顶部