【问题标题】:Shared Preference Flutter(How to use Shared preference in build method) [duplicate]共享偏好颤振(如何在构建方法中使用共享偏好)[重复]
【发布时间】:2021-05-10 06:34:31
【问题描述】:

您好,我是 Flutter 新手,正在努力在 builder 方法中使用共享首选项,这是我的代码:

getId() async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      String sessionId = prefs.getString('sessionId');
      return Text(sessionId);
    }

这是我的构建方法的一部分:

ListTile(
                  title: Text(
                    'Welcome, $getId()',
                    style: TextStyle(color: Colors.white),
                  ),

这是我尝试在文本小部件中使用共享首选项时得到的错误输出:

dynamic function closure flutter

【问题讨论】:

  • 对您来说重要的部分是“我如何使用它”部分。尽管回顾其他细节也无妨。
  • getId() 正在返回文本小部件而不是字符串。

标签: flutter dart sharedpreferences flutter-dependencies


【解决方案1】:

您可以使用FutureBuilder 小部件

例子:

FutureBuilder(
      future: getId(),
      builder: (context, snapshot) {
        if (snapshot.hasData){
          return ListTile(
              title: Text(
                'Welcome, ${snapshot.data}',
                style: TextStyle(color: Colors.white),
              ),
        }else if (snapshot.hasError){
          return Container(); //Error getting data
        }else{
          return Container(); //show Loading
        }
      },);

并且在您的 getId() 返回字符串而不是文本小部件 示例:

getId() async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      String sessionId = prefs.getString('sessionId');
      return sessionId;
    }

【讨论】:

    【解决方案2】:

    在 initState 中调用 getId 函数为变量“id”赋值。

    @override
     void initState() {
     super.initState();
     getId.then((value) => setState(() {
          id = value;
        }));
    }
    

    在你的构建方法中

      ListTile(
                  title: Text(
                    'Welcome, $id',
                    style: TextStyle(color: Colors.white),
                  ),
    

    您的 getId 函数将返回字符串

    getId() async {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      String sessionId = prefs.getString('sessionId');
      return sessionId;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 2020-06-11
      • 1970-01-01
      • 2012-10-24
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多