2022-05-28 03:19:12 +08:00
|
|
|
import 'dart:async';
|
|
|
|
|
2021-07-09 02:35:32 +08:00
|
|
|
import 'package:flutter/foundation.dart';
|
2023-08-26 01:31:06 +08:00
|
|
|
import 'package:np_collection/np_collection.dart';
|
2021-04-26 18:54:57 +08:00
|
|
|
|
2021-04-10 12:28:12 +08:00
|
|
|
extension IterableExtension<T> on Iterable<T> {
|
2022-06-06 18:02:54 +08:00
|
|
|
Future<List<U>> computeAll<U>(ComputeCallback<T, U> callback) async {
|
2022-07-06 04:20:24 +08:00
|
|
|
final list = asList();
|
|
|
|
if (list.isEmpty) {
|
|
|
|
return [];
|
|
|
|
} else {
|
|
|
|
return await compute(
|
|
|
|
_computeAllImpl<T, U>, _ComputeAllMessage(callback, list));
|
|
|
|
}
|
2022-06-06 18:02:54 +08:00
|
|
|
}
|
2022-07-08 19:28:02 +08:00
|
|
|
}
|
|
|
|
|
2022-06-06 18:02:54 +08: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 12:28:12 +08:00
|
|
|
}
|