dart_gsheet_remote_config 1.2.1+2 dart_gsheet_remote_config: ^1.2.1+2 copied to clipboard
A package that allows you to use Google Sheets as a remote config for changing your Dart/Flutter app's behaviors, settings,.. without updating.
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.
How it works #
- This package uses Query Visualization API and some tricks to get data from Google Sheet.
MUST READ before use #
- 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 ishttps://docs.google.com/spreadsheets/d/123456789
,id
will be123456789
. -
sheetName
is worksheet name, nullable, first worksheet will be used ifnull
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 used
await 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); // true
final valueKey2 = remoteConfig.getInt('key2');
print(valueKey2); // 10
final valueKey3 = remoteConfig.getString('key3');
print(valueKey3); // value from key 3
final 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!