flutter - 为什么要在 Dart 类里面使用 Prop ?

标签 flutter dart flutter-dependencies equatable

我在 flutter dart 中使用 equatable 来生成一些样板代码。 这是一个使用Equitable生成一些样板代码的类

import 'package:equatable/equatable.dart';

class Task extends Equatable {
  final String title;
  bool? isDone;
  bool? isDeleted;

  Task({
    required this.title,
    this.isDone,
    this.isDeleted,
  }) {
    isDone = isDone ?? false;
    isDeleted = isDeleted ?? false;
  }

  Task copyWith({
    String? title,
    bool? isDone,
    bool? isDeleted,
  }) {
    return Task(
      title: title ?? this.title,
      isDone: isDone ?? this.isDone,
      isDeleted: isDeleted ?? this.isDeleted,
    );
  }

  Map<String, dynamic> toMap() {
    final result = <String, dynamic>{};

    result.addAll({'title': title});
    if (isDone != null) {
      result.addAll({'isDone': isDone});
    }
    if (isDeleted != null) {
      result.addAll({'isDeleted': isDeleted});
    }

    return result;
  }

  factory Task.fromMap(Map<String, dynamic> map) {
    return Task(
      title: map['title'] ?? '',
      isDone: map['isDone'],
      isDeleted: map['isDeleted'],
    );
  }

  @override
  List<Object?> get props => [
        title,
        isDeleted,
        isDone,
      ];
}

我的问题是为什么这段代码以及这段代码在做什么?我阅读了一些文档,但没有找到确切的答案。文档说它用于与另一个类进行比较,但为什么我们需要比较?另外,我不会写任何其他类(class)。那么正在比较哪些类别呢?还是不用来比较??

 @override
  List<Object?> get props => [
        id,
        title,
        isDeleted,
        isDone,
      ];

这行代码的目的是什么? 另外,为什么我们使用 Object 类?

最佳答案

这是指定要比较哪个属性来检查一个实例是否等于同一类的另一个实例。这很有用,因为如果我们想要或不想比较某个属性,我们可以将其添加或删除到返回的数组中。

在此示例中,此代码比较任务的第一个实例是否等于任务的第二个实例。

main() {
    var task1 =  Task(title: 'task 1', isDone: true, isDeleted: true);
    var task2 =  Task(title: 'task 2', isDone: false, isDeleted: false);
    print(task1 == task2); // false
}

它返回List<Object>因为类 Task 扩展了 Equatable,所以 Task 需要重写 List<Object?> get props .

该函数比较字符串和 bool 值。请记住,字符串和 bool 值都是 Object在 dart 中,因此如果您仅比较字符串或 bool 值,您可以返回 List<String>List<bool> .

关于flutter - 为什么要在 Dart 类里面使用 Prop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73676305/

相关文章:

flutter - flutter/Dart 中工厂方法的目的是什么?

firebase - 如何验证当前 FirebaseUser 是否存在?

regex - 在Dart中获取与RegExp匹配的所有子字符串的最佳方法

flutter - 我可以找到 “flutter pub list”或 “flutter pub search”命令行工具吗?

flutter - 如何在 flutter 中使用可注入(inject)和 get_it 的共享偏好?

flutter - 如何使用 flutters video_player 或 Chewie 或 video_viewer 插件播放 m3u8 链接?

java - flutter : Android license status unknown

google-app-engine - Dart2Js 生成的代码无法访问 Google 云端点

dart - 在Linux Armhf机器上构建 “Dart SDK”的问题

flutter - Flutter 如何从本地存储中删除文件?