我有两个RaisedButton
,您只能单击其中之一。单击一个后,将无法再使用另一个,或取消选择您的选择。单击时按钮会更改颜色。一个是绿色,另一个是红色。喜欢正确与错误。(图像中的示例仅用于绿色。在右侧可以变为红色。)
他们的工作没有问题。
我只想将用户的选择保存shared_preferences
为绿色。
我想我写的东西或使用的地方是错误的。像这儿:
@override
void initState() {
super.initState();
getGreen();
}
Future<bool> saveGreen() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool ('answerGreen', true);
}
Future<bool> getGreen() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return _correct = prefs.getBool("answerGreen");
}
...
...
onPressed: () => {
setState(() {
_correct = !_wrong;
saveGreen();
})
},
如果用户选择绿色,则我希望在用户重新启动应用程序时显示绿色。我该怎么做shared_preferences
?
(我认为保存绿色或红色没有任何区别。或者两者都保存。我无法保存问题)
完整代码如下
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ButtonChangeColor(),
);
}
}
class ButtonChangeColor extends StatefulWidget {
@override
_ButtonChangeColorState createState() => _ButtonChangeColorState();
}
class _ButtonChangeColorState extends State<ButtonChangeColor> {
bool _correct = false;
bool _wrong = false;
/*
@override
void initState() {
super.initState();
getGreen();
}
Future<bool> saveGreen() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool ('answerGreen', true);
}
Future<bool> getGreen() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return _correct = prefs.getBool("answerGreen");
}
*/
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
RaisedButton(
child: Text('Change Color'),
textColor: Colors.white,
color: _correct ? Colors.green : Colors.blue,
onPressed: () => {
setState(() {
_correct = !_wrong;
//saveGreen(); //??
})
},
),
RaisedButton(
child: Text('Change Color'),
textColor: Colors.white,
color: _wrong ? Colors.red : Colors.blue,
onPressed: () => {
setState(() {
_wrong = !_correct;
})
},
)
],
),
],
),
);
}
}
请尝试一下,我已编辑了代码,请告诉我此代码是否完美?
class ButtonChangeColor extends StatefulWidget {
@override
_ButtonChangeColorState createState() => _ButtonChangeColorState();
}
class _ButtonChangeColorState extends State<ButtonChangeColor> {
bool _correct = false;
bool _wrong = false;
@override
void initState() {
super.initState();
getGreen();
getRed();
}
Future<bool> saveGreen(bool value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('answerGreen', value);
}
Future<bool> getGreen() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_correct = prefs.getBool("answerGreen");
if(_correct==null){
_correct=false;
}
setState(() {});
}
Future<bool> saveRed(bool value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('answerRed', value);
}
Future<bool> getRed() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_wrong = prefs.getBool("answerRed");
if(_wrong == null){
_wrong= false;
}
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
RaisedButton(
child: Text('Change Color'),
textColor: Colors.white,
color: _correct ? Colors.green : Colors.blue,
onPressed: () => {
setState(() {
// _correct = !_wrong;
_correct = true;
_wrong = false;
saveGreen(true);
saveRed(false);
//saveGreen(); //??
})
},
),
RaisedButton(
child: Text('Change Color'),
textColor: Colors.white,
color: _wrong ? Colors.red : Colors.blue,
onPressed: () => {
setState(() {
_correct = false;
_wrong = true;
saveGreen(false);
saveRed(true);
})
},
)
],
),
],
),
);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句