【问题标题】:I have an error like the non-nullable variable 'sessionUser' must be initialized我有一个错误,例如必须初始化不可为空的变量“sessionUser”
【发布时间】:2021-12-16 21:13:17
【问题描述】:

我有如下错误:

必须初始化不可为空的变量“sessionUser”。尝试添加初始化表达式...

我在网上搜索了很多,但没有找到解决问题的方法。你能帮我解决这个问题吗?

import 'dart:convert';
import 'package:flutter/widgets.dart';
import 'package:shared_preferences/shared_preferences.dart';

class UserModel {
    String id;
    String nom;
    String email;

    UserModel({
        required this.id,
        required this.nom,
        required this.email
    });

    static UserModel sessionUser;

    factory UserModel.fromJson(Map<String,dynamic> i) => UserModel(
        id: i['id'],
        nom: i['nom'],
        email: i['email']
    );

    Map<String,dynamic> toMap() => {
        "id": id,
        "nom": nom,
        "email": email
    };

    static void saveUser(UserModel user) async {
        SharedPreferences pref = await SharedPreferences.getInstance();
        var data = json.encode(user.toMap());
        pref.setString("user", data);
        pref.commit();
    }

    static void getUser() async {
        SharedPreferences pref = await SharedPreferences.getInstance();
        var data = pref.getString("user");
        if (data != null) {
            var decode = json.decode(data);
            var user = await UserModel.fromJson(decode);
            sessionUser = user;
        } else {
            sessionUser = UserModel();
        }
    }

    static void logOut() async {
        SharedPreferences p = await SharedPreferences.getInstance();
        p.setString("user", null);
        sessionUser = null;
        p.commit();
    }
}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您的变量 sessionUser 未初始化。试试这样的:

    static UserModel? sessionUser;
    

    ? 表示变量可以为空,因此您必须在稍后在代码中使用之前检查变量是否为空。

    【讨论】:

    • 谢谢你的回答,它解决了我的问题。
    • static void logOut() async { SharedPreferences p = await SharedPreferences.getInstance(); p.setString("user", null); sessionUser = null; p.commit(); } 将 null 分配给用户时出现错误
    • 我有这个错误:参数类型'Null'不能分配给参数类型'String'。
    • 试试p.remove("user")而不是p.setString("user", null)
    • 没关系,你解决了我的问题,谢谢。
    猜你喜欢
    • 2021-07-06
    • 2021-08-10
    • 1970-01-01
    • 2022-08-18
    • 2021-07-06
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多