flutter - 在小部件构建之前获取 SharedPreferences

标签 flutter

我想在我的 statefulwidget 中构建触发之前获取我的用户 ID。 如果我这样做,那么构建将在我获得我的 ID 之前呈现。如果我将其置于 setstate 中,我的构建将首先使用空字符串,然后使用我的 ID 再次重新呈现它,但这会导致不必要的行为。

那么我该如何解决呢?

String _userid = '';
Future<Null> setUserid() async {
    SharedPreferences pref = await SharedPreferences.getInstance();

    _userid = pref.getString('FB_USER');

  }
  initState() {
    super.initState();
    setUserid();
  }

构建

// Widget build
new Flexible(
          child: new StreamBuilder<QuerySnapshot>(
            stream: Firestore.instance
                .collection('users')
                .document(_userid)
                .collection('rooms')
                .snapshots(),
            builder:
                (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
              if (!snapshot.hasData) return new Text('Loading...');
              return new ListView(
                children: snapshot.data.documents
                    .map(
                      (DocumentSnapshot document) => new Text('lol'),
                      // )
                      //new OverviewPresentation(presentation: document),
                    )
                    .toList(),
              );
            },
          ),
        ),

最佳答案

你可以使用FutureBuilder

Future<String> setUserid() async {
  SharedPreferences pref = await SharedPreferences.getInstance();

  _userid = pref.getString('FB_USER');
  return _userid;
}

@override
Widget build(BuildContext context) {
  return FutureBuilder(
  future: setUserid(),
  builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
    if (snapshot.hasData) {
      return ... // your widget
    } else return CircularProgressIndicator();
  });

像这样

关于flutter - 在小部件构建之前获取 SharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53335797/

相关文章:

android - 打开 Flutter 应用后出现空白白屏

flutter - 如何处理 Flutter 中堆栈内列内行的溢出?

Flutter状态管理-使用的架构

firebase - 即使在错误的信用记录出现 flutter firebase 后也能登录

firebase - "java.lang.IllegalArgumentException: Unsupported value"访问FireStore子集合异常

flutter - 如何将 CSS float 等小部件与 Flutter UI 对齐?

dart - 如何在 Flutter 中创建全屏 TextField

android - 如何使用 fl_chart 显示工具提示指示器?

flutter :NoSuchMethodError:在 null 上调用了 getter 'isEmpty'

dart - 向 Flutter 中的计算函数发送多个参数