我有三个选择字体的ToggleButton,一次只能选择一个字体,现在工作得很好。但我的问题是共享偏好,我无法保存和获取选择。它有点混乱,因为选择的结果是一个布尔列表,例如true、false、false。
我需要你的帮助,请修复共享偏好代码,以便我可以保存并获得最终选择。
这是我共享首选项的代码:
void initState() {
super.initState();
getisSelectedFont();
isSelectedFont = [true, false, false];
}
saveisSelectedFont(bool value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setBool("isSelectedFont", value);
});
}
getisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
isSelectedFont =
(prefs.getBool('isSelectedFont') ?? [true, false, false]);
});
}
List<bool> isSelectedFont;下面是ToggleButton的代码:
child: ToggleButtons(
borderRadius: BorderRadius.circular(6),
children: <Widget>[
// first toggle button
Padding(
padding: const EdgeInsets.only(
right: 15, left: 15),
child: Text(
'font-1',
style: TextStyle(fontSize: 15),
),
),
// second toggle button
Padding(
padding: const EdgeInsets.only(
right: 15, left: 15),
child: Text(
'font-2',
style: TextStyle(fontSize: 15),
),
),
// third toggle button
Padding(
padding: const EdgeInsets.only(
right: 15, left: 15),
child: Text(
'font-3',
style: TextStyle(fontSize: 15),
),
),
],
// logic for button selection below
onPressed: (int index) {
setState(() {
for (int i = 0;
i < isSelectedFont.length;
i++) {
isSelectedFont[i] = i == index;
}
});
print(isSelectedFont);
},
isSelected: isSelectedFont,
),发布于 2020-11-07 23:29:08
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class ToggleButtonTest extends StatefulWidget {
@override
_ToggleButtonTestState createState() => _ToggleButtonTestState();
}
class _ToggleButtonTestState extends State<ToggleButtonTest> {
List<bool> isSelectedFont;
int _currentFontFamily = 0;
List<String> _fontFamily = [
'SansitaSwashed',
'DancingScript',
'AmanticSC',
];
void initState() {
super.initState();
getisSelectedFont();
isSelectedFont = [true, false, false];
}
saveisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setStringList(
"isSelectedFont",
isSelectedFont.map((e) => e ? 'true' : 'false').toList(),
);
prefs.setInt('currentFontFamily', _currentFontFamily);
});
}
getisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
isSelectedFont = (prefs
.getStringList('isSelectedFont')
?.map((e) => e == 'true' ? true : false)
?.toList() ??
[true, false, false]);
_currentFontFamily = prefs.getInt('currentFontFamily') ?? 0;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Toggle Button Test'),
),
body: Column(
children: [
Container(
margin: EdgeInsets.all(20),
child: ToggleButtons(
borderRadius: BorderRadius.circular(6),
children: <Widget>[
// first toggle button
Padding(
padding: const EdgeInsets.only(right: 15, left: 15),
child: Text(
'font-1',
style: TextStyle(fontSize: 15),
),
),
// second toggle button
Padding(
padding: const EdgeInsets.only(right: 15, left: 15),
child: Text(
'font-2',
style: TextStyle(fontSize: 15),
),
),
// third toggle button
Padding(
padding: const EdgeInsets.only(right: 15, left: 15),
child: Text(
'font-3',
style: TextStyle(fontSize: 15),
),
),
],
// logic for button selection below
onPressed: (int index) {
setState(() {
for (int i = 0; i < isSelectedFont.length; i++) {
isSelectedFont[i] = i == index;
}
_currentFontFamily = index;
saveisSelectedFont();
});
},
isSelected: isSelectedFont,
),
),
Expanded(
child: Center(
child: Text(
'This is the answer..',
style: TextStyle(
fontSize: 30,
fontFamily: _fontFamily[_currentFontFamily],
),
),
),
)
],
),
);
}
}发布于 2020-11-07 19:49:05
将saveisSelectedFont,getisSelectedFont更改为此
saveisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setStringList("isSelectedFont",
isSelectedFont.map((e) => e ? 'true' : 'false').toList());
});
}
getisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
isSelectedFont = (prefs?.getStringList('isSelectedFont')?.map((e) => e == 'true' ? true : false)?.toList() ?? [true, false, false]);
});
}发布于 2020-11-07 20:08:34
saveisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setStringList(
"isSelectedFont",
isSelectedFont.map((e) => e ? 'true' : 'false').toList(),
);
});
}
getisSelectedFont() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
isSelectedFont = (prefs
.getStringList('isSelectedFont')
?.map((e) => e == 'true' ? true : false)
?.toList() ??
[true, false, false]);
});
}
onPressed: (int index) {
setState(() {
for (int i = 0; i < isSelectedFont.length; i++) {
isSelectedFont[i] = i == index;
}
saveisSelectedFont();
});
},https://stackoverflow.com/questions/64726962
复制相似问题