The generic data type of a GeneratedColumn
is always nullable, regardless of whether its definition has nullable()
or not. It doesn't even make a difference whether I use TextColumn
or Column<String>
(and similar). Example:
db.dart:
import 'package:moor/moor.dart';
part 'db.g.dart';
class FooTable extends Table {
Column<String> get id => text()();
Column<int> get someNumber => integer()();
Column<DateTime> get someDate => dateTime()();
}
@UseMoor(tables: <Type>[FooTable])
class Db extends _$Db {
// ...
}
db.g.dart:
class $FooTableTable extends FooTable with TableInfo<$FooTableTable, FooTableData> {
final GeneratedDatabase _db;
final String? _alias;
$FooTableTable(this._db, [this._alias]);
final VerificationMeta _idMeta = const VerificationMeta('id');
late final GeneratedColumn<String?> id = GeneratedColumn<String?>(
'id', aliasedName, false,
typeName: 'TEXT', requiredDuringInsert: true);
final VerificationMeta _someNumberMeta = const VerificationMeta('someNumber');
late final GeneratedColumn<int?> someNumber = GeneratedColumn<int?>(
'some_number', aliasedName, false,
typeName: 'INTEGER', requiredDuringInsert: true);
final VerificationMeta _someDateMeta = const VerificationMeta('someDate');
late final GeneratedColumn<DateTime?> someDate = GeneratedColumn<DateTime?>(
'some_date', aliasedName, false,
typeName: 'INTEGER', requiredDuringInsert: true);
@override
List<GeneratedColumn> get $columns => [id, someNumber, someDate];
@override
String get aliasedName => _alias ?? 'foo_table';
@override
String get actualTableName => 'foo_table';
@override
VerificationContext validateIntegrity(Insertable<FooTableData> instance,
{bool isInserting = false}) {
final context = VerificationContext();
final data = instance.toColumns(true);
if (data.containsKey('id')) {
context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta));
} else if (isInserting) {
context.missing(_idMeta);
}
if (data.containsKey('some_number')) {
context.handle(
_someNumberMeta,
someNumber.isAcceptableOrUnknown(
data['some_number']!, _someNumberMeta));
} else if (isInserting) {
context.missing(_someNumberMeta);
}
if (data.containsKey('some_date')) {
context.handle(_someDateMeta,
someDate.isAcceptableOrUnknown(data['some_date']!, _someDateMeta));
} else if (isInserting) {
context.missing(_someDateMeta);
}
return context;
}
@override
Set<GeneratedColumn> get $primaryKey => <GeneratedColumn>{};
@override
FooTableData map(Map<String, dynamic> data, {String? tablePrefix}) {
return FooTableData.fromData(data, _db,
prefix: tablePrefix != null ? '$tablePrefix.' : null);
}
@override
$FooTableTable createAlias(String alias) {
return $FooTableTable(_db, alias);
}
}
The column definition is Column<String> get id => text()()
.
But the generated column is GeneratedColumn<String?> id
.
Is there a way get a GeneratedColumn<String>
(aka nullsafe)?