【问题标题】:How to read value in the createState method of StatefulWidgetStatefulWidget的createState方法中如何读取值
【发布时间】:2018-11-22 16:52:11
【问题描述】:

您好,我想从 StatefulWidgetcreateState 中的 SharedPreferences 中读取值。

我尝试在方法后添加async,但它不起作用。正确的做法是什么?

class LoginScreen extends StatefulWidget {
  @override
  _LoginScreenState createState() {

    // check if user is logged. If logged then send user to dashboard else keep it here


    return new _LoginScreenState();
  }
}

【问题讨论】:

  • 这不是一个好主意。改为在_LoginScreenState()initState() 中执行此操作。
  • 那里怎么办?
  • 没什么特别的,只要做它并使用setState(() { ...}) 来更新可用的值。这是一个常见问题解答,在 StackOverflow 上应该已经有几个答案了。
  • 我会使用didChangeDependencies,以防用户断开连接。无论如何,用户详细信息很可能来自 InheritedWidget

标签: android ios flutter sharedpreferences


【解决方案1】:

你没有。

除了状态创建之外,createState 中不应有任何内容。如果您想进行此类检查,请改为在 State 类中进行:

class MyState extends State<MyWidget> {
  @override
  void didChangeDependencies() {
    // check if the user is logged
  }
}

【讨论】:

    【解决方案2】:

    不要使用 createState 读取值,您可以使用 initStateFutureBuilder 可能。

    class LoginScreen extends StatefulWidget {
        @override
        _LoginScreenState createState() => _LoginScreenState();
      }
    
      class _LoginScreenState extends State<LoginScreen> {
        String value;
    
        _readPreference() async {
          SharedPreferences prefs = await SharedPreferences.getInstance();
          //refresh your screen based on the current parameter
          setState(() {
            value = prefs.getString("your_value_key");
          });
        }
    
        @override
        void initState() {
          _readPreference();
          super.initState();
        }
    
        @override
        Widget build(BuildContext context) {
          return Container();
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-02
      • 2022-01-04
      • 2020-09-15
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多