【发布时间】:2021-02-15 03:06:30
【问题描述】:
我有两个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;
})
},
)
],
),
],
),
);
}
}
【问题讨论】:
-
使用 Elevated 按钮而不是 RaisedButton。