【问题标题】:A value of type 'Future<String>' can't be assigned to a variable of type 'String'. Try changing the type of the variable\'Future<String>\' 类型的值不能分配给 \'String\' 类型的变量。尝试更改变量的类型
【发布时间】:2022-10-15 19:01:26
【问题描述】:

我正在尝试学习如何获取令牌。我写的代码有什么问题?

我正在尝试学习如何获取令牌。

导入“包:shared_preferences/shared_preferences.dart”;

导入'../common/constant.dart';

【问题讨论】:

  • 能否请您添加完整代码而不是屏幕截图?
  • setUser 变量的声明是什么?如果看第一张图,是String user.....` 好像是变量声明的问题。
  • 您在哪里创建一个名为setUser 的变量?

标签: flutter error-handling token


【解决方案1】:

使用此示例:

    class UtilSharedPreferences {
  static Future<String> getToken() async {
    var prefs = await SharedPreferences.getInstance();
    return prefs.getString('Token') ?? '';
  }

  static Future<bool> setToken(String value) async {
    var prefs = await SharedPreferences.getInstance();
    return prefs.setString('Token', value);
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({
    Key? key,
  }) : super(key: key);

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String str = '';

  gettoken() async {
    str = await UtilSharedPreferences.getToken();
    setState(() {});
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    gettoken();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Text('Token :$str'),
          Center(
            child: InkWell(
              onTap: () {
                var result = UtilSharedPreferences.setToken('hi');
                if(result){
                  print('success');
                }
              },
              child: Text('save token'),
            ),
          ),
        ],
      ),
    );
  }
}

【讨论】:

  • 你有关于如何使用 shared_preferences 库存储令牌的推荐文章吗
  • 您正确使用它。这是执行此操作的一般方法。
  • 我怎么知道令牌实际上已保存?
  • 你有没有检查我的最后一次更新?! @AbdulAzizPermana 当您保存一些内容时,sharedpref 会返回一个 bool 变量,您可以检查它并确保保存您的令牌
  • @AbdulAzizPermana 很高兴听到这个消息,如果它有帮助,请批准它,以便其他人发现它更容易。
【解决方案2】:

Future 是异步的,您必须使用 await 才能获得所需的值。

user = await UtilSharedPreferencs();

async 关键字是使用异步所必需的。所以作为方法单独实现

void setUser() async {
   user = await UtilSharedPreferencs();
}
void initState(){
  super.initState();
  setUser();
}

【讨论】:

  • 未来<void> initState() async { super.initState();用户 = 等待 UtilSharedPreferences.getToken(); } 对不起,但错误
  • 不是使 initState 异步,而是异步创建和调用 setUser 方法。查看答案
  • 仍然错误,我有点困惑
  • 你得到了什么错误? @AbdulAzizPermana
  • 方法不能被赋值。
猜你喜欢
  • 1970-01-01
  • 2020-12-13
  • 2021-10-16
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多