dart_gsheet_remote_config 允许 Flutter 和 Dart 应用程序实时从 Google Sheets 获取配置值,从而在无需新版本发布的情况下动态更新应用行为。通过将 Google 表格视为远程配置源,开发者可以随时调整功能、标志或设置。该包支持 Android、iOS、Web、macOS、Windows 和 Linux 等多个平台,非常适合灵活且可扩展的应用管理。
适合场景
动态功能切换
实时 UI 主题更改
环境特定的配置
A/B 测试配置
远程调试和监控
无需部署即可即时更新应用
主要特点
Google Sheets 作为配置源
实时配置更新
多平台支持
与 Flutter/Dart 的简单集成
通过 Google Sheets API 实现安全访问
自动缓存处理
适合对象
需要频繁配置更改的应用程序
管理多个环境的团队
使用 A/B 测试的项目
开发者为避免应用商店提交小改动
需要快速迭代的产品
使用建议
需要 Google Cloud 项目设置
需要适当的认证(OAuth 2.0)
依赖互联网连接
初始加载的潜在延迟
Google Sheets API 的速率限制
敏感数据应加密
原始 README
以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。
Dart Google Sheet Remote Config
This is a package that allows you to use Google Sheets as a remote config for changing your Dart/Flutter app's behaviors, settings,.. without updating. It is inspired by @theapache64's blog.
If you have some configs (API key, token,...) related to security, please DO NOT use this package, because it is PUBLIC and NOT SECURE.
Setup
Google Sheet
Create a Google Sheet document, make it PUBLIC & READ ONLY (If not you will get 401, in the future I will find the way to inject auth token for private sheeet) and put an easy to remember document name.
Add your data to sheet in format:
First column will be keys
Second column will be values
MUST READ: Every values in sheet is marked as String. For int, doube, bool, we should convert it to String, use TO_TEXT fomular to convert value to String type:
You can create more than 1 worksheet to manage your config better and it can be selected to get correct data.
Dart
dart pub add dart_gsheet_remote_config
Flutter
flutter pub add dart_gsheet_remote_config
How to use
Create your SheetRemoteConfig instance.
import'package:dart_gsheet_remote_config/dart_gsheet_remote_config.dart';
final remoteConfig = SheetRemoteConfig();
SheetRemoteConfig has a param Client from http package so you can pass your custom Client object when create SheetRemoteConfig instance.
import'package:dart_gsheet_remote_config/dart_gsheet_remote_config.dart';
import'package:http/http.dart'as http;
final client = http.Client();
final remoteConfig = SheetRemoteConfig(client: client);
Fetch remote config data
SheetRemoteConfig provides initilize function and you must pass id and sheetName to initilize remote config:
Document id you can find it in your Google Sheet document Url. For example your Sheet url is https://docs.google.com/spreadsheets/d/123456789, id will be 123456789.
sheetName is worksheet name, nullable, first worksheet will be used if null or passed value is not found.
import'package:dart_gsheet_remote_config/dart_gsheet_remote_config.dart';
final remoteConfig = SheetRemoteConfig();
await remoteConfig.initilize(id: '123456789'); // First worksheet will be usedawait remoteConfig.initilize(id: '123456789', sheetName: 'Sheet1'); // Use specific worksheet name
MUST READ: id mustn't be hardcode if you don't want others to use your remote config. You can use id as .env field or via dart-define and pass it to your app via environment variable. You can use some packages like flutter_dotenv, envied to load .env file.
Get data from remote
SheetRemoteConfig fetchs data in CSV format, data is returned in key-value format, you can key to get value via
get functions, currently SheetRemoteConfig supports String, int, double, bool.
Example response:
"key1","TRUE"
"key2","10"
"key3","value from key 3"
"key4,"1.0"
And get data:
final valueKey1 = remoteConfig.getBool('key1');
print(valueKey1); // truefinal valueKey2 = remoteConfig.getInt('key2');
print(valueKey2); // 10final valueKey3 = remoteConfig.getString('key3');
print(valueKey3); // value from key 3final valueKey4 = remoteConfig.getDouble('key4');
print(valueKey4); // 1.0
If provided key is not found or provided T is incorrect, get functions will return null.
final valueKey5 = remoteConfig.getString('key5');
print(valueKey5); // null
You can pass defaultValue when get functions returns null.
final valueKey5 = remoteConfig.getString('key5', defaultValue: 'this is default value');
print(valueKey5); // this is default value
Get all data from remote
SheetRemoteConfig provides getAll function to get all data from remote.
final allData = remoteConfig.getAll();
print(allData); // {key1: true, key2: 10, key3: value from key 3, key4: 1.0}
Happy coding
That's all for now! Want a feature? Found a bug? Create an issue!