共享首选项在更改颜色RaisedButton上的使用

zeed

我有两个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章