iTranslated by AI

The content below is an AI-generated translation. This is an experimental feature, and may contain errors. View original article
😳

[Flutter] Precautions when comparing Dart collections

に公開

Conclusion

You should avoid comparing Dart collections using ==. It can lead to unexpected bugs.
Instead of using ==, use listEquals, setEquals, and mapEquals.

Trying out collection comparisons

I tried comparing lists, sets, and maps.

Sample code

import 'package:flutter/foundation.dart';

void main() {
  final listA = [1, 2, 3, 4, 5];
  final listB = [1, 2, 3, 4, 5];

  print('listA == listB ${listA == listB}');
  print('listEquals(listA, listB) ${listEquals(listA, listB)}');

  final setA = {'A', 'B', 'C'};
  final setB = {'A', 'B', 'C'};

  print('setA == setB ${setA == setB}');
  print('setEquals(setA, setB) ${setEquals(setA, setB)}');

  final mapA = {1: 'A', 2: 'B', 3: 'C'};
  final mapB = {1: 'A', 2: 'B', 3: 'C'};

  print('mapA == mapB ${mapA == mapB}');
  print('mapEquals(mapA, mapB) ${mapEquals(mapA, mapB)}');
}

Execution results

flutter: listA == listB false
flutter: listEquals(listA, listB) true
flutter: setA == setB false
flutter: setEquals(setA, setB) true
flutter: mapA == mapB false
flutter: mapEquals(mapA, mapB) true

References

https://api.flutter.dev/flutter/foundation/listEquals.html
https://api.flutter.dev/flutter/foundation/setEquals.html
https://api.flutter.dev/flutter/foundation/mapEquals.html

Discussion