quickjs_dart 0.0.5 copy "quickjs_dart: ^0.0.5" to clipboard
quickjs_dart: ^0.0.5 copied to clipboard

A dart binding and JSEngine for QuickJS, using Dart:FFI. DartVM can run JSEngine now, supporting Android currently, will support more platform sool

example/lib/main.dart

import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:quickjs_dart/quickjs_dart.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  JSEngine();
  runApp(MyApp());
  JSEngine.loop(JSEngine.instance);
  JSEngine.stop(JSEngine.instance);
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'quickjs_dart',
      home: JSEnginePage(),
    );
  }
}

class JSEnginePage extends StatefulWidget {
  @override
  _JSEnginePageState createState() => _JSEnginePageState();
}

class _JSEnginePageState extends State<JSEnginePage> {
  TextEditingController _jsInputController = TextEditingController(text: '1 + 1');
  String _result;
  // JS_Value _framework;
  Pointer<JSContext> ctx;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    var ctx = newContext(newRuntime());
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Quickjs Example'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: [
            Text('JS eval is: $_result'),
            Divider(
              height: 10,
            ),
            Container(
              padding: EdgeInsets.all(10.0),
              child: TextField(
                maxLines: 10,
                controller: _jsInputController,
              ),
            ),
            Divider(
              height: 10,
            ),
            MaterialButton(
              color: Colors.black,
              textColor: Colors.white,
              minWidth: 200,
              height: 60,
              onPressed: () {
                // print(_jsInputController);
                var toEvalString = _jsInputController.text.replaceAll(RegExp("[“”‘’]"), "\"");

                var jsVal = JSEngine.instance.evalScript(toEvalString);

                if (!jsVal.isValid()) {
                  showDialog(
                    context: context,
                    builder: (context) {
                      return AlertDialog(
                        title: Text("Eval Javascript Fail"),
                        content: Text("Please change your script"),
                        actions: [
                          FlatButton(
                              child: Text(
                                "OK",
                                style: TextStyle(fontSize: 18),
                              ),
                              onPressed: () => Navigator.pop(context))
                        ],
                      );
                    },
                  );
                } else {
                  setState(() {
                    _result = jsVal.toJSONString();
                  });
                }
                jsVal.free();
              },
              child: Text("lets eval js"),
            )
          ],
        ),
      ),
    );
  }

  @override
  dispose() {
    super.dispose();
  }
}
5
likes
40
pub points
0%
popularity

Publisher

unverified uploader

A dart binding and JSEngine for QuickJS, using Dart:FFI. DartVM can run JSEngine now, supporting Android currently, will support more platform sool

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

ffi, flutter, logger, meta

More

Packages that depend on quickjs_dart