Проблема с вашим методом в том, что в Dart все (в отличие от Java, включая примитивные типы данных) является объектом, поэтому, когда вы используете оператор equals или содержит, Dart сравнивает их как объекты, а не как абсолютные значения, так что вы получаете false.
Копайте в библиотеку коллекций, может быть, вы найдете лучший метод, но, возможно, так и есть.
import 'package:collection/collection.dart';
main() async {
Function equals = const ListEquality().equals;
List a = [
[1, 2],
[1, 1],
[2, 2]
];
List b = [1, 2];
int c = 1;
print(b.contains(c));
print(a.contains(b));
bool contains = false;
for (List list in a) {
if (equals(list, b)) {
contains = true;
print(contains);
}
}
}