【发布时间】:2021-09-27 06:40:55
【问题描述】:
我不知道如何从 Dart(Flutter 应用程序)中的函数返回字符串。
我正在使用 SharedPreferences 来捕获用户的输入。我有两个功能,一个是保存偏好:
save(key, value) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(key, value);
print('saved $value');
}
还有一个阅读偏好:
read(key) async {
final prefs = await SharedPreferences.getInstance();
final value = prefs.getString(key) ?? 0;
print('$value');
}
这是可行的,但是当我尝试用返回替换打印行时:
read(key) async {
final prefs = await SharedPreferences.getInstance();
final value = prefs.getString(key) ?? 0;
return('$value');
}
要返回值的字符串,它会引发错误:
类型“未来”不是类型“字符串”的子类型
我尝试了很多不同的方式来称呼它,但无法弄清楚我认为是一个非常基本的问题。我在一些帖子中注意到这是一个建议的解决方案,它可以打印出值,但我不想打印它,我希望它作为字符串变量:
read(mykey).then((value) => '$value');
我需要将该值与其他一些其他字符串值组合并进行一些小的操作(因此打印它没有帮助)
更新
我已经按照@Stijn2210 的建议定义了函数,但在获得我需要的输出时仍然遇到问题。
Future<String> read(key) async {
final prefs = await SharedPreferences.getInstance();
final value = await prefs.getString(key) ?? '';
return value;
}
当我从我的应用程序调用这个函数时(这是一个简化的 sn-p):
void onDragEnd(DraggableDetails details, User user) {
final minimumDrag = 100;
Future<String> myvalue;
if (details.offset.dx > minimumDrag) {
user.isSwipedOff = true;
save(user.imgUrl, 'Dog');
}
myvalue = read(user.imgUrl);
print(myvalue);
正在打印:
“未来”的实例
而我希望 myvalue 成为“狗”...感谢任何见解!
非常感谢您的回答@Stijn2202
解决方案是编辑方法定义:
Future<void> onDragEnd(DraggableDetails details, User user) async
然后从方法中调用读取函数:
final String myvalue = await read(user.imgUrl);
【问题讨论】:
标签: flutter dart sharedpreferences