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等。