flutter - 如何使用GetX存储保存和写入数据?

标签 flutter dart flutter-getx

首先我创建了 GetxController 类

  final languageController = GetStorage();

  var myLocal = [];

  void saveLocale(List list) {
    languageController.write('savedLocale', list);
  }

  @override
  void onInit() {
    List<dynamic>? savedLocale = languageController.read('savedLocale');
    if (savedLocale != null) {
      myLocal = savedLocale;
    }
    super.onInit();
  }
}

然后我在main.dart中初始化了GetStorage

final myLocal = LanguageController().myLocal;

void main() async {
  print(myLocal);
  await GetStorage.init();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      translations: LocaleString(),
      locale: myLocal.isNotEmpty
          ? Locale(myLocal[0], myLocal[1])
          : Locale('en', 'US'),
      debugShowCheckedModeBanner: false,
      home: HomeScreen(),
    );
  }
}

然后在设置区域设置后的对话框中,我将其写入存储中

Future<dynamic> myMaterialDialog(BuildContext context) {
  final LanguageController languageController = Get.find();

  return showDialog(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: Text(chooseLanguage.tr),
          content: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              TextButton(
                onPressed: () {
                  Get.back();
                  Get.updateLocale(Locale('en', 'US'));
                  languageController.saveLocale(['en', 'US']);
                },
                child: Text(englishLanguage.tr),
              ),
              TextButton(
                onPressed: () {
                  Get.back();
                  Get.updateLocale(Locale('ru', 'RU'));
                  languageController.saveLocale(['ru', 'RU']);
                },
                child: Text(russianLanguage.tr),
              ),
            ],
          ),
        );
      });
}

它不起作用,每次我重新启动我的应用程序时它都会显示 1 myLocale 为空的内容

为了检查 saveLocale() 方法是否正常工作,我创建了 printSavedLocale() 方法

 void printSavedLocale() {
    print(languageController.read('savedLocale'));
  }

并将其放入 saveLocale() 之后的对话框按钮,它正在打印我保存的区域设置,但重新启动后保存的区域设置为空

最佳答案

使用这个静态方法。将它们放在项目中的任何位置:

void setData(String key, dynamic value) => GetStorage().write(key, value);

int? getInt(String key) => GetStorage().read(key);

String? getString(String key) => GetStorage().read(key);

bool? getBool(String key) => GetStorage().read(key);

double? getDouble(String key) => GetStorage().read(key);

dynamic getData(String key) => GetStorage().read(key);

void clearData() async => GetStorage().erase();

关于flutter - 如何使用GetX存储保存和写入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69273068/

相关文章:

dart - Dose Flutter或Dart具有与JS中的hasProperty()方法或PH中的isset方法等效的任何方法

android - 如何在 Flutter 中禁用 FlatButton 的飞溅突出显示?

android - 从 Flutter 访问硬件按钮(如音量按钮)

cross-domain - 没有服务器控制的跨域请求

dart - 为什么 FocusNode 需要在 flutter 中配置?

flutter 和getx : update() does not notify GetBuilder

flutter - 如何在 Controller 中获取当前标签? - flutter GetX

android - Flutter:升级Play商店的版本代码

firebase - Flutter Web 应用程序,Firebase.auth 不起作用。试图调用一个非函数,例如 null。 'dart.global.firebase.auth'

Flutter:如何通过GetxController控制PageView?