flutter_js
flutter_js copied to clipboard
Can't find variable at Global code
Hi, I haven't find an alternative in Flutter for make a XSLT transformation. So I tried to follow a Js way. In that case I build a desktop app (Mac) and the code is:
JsEvalResult jsResult = flutterJs.evaluate("""
var xsltProcessor, resultDocument;
var xml = '<?xml version="1.0" encoding="UTF-8"?><catalog><cd><title>Empire Burlesque</title></cd></catalog>';
var xsl = '<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <xsl:for-each select="catalog/cd"> <xsl:value-of select="title" /> </xsl:for-each></xsl:template></xsl:stylesheet>';
var parser = new DOMParser();
var xsl_doc = parser.parseFromString(xsl, "application/xml");
var xml_doc = parser.parseFromString(xml, "application/xml");
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl_doc);
xsltProcessor.transformToDocument(xml_doc);
""");
The error is the follow:
Can't find variable: DOMParser at global code@
XSLTProcessor have the same problem
Any ideas to solve?
try this
class ExpressionService{
late JavascriptRuntime _flutterJs;
/// constructor
ExpressionService(){
_init();
}
_init(){
try{
/// initialize javascript engine
_flutterJs = getJavascriptRuntime();
}
catch(e,s){
print("error when initialize javascript engine: $e");
print(s);
}
/// initialize javascript map to set value into it
_flutterJs.evaluate("""const value = {};""");
}
/// put value into javascript map
setValueMapper(Map<String, dynamic> valueMap){
valueMap.forEach((key, value){;
_flutterJs.evaluate("""Object.assign(value,{$key: '$value'});""");
});
}
String calculateExpression(String expression){
try {
JsEvalResult jsResult = _flutterJs.evaluate(expression);
return jsResult.stringResult;
} on PlatformException catch (e) {
print("error: $e");
return "";
}
}
dispose(){
_flutterJs.dispose();
}
}
for test
test('test set value to javascript object and calculate expression', () async{
WidgetsFlutterBinding.ensureInitialized();
late ExpressionService expressionService = new ExpressionService();
late DateTime _startTime;
late DateTime _endTime;
print('----------Start----------');
_startTime = DateTime.now();
expressionService.setValueMapper({"first_name": "Yousef"});
expressionService.setValueMapper({"last_name": "Alkhateeb"});
String expected = expressionService.calculateExpression("value.first_name + value.last_name");
expressionService.dispose();
_endTime = DateTime.now();
int duration = _endTime.difference(_startTime).inMilliseconds;
print('----------End: $duration millisecond----------');
expectAsync0((){
expect(expected, "YousefAlkhateeb");
});
});