코딩하는 제리

[Flutter/Project](Instagram Clone) FireStore UserModel 및 상태 파일 본문

Flutter/Project_InstaClone(완)

[Flutter/Project](Instagram Clone) FireStore UserModel 및 상태 파일

JerryCho 2021. 2. 11. 19:03

models/firestore/user_model.dart
models/user_model_state.dart

 


소스코드 및 pubspec.yaml

cloud_firesotre 추가

// models/firestore/user_model.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter_project_IJ/constants/firestore_keys.dart';

class UserModel {
  final String userKey;
  final String profileImg;
  final String email;
  final List<dynamic> myPosts;
  final int followers;
  final List<dynamic> likedPosts;
  final String username;
  final List<dynamic> followings;

  // 해당 데이터의 위치를 저장하는 타입
  final DocumentReference reference;

  // fromMap -> dart 내부 메서드
  UserModel.fromMap(Map<String, dynamic> map, this.userKey, {this.reference})
      : profileImg = map[KEY_PROFILEIMG],
        email = map[KEY_EMAIL],
        likedPosts = map[KEY_LIKEDPOSTS],
        followers = map[KEY_FOLLOWERS],
        followings = map[KEY_FOLLOWINGS],
        myPosts = map[KEY_MYPOSTS],
        username = map[KEY_USERNAME];

  // fromSnapshot -> cloud_firestore 메서드
  // snapshot -> FireStore 각각의 Document
  // id -> Document 키
  // reference -> 해당 Document 위치값
  UserModel.fromSnapshot(DocumentSnapshot snapshot)
      : this.fromMap(snapshot.data(), snapshot.id,
            reference: snapshot.reference);
}
// models/user_model_state.dart

import 'package:flutter/foundation.dart';
import 'package:flutter_project_IJ/models/firestore/user_model.dart';

// 유저마다 다른 데이터를 위젯에 새로 출력하기 위해 작성.
class UserModelState extends ChangeNotifier {
  UserModel _userModel;

  UserModel get userModel => _userModel;

  // userModel 데이터가 바뀔 때 해당 위젯에 알려줌.
  set userModel(UserModel userModel) {
    _userModel = userModel;
    notifyListeners();
  }
}
Comments