in packages/rfw/lib/src/dart/text.dart [2308:2381]
Object _readValue({ required bool extended, bool nullOk = false }) {
if (_source.current is _SymbolToken) {
switch ((_source.current as _SymbolToken).symbol) {
case _SymbolToken.openBracket:
return _readList(extended: extended);
case _SymbolToken.openBrace:
return _readMap(extended: extended);
}
} else if (_source.current is _IntegerToken) {
final Object result = (_source.current as _IntegerToken).value;
_advance();
return result;
} else if (_source.current is _DoubleToken) {
final Object result = (_source.current as _DoubleToken).value;
_advance();
return result;
} else if (_source.current is _StringToken) {
final Object result = (_source.current as _StringToken).value;
_advance();
return result;
} else if (_source.current is _IdentifierToken) {
final String identifier = (_source.current as _IdentifierToken).value;
if (identifier == 'true') {
_advance();
return true;
}
if (identifier == 'false') {
_advance();
return false;
}
if (identifier == 'null' && nullOk) {
_advance();
return missing;
}
if (!extended) {
throw ParserException._unexpected(_source.current);
}
if (identifier == 'event') {
_advance();
return EventHandler(_readString(), _readMap(extended: true));
}
if (identifier == 'args') {
_advance();
return ArgsReference(_readParts());
}
if (identifier == 'data') {
_advance();
return DataReference(_readParts());
}
if (identifier == 'state') {
_advance();
return StateReference(_readParts());
}
if (identifier == 'switch') {
_advance();
return _readSwitch();
}
if (identifier == 'set') {
_advance();
_expectIdentifier('state');
final StateReference stateReference = StateReference(_readParts());
_expectSymbol(_SymbolToken.equals);
final Object value = _readValue(extended: true);
return SetStateHandler(stateReference, value);
}
final int index = _loopIdentifiers.lastIndexOf(identifier) + 1;
if (index > 0) {
_advance();
return LoopReference(_loopIdentifiers.length - index, _readParts(optional: true));
}
return _readConstructorCall();
}
throw ParserException._unexpected(_source.current);
}