@@ -23,11 +23,11 @@ class Player {
2323 final columnName = 'Player';
2424
2525 /// Column storing player id.
26- final id = const Column<Integer >(defaultValue: Integer(1) , name: 'id');
26+ final id = const Column<int >(defaultValue: 1 , name: 'id');
2727
2828 /// Column storing first name of player.
29- final firstName = const Column<Text >(
30- defaultValue: Text( 'Thomas') ,
29+ final firstName = const Column<String >(
30+ defaultValue: 'Thomas',
3131 name: 'FirstName',
3232 );
3333
@@ -55,6 +55,12 @@ class Player {
5555 'two': 2.0,
5656 'enum': Greek.alpha
5757 };
58+
59+ /// Test list
60+ final list = const <List<int>>[
61+ [0, 1],
62+ [10, 11]
63+ ];
5864}
5965
6066```
@@ -89,12 +95,12 @@ import 'package:test_types/test_types.dart';
8995/// represented by a [ConstantReader].
9096Future<void> main() async {
9197 /// Reading libraries.
92- print('Reading player.dart');
98+ print('Reading player.dart ... ');
9399 final playerLib = await initializeLibraryReaderForDirectory(
94100 'example/src',
95101 'player.dart',
96102 );
97- print('Done');
103+ print('Done reading player.dart ');
98104
99105 // ConstantReader representing field 'columnName'.
100106 final columnNameCR =
@@ -119,65 +125,33 @@ Future<void> main() async {
119125 final mapWithEnumEntryCR =
120126 ConstantReader(playerLib.classes.first.fields[8].computeConstantValue());
121127
122- // // Get singleton instance of the reader.
123- // final reader = GenericReader();
124-
125- Integer integerDecoder(ConstantReader cr) {
126- return Integer(cr.peek('value')?.intValue ?? double.nan.toInt());
127- }
128-
129- Real realDecoder(ConstantReader cr) {
130- return Real(cr.peek('value')?.doubleValue ?? double.nan);
131- }
132-
133- Boolean booleanDecoder(ConstantReader cr) {
134- return Boolean(cr.read('value').boolValue);
135- }
136-
137- Text textDecoder(ConstantReader cr) {
138- return Text(cr.read('value').stringValue);
139- }
140-
141- SqliteType sqliteTypeDecoder(ConstantReader cr) {
142- if (cr.holdsA<Integer>()) return cr.get<Integer>();
143- if (cr.holdsA<Text>()) return cr.get<Text>();
144- if (cr.holdsA<Real>()) return cr.get<Real>();
145- if (cr.holdsA<Boolean>()) return cr.get<Boolean>();
146- throw ErrorOf<Decoder<SqliteType>>(
147- message: 'Could not reader const value of type `SqliteType`',
148- invalidState: 'ConstantReader holds a const value of type '
149- '`${cr.objectValue.type}`.');
150- }
151-
152- // Registering decoders.
153- GenericReader.addDecoder<Integer>(integerDecoder);
154- GenericReader.addDecoder<Boolean>(booleanDecoder);
155- GenericReader.addDecoder<Text>(textDecoder);
156- GenericReader.addDecoder<Real>(realDecoder);
157- GenericReader.addDecoder<SqliteType>(sqliteTypeDecoder);
128+ final listCR =
129+ ConstantReader(playerLib.classes.first.fields[9].computeConstantValue());
158130
159131 // Adding a decoder for constants of type [Column].
160132 GenericReader.addDecoder<Column>((cr) {
161- final defaultValue = cr.read('defaultValue').get<SqliteType>();
162133 final name = cr.read('name').get<String>();
163134
164- Column<T> columnFactory<T extends SqliteType>() {
165- return Column<T>(
166- defaultValue: defaultValue as T,
167- name: name,
168- );
135+ if (cr.holdsA<Column<int>>()) {
136+ final defaultValue = cr.read('defaultValue').get<int>();
137+ return Column<int>(defaultValue: defaultValue, name: name);
169138 }
170-
171- if ( cr.holdsA<Column>([Text])) {
172- return columnFactory<Text>( );
139+ if (cr.holdsA<Column<bool>>()) {
140+ final defaultValue = cr.read('defaultValue').get<bool>();
141+ return Column<bool>(defaultValue: defaultValue, name: name );
173142 }
174- if (cr.holdsA<Column>([Real])) {
175- return columnFactory<Real>();
143+ if (cr.holdsA<Column<String>>()) {
144+ final defaultValue = cr.read('defaultValue').get<String>();
145+ return Column<String>(defaultValue: defaultValue, name: name);
176146 }
177- if (cr.holdsA<Column>([Integer])) {
178- return columnFactory<Integer>();
147+ if (cr.holdsA<Column<double>>()) {
148+ final defaultValue = cr.read('defaultValue').get<double>();
149+ return Column<double>(defaultValue: defaultValue, name: name);
179150 }
180- return columnFactory<Boolean>();
151+ throw ErrorOf<Decoder<Column>>(
152+ message: 'Error reading constant expression.',
153+ expectedState: 'An instance of ConstantReader holding a '
154+ 'constant of type `Column`.');
181155 });
182156
183157 final green = AnsiPen()..green(bold: true);
@@ -202,7 +176,8 @@ Future<void> main() async {
202176 // )
203177
204178 // Adding a decoder function for type [Sponsor].
205- GenericReader.addDecoder<Sponsor>((cr) => Sponsor(cr.read('name').stringValue));
179+ GenericReader.addDecoder<Sponsor>(
180+ (cr) => Sponsor(cr.read('name').stringValue));
206181
207182 final sponsors = sponsorsCR.getList<Sponsor>();
208183
@@ -247,6 +222,14 @@ Future<void> main() async {
247222 // Prints:
248223 // 'Retrieving a Map<String, dynamic>:'
249224 // {one: 1, two: 2.0, enum: Greek.alpha}
225+
226+ // Retrieving a nested list.
227+ // Add a specific decoder for the inner type.
228+ GenericReader.addDecoder<List<int>>((cr) => cr.getList<int>());
229+
230+ final list = listCR.getList<List<int>>();
231+ print(green('\nRetrieving a List<List<int>>'));
232+ print(list);
250233}
251234
252235```
0 commit comments