Flutter immutable copyWith 方法的使用

7 min read

在 Flutter 中,copyWith 方法是一种方便的方法,用于创建一个具有修改值的类的新实例,同时保留其他属性的原始值。 它通常与 immutable 包一起使用,该包允许您创建具有不可变属性的类。

下面是在 Flutter 应用程序中使用 copyWith 的示例:

Copy code
import 'package:immutable/immutable.dart';

class User {
  final String name;
  final int age;

  User(this.name, this.age);

  User copyWith({String name, int age}) {
    return User(
      name ?? this.name,
      age ?? this.age,
    );
  }
}

void main() {
  final user = User('John', 30);
  final updatedUser = user.copyWith(name: 'Jane');

  print(updatedUser.name); // 打印 'Jane'
  print(updatedUser.age); // 打印 30
}

在此示例中,copyWith 方法使用修改后的 name 属性创建新的 User 实例,同时保留 age 属性的原始值。

您还可以使用 copyWith 方法来创建子类的新实例,通过使用 .. 运算符来设置子类的属性的值:

Copy code
class AdminUser extends User {
  final bool isAdmin;

  AdminUser(String name, int age, this.isAdmin) : super(name, age);

  AdminUser copyWith({String name, int age, bool isAdmin}) {
    return AdminUser(
      name ?? this.name,
      age ?? this.age,
      isAdmin ?? this.isAdmin,
    )..isAdmin = isAdmin ?? this.isAdmin;
  }
}

在此示例中,AdminUser 子类的 copyWith 方法使用修改后的 nameageisAdmin 属性值创建新的 AdminUser 实例。