[Dart] 복제된 객체의 copyWith 기본

14794 단어 FlutterDarttech

[Dart] 객체 복사


보통 B=A로 복사(실패예)

  • hashCode를 통해 동일성 확인(메모리의 주소도 동일) 결과 동일
  • 두 개의 지시가 같은 대상이 발생한다
  • class User {
      final String username;
    
      const User({this.username});
    }
    
    void main() {
      const userA = User(username: 'UserA');
    
      const userB = userA;
      print(userA.username + ':' + userA.hashCode.toString());
      print(userB.username + ':' + userA.hashCode.toString());
    }
    
    실행 결과
    UserA:419201198
    UserA:419201198
    
  • [비고] 확인된 출력 함수toString()를 User 클래스
  • 에 추가
    class User {
      final String username;
    
      const User({this.username});
    
      
      String toString() => username + ':' + hashCode.toString();
    }
    
    void main() {
      const userA = User(username: 'UserA');
    
      const userB = userA;
      print(userA.toString());
      print(userB.username + ':' + userA.hashCode.toString());
    }
    
    
    실행 결과
    UserA:288318752
    UserA:288318752
    
  • [비고]userB는const가 아니라final의 경우도 마찬가지
  • class User {
      final String username;
    
      const User({this.username});
    
      User copyWith({
        String username,
      }) =>
          User(
            username: username ?? this.username,
          );
    
      
      String toString() => username + ':' + hashCode.toString();
    }
    
    void main() {
      const userA = User(username: 'UserA');
      final userB = userA;
      print(userA.toString());
      print(userB.toString());
    }
    
    실행 결과
    UserA:463513894
    UserA:463513894
    

    copyWith 함수 사용(성공 예)

  • copyWith 추가, 추가 개체로 사용
  • copyWith에 대한 매개변수가 없는 경우 복제된 소스의 값
  • 을 사용합니다.
  • [비고]const userB = userA.copyWith();면 다음과 같은 오류가 발생합니다.
  • Const variables must be initialized with a constant value
  • class User {
      final String username;
    
      const User({this.username});
    
      User copyWith({
        String username,
      }) =>
          User(
            username: username ?? this.username,
          );
    
      
      String toString() => username + ':' + hashCode.toString();
    }
    
    void main() {
      const userA = User(username: 'UserA');
      final userB = userA.copyWith();
      final userC = userA.copyWith(username: 'UserC');
      print(userA.toString());
      print(userB.toString());
      print(userC.toString());
    }
    
    실행 결과
    UserA:610790447
    UserA:455007180
    UserC:1059822335
    

    좋은 웹페이지 즐겨찾기