GetX是一个绝佳的Flutter工具箱,但是它的文档可以说基本木有,很多都需要自己摸索,所以在我查询了很多资料之后,整理了GetxService和GetStorage的用法案例。
案例代码如下:
AppConfigService:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:mobile/core/values/keys.dart';
class AppConfigService extends GetxService {
GetStorage box;
Future init() async {
box = GetStorage();
await box.writeIfNull(THEME, false);
Get.changeTheme(box.read(THEME) ? ThemeData.dark() : ThemeData.light());
return this;
}
bool getTheme() => this.box.read(THEME);
changeTheme(b) async {
Get.changeTheme(b ? ThemeData.dark() : ThemeData.light());
await this.box.write(THEME, b);
}
int getVersion() => this.box.read(VERSION);
changeVersion(int version) async {
await this.box.write(VERSION, version);
}
}
在main.dart中初始化:
void main() async {
await GetStorage.init(); //初始化Storage
await Get.putAsync(() => AppConfigService().init()); //初始化GetxService,app运行过程中不会被销毁,永久存在。
runApp(GetMaterialApp(...);
}
在controller.dart或者其他地方使用Service:
import 'dart:convert';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:mobile/app/data/model/app_version.dart';
import 'package:mobile/app/data/provider/api_provider.dart';
import 'package:mobile/app/data/services/app_config/service.dart';
import 'package:mobile/core/values/keys.dart';
class UserController extends GetxController {
final _obj = ''.obs;
set obj(value) => this._obj.value = value;
get obj => this._obj.value;
final _appVersion = AppVersion().obs;
set appVersion(value) => this._appVersion.value = value;
get appVersion => this._appVersion.value;
getAppVersion() {
Api().getAppVersion().then((value) {
this.appVersion = AppVersion.fromJson(jsonDecode(value.body));
print(this.appVersion);
Get.snackbar('版本号', this.appVersion.appVersion.toString());
var service = Get.find(<AppConfigService>); // 此处获取Service实例。
print(service.getVersion()); // 调取AppService中的方法。
});
}
}
Getx中的GetxService其实就跟GetxController很像,他们分享同样的声明周期 ( onInit()
, onReady()
, onClose()
). 但是在GetxService中一般不写逻辑,他只是通知GetX的依赖注入系统,然后它在app运行之后不会从内存中删除。
所以它在某些场景中非常有用,例如某些需要一直保持服务运行和能够触达的场景,例如:ApiService,StorageService,CacheService等。