none_or 1.0.0
none_or: ^1.0.0 copied to clipboard
Provides a new object None<T>() and a typedef for NoneOr<T>() to differentiate between implicit and explicit null values using dart's only valid Union Type.
example/none_or_example.dart
import 'package:none_or/none_or.dart';
void main() {
_NoneOrExampleClass e0 = _NoneOrExampleClass(
nonNullableField: true,
nullableField: true,
);
print('start: $e0');
print('Passing values to copyWith(nonNullableField: null)');
print('result: ${e0.copyWith(nonNullableField: null)}');
print('Passing values to copyWith(nonNullableField: false)');
print('result: ${e0.copyWith(nonNullableField: false)}');
print('Passing values to copyWith(nonNullableField: false)');
print('result: ${e0.copyWith(nonNullableField: false)}');
print('Passing values to copyWith(nullableField: false)');
print('result: ${e0.copyWith(nullableField: false)}');
print('Passing values to copyWith(nullableField: null)');
print('result: ${e0.copyWith(nullableField: null)}');
}
/// A simple example immutable class with a copyWith function that uses
/// NoneOr<T> to ignore implicit no-change values given to a copyWith, while
/// respecting explicitly provided values including `null`
class _NoneOrExampleClass {
final bool nonNullableField;
final bool? nullableField;
const _NoneOrExampleClass({
required this.nonNullableField,
this.nullableField,
});
@override
String toString() =>
'Example(non-nullable value: $nonNullableField, nullable value: $nullableField)';
_NoneOrExampleClass copyWith({
bool? nonNullableField,
NoneOr<bool>? nullableField = const None(),
}) =>
_NoneOrExampleClass(
nonNullableField: nonNullableField ?? this.nonNullableField,
nullableField: None.fallback(nullableField, this.nullableField),
);
}