| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
A Dart library for representing values that can be explicitly "undefined" or "defined" (including null). This is especially useful for APIs like copyWith, where you need to distinguish between "do not change this field" and "set this field to null or a new value".
In Dart, optional parameters default to null, which makes it impossible to distinguish between "no change" and "set to null" in patterns like copyWith. Undefinable<T> solves this by providing an explicit undefined state.
import 'package:undefinable/undefinable.dart';
void main() {
final undef = Undefinable<String>.undefined();
final defined = Undefinable<String>.defined('Hello');
final definedNull = Undefinable<String?>.defined(null);
print(undef.isUndefined); // true
print(defined.isDefined); // true
print(defined.value); // Hello
print(definedNull.isDefined); // true
print(definedNull.value); // null
}class Person {
final String? name;
final int? age;
Person({this.name, this.age});
Person copyWith({
Undefinable<String?> name = const Undefinable.undefined(),
Undefinable<int?> age = const Undefinable.undefined(),
}) {
return Person(
name: name.isUndefined ? this.name : name.value,
age: age.isUndefined ? this.age : age.value,
);
}
}
final person = Person(name: 'Alice', age: 30);
final updated = person.copyWith(
name: Undefinable<String?>.defined(null), // set name to null
age: Undefinable<int?>.undefined(), // don't change age
);
print(updated.name); // null
print(updated.age); // 30final value = 'Hello'.toUndefinable<String>();
print(value.isDefined); // true
print(value.value); // Hellofinal undef = createUndefined<int>();
final defined = createDefined<int>(42);| Back | FazBrowse Home | New Git URL |