Flutter:保存正确答案的颜色,以便在应用程序关闭并再次打开时保持不变



我的应用的图像

这是代码

正如我在问题中所说,当用户选择并关闭应用程序并再次打开它时,我想让选择的颜色保持不变。我尝试过sharedPreferences,但失败了,我不知道为什么。所以请帮我解决这个问题。这是我的密码。


class Answers extends StatefulWidget {
final List questionAnswers;
Answers(this.questionAnswers);
@override
_AnswersState createState() => _AnswersState();
}
class _AnswersState extends State<Answers> {
var isSelected = false;
void onTap() {
setState(() {
isSelected = true;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
...widget.questionAnswers.map((answer) {
return InkWell(
onTap: onTap,
child: Container(
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 10),
margin: const EdgeInsets.only(bottom: 8, left: 10, right: 12),
decoration: BoxDecoration(
color: isSelected
? answer["isCorrect"]
? Colors.green.shade200
: Colors.red.shade200
: Colors.transparent,
borderRadius: BorderRadius.circular(10),
border: Border.all(
color: Colors.grey.shade400,
),
),
child: Row(
children: [
Text("${answer["code"]})"),
SizedBox(width: 10),
Text(answer["answerText"]),
],
),
),
);
}).toList(),
],
);
}
}

为了使用共享首选项来保存所选答案,请执行以下操作:(这不应该有任何原因不起作用(

添加到您的pubspec.yaml文件中:

(在这样的依赖项下(

dependencies:
shared_preferences: ^2.0.8

然后在要保存和检索数据的文件中:

import 'package:shared_preferences/shared_preferences.dart';

然后要设置数据,您需要初始化共享首选项,一种方法是这样做的,其中共享首选项是状态的数据成员:

initializeAsync() async {
this.sharedPreferences = await SharedPreferences.getInstance();
setState(() {});
}
@override
void initState() {
initializeAsync();
super.initState();
}

然后,当您初始化状态时,代码将等待共享首选项被初始化,当初始化完成后,再次启动小部件树的构建(这是为了防止您想使用构建函数中存储的共享首选项数据。

无论如何,为了保存数据:假设您有一个名为questionIdentifier和answerIdentifier的变量(可以只是问答的文本(

如果选择了1(点击时(,只需保存1,其他则保存0

await sharedPreferences.setInt("$questionIdentifier_$answerIdentifier", 1);

然后你可以在构建时读取值(0是默认值(:

int isSelected = sharedPreferences.getInt("$questionIdentifier_$answerIdentifier") ?? 0;

就在构建函数的开头,确保this.sharedPreferences不为null并进行初始化,如果为null,则返回一个加载小部件或仅返回一个空的集装箱((

其背后的逻辑是共享偏好在"0"上接收密钥/值对;设置";以及一个键"on";得到";,所以你只需要为每个问题/答案组合创建一个唯一的字符串键,并存储一个值来决定它是否被选中。

另一种方法可能是只为答案保存一个密钥,并在值中存储当前选择的答案的编号(只要你只能选择一个(

希望我帮忙!:(

相关内容

最新更新