【问题标题】:Flutter How can i save my date in Share preferencesFlutter 如何将我的日期保存在共享首选项中
【发布时间】:2020-03-16 13:33:44
【问题描述】:

我想将从日期时间选择器中选择的日期保存在共享首选项中,以便在重新启动应用程序后也会显示它

child: InkWell(
                      onTap: (){
                        DatePicker.showDateTimePicker(context,
                        showTitleActions: true,
                        minTime: DateTime.now().toLocal(),
                        onConfirm: (date){
                          setState(() {
                            _dateTime = date;

                          });
                        },
                        currentTime: DateTime.now().toLocal(),
                        locale: LocaleType.de
                        );
                      },
                      child: Text(
                        (_dateTime == null ? 'Wählen sie Ihren nächsten Termin' : DateFormat("dd-MM-yyyy hh:mm").format(_dateTime)),
                        style: TextStyle(
                          fontSize: data.size.height / 29,
                          color: Colors.grey[400],
                        ),
                      ),
                    ),

【问题讨论】:

  • 有一个包可以和共享偏好交互:shared_preferences
  • 是的,但我猜我无法保存 DateTime 数据类型?

标签: datetime flutter save sharedpreferences shared


【解决方案1】:

将其转换为字符串并保存

prefs.setString('dateTimeString', _dateTime.toIso8601String());

然后使用 DateTime.parse() 来检索它:

DateTime _dateTime = DateTime.parse(prefs.getString('dateTimeString'));

【讨论】:

  • 我是否需要创建一个函数,或者我可以直接在 onTap 小部件中使用它还是在文本小部件中使用它?抱歉,我是新手
【解决方案2】:

您还可以查看 Flutter Secure Storage 包。 这里:https://pub.dev/packages/flutter_secure_storage 我在我的项目中使用过它,它就像一个魅力。 它就像导入包并执行此操作一样简单:

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

// Create storage
final storage = new FlutterSecureStorage();

// Read value 
String value = await storage.read(key: key);

// Read all values
Map<String, String> allValues = await storage.readAll();

// Delete value 
await storage.delete(key: key);

// Delete all 
await storage.deleteAll();

// Write value 
await storage.write(key: key, value: value);

【讨论】:

  • 有没有一个例子,我不是 100% 知道我必须如何使用它。
  • 转到包的网址:pub.dev/packages/flutter_secure_storage。然后转到示例选项卡。它的安装和使用非常简单。并将其加密作为奖励。
【解决方案3】:

现在我这样做了:

FlutterSecureStorage storage;

  @override
    void initState() {
      super.initState();
      storage = FlutterSecureStorage();
    }

  @override
    void dispose() {
      super.dispose();
      storage = null;
    }


  String testa;

并像这样使用它:

child: InkWell(
                          onTap: (){
                            DatePicker.showDateTimePicker(context,
                            showTitleActions: true,
                            minTime: DateTime.now(),
                            onConfirm: (date){
                              setState(() {
                                //_dateTime = date;
                                storage.write(key: SECURE_NOTE_KEY, value: date.toIso8601String());
                                testa = storage.read(key: SECURE_NOTE_KEY).toString();

                              });
                            },
                            currentTime: DateTime.now(),
                            locale: LocaleType.de
                            );
                          },
                          child: Text(
                            (testa == null ? 'Wählen sie Ihren nächsten Termin' : testa),
                            style: TextStyle(
                              fontSize: data.size.height / 29,
                              color: Colors.grey[400],
                            ),
                          ),
                        ),

但它不起作用....

【讨论】:

  • 我认为您应该在 storage.write 和 storage.read 函数调用之前使用 await 关键字,因为它们是异步的。顺便说一句,抱歉回复晚了。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
相关资源
最近更新 更多