flutter 正确的方法来处理空API响应值,以带或不带空模型

pdkcd3nj  于 2023-08-07  发布在  Flutter
关注(0)|答案(1)|浏览(121)

例如,如果API响应中的值为空,我想处理该值

"data": {
    "email": null,
    "username": "Janet",
},

字符串
从这个响应我想把它添加到我的用户模型

class UserModel {
  final String email;
  final String username;

  UserModel({required this.email, required this.username});
}


但是如果email值为null怎么办?我是否应该用这个逻辑呢?

UserModel(email: data['email'] ?? '', 
              username: data['username'] ?? '',
       ),


如果我让模型像这样可以为空呢

class UserModel {
      String? email;
      String? username;
    
      UserModel({this.email, this.username});
    }


最好的办法是什么?我很困惑,如果我应该使用nullable模型或必需的模型,并处理如果值为空。我想要最好的方法

gc0ot86w

gc0ot86w1#

我想说,这取决于你的需求。但是无论是否是nullable,尝试用final定义变量,使类成为immutable

  • 案例1:在构造函数中设置默认值
class UserModel {
  final String email;
  final String username;

 const UserModel({this.email= "", this.username=""});
}

字符串
我会使用这种方法。因为当我们想在UI上使用它时,它非常有用。正如我们所知,有些小部件需要non-null值。例如

final user = UserModel();

// widget
Text(user.email); // its simple, because email is non-null


但是在这种情况下,当我们设置email=null时,它将被设置为空字符串。例如。如果你想使用toJson()方法,它会将空字符串设置为emailusername。参见案例2 =>

  • 案例2:您的数据库需要null作为值。

在某些情况下,在backend中使用null检查器来进行某些逻辑。
这就是为什么在Dart模型中,我们必须使用nullable值。所以我们可以将null值发送到服务器。

class UserModel {
 final String? email;
 final String? username;

  const UserModel({this.email, this.username});
}


现在我们可以设置email =null
但是在另一方面,当我们使用它来non-null widget属性时,我们需要设置默认值。

final user = UserModel();

// 
Text(user.email ?? "");

相关问题