zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

flutter 对象模型的理解

flutter对象 模型 理解
2023-09-14 09:04:28 时间

如果要传值,传一个int值时就很简单了,类型就是int,如果我们要传好多个值呢,里面有int,也有String,也会有列表,对象,当然我们也可以一个个传,问题是这样子很麻烦,我们可以将这些不同的类型数据堆到一个模型里面,然后传这个模型,也就是我们说的对象了。

//下面一个对象模型

import 'RedEnvLuckyInfo.dart';
import 'RedEnvModel.dart';

//手气王消息model
class LuckKingMessage{

  RedEnvModelOwner? ownerInfo;
  RedEnvLuckyInfo? luckyInfo;//这个对象里面带着两个对象,里面是基本信息

//       LuckKingMessage luckyKingMessage = LuckKingMessage(
 //             luckyInfo: redEnvLuckyInfo, ownerInfo: redEnvModelOwner);
  LuckKingMessage({//有这个构造函数就可以像上面那样赋值了
    this.ownerInfo,
    this.luckyInfo,
  });

  LuckKingMessage.fromJson(Map<String, dynamic> json) {//fromJson解析成我们app端可用的数据
    ownerInfo = (json['ownerInfo'] != null) ? RedEnvModelOwner.fromJson(json['ownerInfo']) : null;
    luckyInfo = (json['luckyInfo'] != null) ? RedEnvLuckyInfo.fromJson(json['luckyInfo']) : null;
  }

  Map<String, dynamic> toJson() {//tojson转成服务器可用的数据
    final data = <String, dynamic>{};

    if (ownerInfo != null) {
      data['ownerInfo'] = ownerInfo!.toJson();
    }
    if(luckyInfo!=null){
      data["luckyInfo"]=luckyInfo!.toJson();
    }
    return data;
  }
}

用法如下

      LuckKingMessage luckyKingMessage = LuckKingMessage(
          ownerInfo: RedEnvModelOwner(
            nickname: data.ownerUserInfo?.nickname,
            userId: data.ownerUserInfo?.userId,
            avatar:
                data.ownerUserInfo?.avatar ?? data.ownerUserInfo?.avatarThumb,
            sex: data.ownerUserInfo?.sex,
            avatarThumb:
                data.ownerUserInfo?.avatarThumb ?? data.ownerUserInfo?.avatar,
            vipLevel: data.ownerUserInfo?.vipLevel,
            vipExpirationTime: data.ownerUserInfo?.vipExpirationTime,
            birthday: data.ownerUserInfo?.birthday,
          ),
          luckyInfo: RedEnvLuckyInfo(
              avatar: data.luckUser?.avatar,
              userId: data.luckUser?.userId,
              nickname: data.luckUser?.nickname,
              redEnvelopeId: data.luckUser?.redEnvelopeId,
              currencyQty: data.luckUser?.currencyQty,
              createTime: data.luckUser?.createTime));

//最后这里就可以使用luckyKingMessage对象了
WsRoomLinker.instance.sendMessage(
          msgType: 4, body: json.encode(luckyKingMessage.toJson()));

或者间接赋值也可以

          RedEnvLuckyInfo redEnvLuckyInfo = RedEnvLuckyInfo(
              avatar: message.luckUser.avatar,
              userId: message.luckUser.userId,
              nickname: message.luckUser.nickname,
              redEnvelopeId: message.luckUser.redEnvelopeId.toInt(),
              currencyQty: message.luckUser.currencyQty);

          RedEnvModelOwner redEnvModelOwner = RedEnvModelOwner(
            nickname: message.sendUser.nickname,
            userId: message.sendUser.userId,
            sex: message.sendUser.sex,
            avatarThumb: message.sendUser.avatarThumb,
          );
          LuckKingMessage luckyKingMessage = LuckKingMessage(
              luckyInfo: redEnvLuckyInfo, ownerInfo: redEnvModelOwner);
//最后也是同样适用对象
          Provider.of<LiveGroupModel>(Global.appContext, listen: false)
              .insertMessage(2, luckKingMessage: luckyKingMessage);