IIterator<T>.fromPtr constructor
IIterator<T>.fromPtr (
- Pointer<
COMObject> ptr, { - T creator(
- Pointer<
COMObject>
- Pointer<
- T enumCreator()?,
- DoubleType? doubleType,
- IntType? intType,
Creates an instance of IIterator from the given ptr.
T must be of type bool, DateTime, double, Duration, Guid,
int, Object?, String, Uri?, IInspectable? (e.g.,
StorageFile?), WinRTEnum (e.g., DeviceClass), or WinRTStruct
(e.g., BasicGeoposition).
doubleType must be specified if T is double.
final iterator =
IIterator<double>.fromPtr(ptr, doubleType: DoubleType.float);
intType must be specified if T is int.
final iterator = IIterator<int>.fromPtr(ptr, intType: IntType.uint64);
creator must be specified if T is IInspectable?.
final iterator = IIterator<StorageFile?>.fromPtr(ptr,
creator: StorageFile.fromPtr);
enumCreator must be specified if T is WinRTEnum.
final iterator = IIterator<DeviceClass>.fromPtr(ptr,
enumCreator: DeviceClass.from);
Implementation
factory IIterator.fromPtr(
Pointer<COMObject> ptr, {
T Function(Pointer<COMObject>)? creator,
T Function(int)? enumCreator,
DoubleType? doubleType,
IntType? intType,
}) {
if (T == bool) return _IIteratorBool.fromPtr(ptr) as IIterator<T>;
if (T == DateTime) return _IIteratorDateTime.fromPtr(ptr) as IIterator<T>;
if (T == Duration) return _IIteratorDuration.fromPtr(ptr) as IIterator<T>;
if (T == Guid) return _IIteratorGuid.fromPtr(ptr) as IIterator<T>;
if (T == double) {
if (doubleType == null) throw ArgumentError.notNull('doubleType');
final iterator = switch (doubleType) {
DoubleType.double => _IIteratorDouble.fromPtr(ptr),
DoubleType.float => _IIteratorFloat.fromPtr(ptr),
};
return iterator as IIterator<T>;
}
if (T == int) {
if (intType == null) throw ArgumentError.notNull('intType');
final iterator = switch (intType) {
IntType.int16 => _IIteratorInt16.fromPtr(ptr),
IntType.int32 => _IIteratorInt32.fromPtr(ptr),
IntType.int64 => _IIteratorInt64.fromPtr(ptr),
IntType.uint8 => _IIteratorUint8.fromPtr(ptr),
IntType.uint16 => _IIteratorUint16.fromPtr(ptr),
IntType.uint32 => _IIteratorUint32.fromPtr(ptr),
IntType.uint64 => _IIteratorUint64.fromPtr(ptr)
};
return iterator as IIterator<T>;
}
if (isSubtypeOfInspectable<T>()) {
if (creator == null) throw ArgumentError.notNull('creator');
return _IIteratorInspectable.fromPtr(ptr, creator: creator);
}
if (T == String) return _IIteratorString.fromPtr(ptr) as IIterator<T>;
if (isSubtype<T, Uri>()) return _IIteratorUri.fromPtr(ptr) as IIterator<T>;
if (isSubtypeOfWinRTFlagsEnum<T>()) {
if (enumCreator == null) throw ArgumentError.notNull('enumCreator');
return _IIteratorWinRTFlagsEnum.fromPtr(ptr, enumCreator: enumCreator);
}
if (isSubtypeOfWinRTEnum<T>()) {
if (enumCreator == null) throw ArgumentError.notNull('enumCreator');
return _IIteratorWinRTEnum.fromPtr(ptr, enumCreator: enumCreator);
}
if (isNullableObjectType<T>()) {
return _IIteratorObject.fromPtr(ptr) as IIterator<T>;
}
if (isSubtypeOfWinRTStruct<T>()) {
if (T == AccessListEntry) {
return _IIteratorAccessListEntry.fromPtr(ptr) as IIterator<T>;
}
if (T == BackgroundTransferFileRange) {
return _IIteratorBackgroundTransferFileRange.fromPtr(ptr)
as IIterator<T>;
}
if (T == BasicGeoposition) {
return _IIteratorBasicGeoposition.fromPtr(ptr) as IIterator<T>;
}
if (T == Color) return _IIteratorColor.fromPtr(ptr) as IIterator<T>;
if (T == GpioChangeRecord) {
return _IIteratorGpioChangeRecord.fromPtr(ptr) as IIterator<T>;
}
if (T == MediaTimeRange) {
return _IIteratorMediaTimeRange.fromPtr(ptr) as IIterator<T>;
}
if (T == MseTimeRange) {
return _IIteratorMseTimeRange.fromPtr(ptr) as IIterator<T>;
}
if (T == NitRange) return _IIteratorNitRange.fromPtr(ptr) as IIterator<T>;
if (T == Point) return _IIteratorPoint.fromPtr(ptr) as IIterator<T>;
if (T == PointerDeviceUsage) {
return _IIteratorPointerDeviceUsage.fromPtr(ptr) as IIterator<T>;
}
if (T == Rect) return _IIteratorRect.fromPtr(ptr) as IIterator<T>;
if (T == RectInt32)
return _IIteratorRectInt32.fromPtr(ptr) as IIterator<T>;
if (T == Size) return _IIteratorSize.fromPtr(ptr) as IIterator<T>;
if (T == SizeUInt32) {
return _IIteratorSizeUInt32.fromPtr(ptr) as IIterator<T>;
}
if (T == SortEntry)
return _IIteratorSortEntry.fromPtr(ptr) as IIterator<T>;
if (T == StorePackageUpdateStatus) {
return _IIteratorStorePackageUpdateStatus.fromPtr(ptr) as IIterator<T>;
}
if (T == TextRange) {
return _IIteratorTextRange.fromPtr(ptr) as IIterator<T>;
}
if (T == TextSegment) {
return _IIteratorTextSegment.fromPtr(ptr) as IIterator<T>;
}
if (T == WindowId) return _IIteratorWindowId.fromPtr(ptr) as IIterator<T>;
}
throw ArgumentError.value(T, 'T', 'Unsupported type');
}