nc-photos/app/lib/iterable_extension.dart

30 lines
781 B
Dart
Raw Normal View History

import 'dart:async';
2021-07-08 20:35:32 +02:00
import 'package:flutter/foundation.dart';
import 'package:np_collection/np_collection.dart';
2021-04-26 12:54:57 +02:00
2021-04-10 06:28:12 +02:00
extension IterableExtension<T> on Iterable<T> {
2022-06-06 12:02:54 +02:00
Future<List<U>> computeAll<U>(ComputeCallback<T, U> callback) async {
final list = asList();
if (list.isEmpty) {
return [];
} else {
return await compute(
_computeAllImpl<T, U>, _ComputeAllMessage(callback, list));
}
2022-06-06 12:02:54 +02:00
}
2022-07-08 13:28:02 +02:00
}
2022-06-06 12:02:54 +02:00
class _ComputeAllMessage<T, U> {
const _ComputeAllMessage(this.callback, this.data);
final ComputeCallback<T, U> callback;
final List<T> data;
}
Future<List<U>> _computeAllImpl<T, U>(_ComputeAllMessage<T, U> message) async {
final result = await Future.wait(
message.data.map((e) async => await message.callback(e)));
return result;
2021-04-10 06:28:12 +02:00
}