Non capisco questo comportamento del codice dart2js.
Ho questo solo in funzione asincrona e solo dopo la compilazione a JS.Confronto errato di due codici chiave in funzione asincrona dopo dart2js
e.keyCode is equal 13
KeyCode.ENTER is equal 13
ma
(e.keyCode == KeyCode.ENTER) is false
Questo è semplice codice per il debug il mio problema.
Cosa sta succedendo?
import 'dart:html';
main() async
{
await for(KeyboardEvent e in window.onKeyDown)
{
print('e.keyCode : ${e.keyCode}');
print('e.keyCode.hashCode : ${e.keyCode.hashCode}');
print('KeyCode.ENTER : ${KeyCode.ENTER}');
print('KeyCode.ENTER.hashCode : ${KeyCode.ENTER.hashCode}');
print('e.keyCode.runtimeType : ${e.keyCode.runtimeType}');
print('KeyCode.ENTER.runtimeType : ${KeyCode.ENTER.runtimeType}');
print('e.keyCode == KeyCode.ENTER ${e.keyCode == KeyCode.ENTER}');
print('e.keyCode != KeyCode.ENTER ${e.keyCode != KeyCode.ENTER}');
int a = e.keyCode;
int b = KeyCode.ENTER;
print('a = $a');
print('b = $b');
print('a.hashCode = ${a.hashCode}');
print('b.hashCode = ${b.hashCode}');
print('a == b ${(a == b).toString()}');
print('a == 13 ${(a == 13).toString()}');
print('b == 13 ${(b == 13).toString()}');
if(a == b)
print('DART: a == b');
else
print('DART: a != b');
}
}
uscita su Chrome dopo aver premuto Invio (dart2js - minified):
e.keyCode: 13
e.keyCode.hashCode: 13
KeyCode.ENTER: 13
KeyCode. ENTER.hashCode: 13
e.keyCode.runtimeType: int
KeyCode.ENTER.runtimeType: int
e.keyCode == KeyCode.ENTER falsa 0.123. e.keyCode! = KeyCode.ENTER vero
a = 13
b = 13
a.hashCode = 13
b.hashCode = 13
a == b vera
a == 13 vero
b == 13 vero
DART: a = b
On DartVM (Dartium) tutto sia corretto:
01.235.164,106 milae.keyCode: 13
e.keyCode.hashCode: 13
KeyCode.ENTER: 13
KeyCode.ENTER.hashCode: 13
e.keyCode.runtimeType: int
KeyCode.ENTER.runtimeType : int
e.keyCode == KeyCode.ENTER vero
e.keyCode = KeyCode.ENTER falso
a = 13
b = 13
a.hashCode = 13
!b.hashCode = 13
a == b vera
a == 13 vero
b == 13 vero
DART: a == b
// EDIT
I ho notato che non importa che sto usando keyCode.
Questo è un problema asincrono.
Il codice sottostante restituisce 'OK' su Dartium e 'NOPE' su Chrome dopo la compilazione su JS.
import 'dart:async';
main() async
{
var ctrl = new StreamController();
ctrl.add(true);
await for(var e in ctrl.stream)
{
if(e == e)
print('OK');
else
print('NOPE');
}
}
È necessario presentare un errore su www.dartbug.com. Quale versione di dart-sdk stai usando? – Robert
il codice .js finale non contiene nemmeno la stringa "DART: a == b". – Robert
Dart Editor versione 1.9.3.release (STABILE) Dart SDK versione 1.9.3 – 0pako0