mxflutter / mxflutter Goto Github PK
View Code? Open in Web Editor NEW基于JavaScript 的Flutter框架 mxflutter
License: Other
基于JavaScript 的Flutter框架 mxflutter
License: Other
能完全去掉dartvm吗。降低内存占用。减小包体
http://my.flutter.zone/cate/2/seq/0 Flutter动态化技术社区,大家一起交流学习
看代码只有IOS版本的实现,后续会考虑Android版本吗?
dart:ffi提供dart与C的交互,且为同步执行,在效率和复杂度应该都优于Platform Channel。例如flutter_jscore,这种方案是否可行呢?
最近项目组准备在线上的项目中应用MXFlutter,大佬能否透露一下大版本更新的时间。
感谢!
iOS 跑主工程的example,跳转到示例页面时报错:
[ERR]::MXJSWidgetState:build: widget.widgetData == null this.widget.widgetID:3
然后页面空白,只有一个loading动画。
按照步骤接入,能正常运行:
MXJSWidgetHomePage页面能push出来;
MXJSWidgetHomePage里面的列表item随便点击哪个都报错:
I/flutter (14965): MXJSFlutter:[Flutter]-callJSWidget:flutterCallOnEventCallback
D/MXJSFlutter:Native: -|[com.mojitox.mxflutter.framework.MXJSFlutterApp$3][onMethodCall][138]| -|MXJSFlutter : jsFlutterAppChannel callJS:flutterCallOnEventCallback|
D/MXJSEngine(14965): MXJSFlutter:[JS]-MXJSFlutterApp:nativeCall[object Object]
D/MXJSEngine(14965): MXJSFlutter:[JS]-JSWidget invokeCallback ::WidgetInfo: Name: undefined Class: MXJSStatefulWidget WID: 5 buildseq: 1 currentTreeSeq: 1 buildingseq: 1 preTreeSeq: 1 buildWidgetDataSeq: 1 callID: 5/21
E/MXJSExecutor(14965):
E/MXJSExecutor(14965): undefined:174: TypeError: Cannot read property 'JSPestoPage' of null
E/MXJSExecutor(14965): return new pesto.JSPestoPage;
E/MXJSExecutor(14965): ^
E/MXJSExecutor(14965): TypeError: Cannot read property 'JSPestoPage' of null
E/MXJSExecutor(14965): at MaterialPageRoute.builder (:174:50)
E/MXJSExecutor(14965): at NavigatorState.push (:1212:64)
E/MXJSExecutor(14965): at Function.push (:1246:20)
E/MXJSExecutor(14965): at onTap (:172:35)
E/MXJSExecutor(14965): at MXJSWidgetTree.invokeCallback (:483:12)
E/MXJSExecutor(14965): at MXJSWidgetHelper.invokeCallback (:856:44)
E/MXJSExecutor(14965): at MXJSWidgetHelper.onEventCallback (:756:30)
E/MXJSExecutor(14965): at MyApp.flutterCallOnEventCallback (:421:35)
E/MXJSExecutor(14965): at MyApp.nativeCall (:405:18)
E/MXJSExecutor(14965): com.eclipsesource.v8.V8ScriptExecutionException
E/MXJSExecutor(14965): at com.eclipsesource.v8.V8._executeFunction(Native Method)
E/MXJSExecutor(14965): at com.eclipsesource.v8.V8.executeFunction(V8.java:1162)
E/MXJSExecutor(14965): at com.eclipsesource.v8.V8Object.executeFunction(V8Object.java:370)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.MXJSExecutor$13.excute(MXJSExecutor.java:201)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.utils.MXJsScheduledExecutorService$MXJsTask.run(MXJsScheduledExecutorService.java:71)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.utils.MXJsScheduledExecutorService.execute(MXJsScheduledExecutorService.java:57)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.MXJSExecutor.invokeJSValue(MXJSExecutor.java:195)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.MXJSFlutterApp$3$1.excute(MXJSFlutterApp.java:148)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.utils.MXJsScheduledExecutorService$MXJsTask.run(MXJsScheduledExecutorService.java:71)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.utils.MXJsScheduledExecutorService.execute(MXJsScheduledExecutorService.java:57)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.MXJSExecutor.execute(MXJSExecutor.java:49)
E/MXJSExecutor(14965): at com.mojitox.mxflutter.framework.MXJSFlutterApp$3.onMethodCall(MXJSFlutterApp.java:144)
E/MXJSExecutor(14965): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:226)
E/MXJSExecutor(14965): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MXJSExecutor(14965): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:631)
E/MXJSExecutor(14965): at android.os.MessageQueue.nativePollOnce(Native Method)
E/MXJSExecutor(14965): at android.os.MessageQueue.next(MessageQueue.java:326)
E/MXJSExecutor(14965): at android.os.Looper.loop(Looper.java:190)
E/MXJSExecutor(14965): at android.app.ActivityThread.main(ActivityThread.java:7275)
E/MXJSExecutor(14965): at java.lang.reflect.Method.invoke(Native Method)
E/MXJSExecutor(14965): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:497)
E/MXJSExecutor(14965): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:908)
文件:/js_flutter_src/app_test/animation.js
Flutter SDK Version:1.12.13+hotfix.5
附件为IOS、Android平台打开此页面的log。
发现Android多执行了一次Center的build,不知否是此原因造成的。
ios_anim.log
android_anim.log
PS: Demo-->UI Demo-->Examples-->动画组件 中好多项页面Android上打不开
/// 将MaterialTapTargetSize数据转成json map。
static Map cMaterialTapTargetSizeToJson(MaterialTapTargetSize data) {
Map v;
switch (data) {
case MaterialTapTargetSize.padded:
v = {"_name": "aterialTapTargetSize.padded", "index": 0};
break;
case MaterialTapTargetSize.shrinkWrap:
v = {"_name": "MaterialTapTargetSize.shrinkWrap", "index": 1};
break;
}
return v;
}
mx_common.dart的316行,应该是MaterialTapTargetSize,不是aterialTapTargetSize吧。
更新js 文件 产生这个错误
Error 105 received from application: Isolate must be runnable
Unhandled exception:
{code: 105, message: Isolate must be runnable, data: {request: {method: _reloadSources, params: {pause: true, rootLibUri: file:///Users/ryan/Library/Developer/CoreSimulator/Devices/DF9EE301-B1BE-4863-A915-E9531CB32C2E/data/Containers/Data/Application/588E43D2-D23D-48A3-A0A0-014F42E1F51E/tmp/MXFlutterXdUBxt/MXFlutter/lib/main.dart.incremental.dill, packagesUri: file:///Users/ryan/Library/Developer/CoreSimulator/Devices/DF9EE301-B1BE-4863-A915-E9531CB32C2E/data/Containers/Data/Application/588E43D2-D23D-48A3-A0A0-014F42E1F51E/tmp/MXFlutterXdUBxt/MXFlutter/.packages, isolateId: isolates/323409572}}, details: Isolate must be runnable before this request is made.}}
#0 _rootHandleUncaughtError. (dart:async/zone.dart:1112:29)
#1 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#3 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:115:13)
#4 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:5)
if (await _canDefineDebugJSBundlePath()) {
// 在使用iOS 模拟器调试时,MXJSFlutter.runJSApp()可以设置 debugJSBundlePath 参数,推荐设置成 TS 代码的输出目录,这样TS代码实时更新生效。
MXJSFlutter.runJSApp(debugJSBundlePath: '/Volumes/Data/Work/RFlutter/mxflutter-js/release');
} else {
MXJSFlutter.runJSApp();
}
_canDefineDebugJSBundlePath是private的,业务代码无法调用。
Got here from flutter/flutter#14330 (comment). You may want to consider providing some English documentation for the rest of us.
如题
如题, 如果可以如何再setState页面
现在的链接后面少了 .md……
顺便想提一个小疑问点……
这个库是针对ios设备做的么,看像 JavasSriptCore 这个技术点是面向ios的,文档说明也没提到跨平台这块的,所以,做为一个Android程序员,自然想知道在Android这块的支持怎么样呢?
mxflutter: ^0.2.5
The mxflutter Java wrapper plugin is downloaded as an old version. (com.mojitox.mxflutter)
What is the solution?
如果用了mxflutter ,相当于这些基于dart的开源组件都不能用了?
https://pub.flutter-io.cn/flutter/packages?q=search
mxflutter团队是否有这方面建设的想法?
整个通信链路太长了,dart端把JS通过methodChannel传到Java,然后在j2v8到v8中,其实可以直接在flutter engine的c++层去和v8通信。通信时间长,可能对UI的帧率造成影响。
如题。在远程部署javascript,客户端自动检测下载最新的javascript.
2019-10-28 15:29:09.747591+0800 Runner[6356:2276084] Metal API Validation Enabled
2019-10-28 15:29:10.095575+0800 Runner[6356:2276355] flutter: Observatory listening on http://127.0.0.1:57170/X5EtNoo0FL4=/
2019-10-28 15:29:10.371420+0800 Runner[6356:2276357] [VERBOSE-2:ui_dart_state.cc(144)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
If you're running an application and need to access the binary messenger before runApp()
has been called (for example, during plugin initialization), then you need to explicitly call the WidgetsFlutterBinding.ensureInitialized()
first.
If you're running a test, you can call the TestWidgetsFlutterBinding.ensureInitialized()
as the first line in your test's main()
method to initialize the binding.
#0 defaultBinaryMessenger. (package:flutter/src/services/binary_messenger.dart:73:7)
#1 defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:86:4)
#2 MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:140:62)
#3 MethodChannel.setMethodCallHandler (package:flutter/src/services/platform_channel.dart:368:5)
#4 MXJSFlutter.setupChannel (package:js_flutter/js_flutter/mx_js_framework.dart:45:27)
#5 MXJSFlutter.setup (package:js_flutter/js_flutter/mx_js_framework.dart:40:5)
#6 main (package:js_flutter/main.dart:11:29)
#7 _runMainZoned.. (dart:ui/hooks.dart:239:25)
#8 _rootRun (dart:async/zone.dart:1124:13)
#9 _CustomZone.run (dart:async/zone.dart:1021:19)
#10 _runZoned (dart:async/zone.dart:1516:10)
#11 runZoned (dart:async/zone.dart:1500:12)
#12 _runMainZoned. (dart:ui/hooks.dart:231:5)
#13 _startIsolate. (dart:isolate-patch/isolate_patch.dart:305:19)
#14 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
2.0发布了,请问下团队有兼容2.0的计划么
你好,README 中说是一个动态框架,请问这个动态是如何实现?比如怎么生成增量包等等
具体问题是这一行:
jsFilePathPrefix = [jsFilePathPrefix substringFromIndex:jsFilePathPrefix.length - preixLen];
文件地址:
如果对 JS 文件路径进行截断,会导致在真机运行时文件路径错误,iOS JavaScriptCore 执行文件内容会失败,这里这样做的考虑是什么?(想了解 230 行存在的理由)
如题
什么时候发个大版本更新
Main.js的源代码能给出来阅读吗?
运行提示,求教
想问一下怎么评价qq浏览器团队开源的 Hippy 呢? 个人感觉可能Hippy发展可能更好一些。。。
这个库引入了大量的第三方包,可能会不可避免的导致某些包升级的时候引发bug
XCODE:11.5
FLUTTER:1.22.6
git 引入的是v0.8.0-beta
各种测试 要么提示找不到FMDB.h
要么提示Error: Method not found: 'TransitionBuilderPage'.
反正,就半小时了,没有跑起来。
大家有没有测试通过的环境版本写到README里去啊
把工程中的flutter.framework替换为release的版本后,真机上运行,启动就crash
比如flutter最受诟病的return,用jsx写法实现,最后用babel转为目标js代码
很看好这个动态框架,感兴趣的同学一起交流经验,欢迎大牛和作者加入
提示点击demo选项 提示widgetData=null pop ,是什么问题呢?
问题场景:
问题现象:
此时B控件的状态没有保存住,被重置了,比如B控件显示动画之前的UI状态。
原因分析:
从源码中,感觉是因为当A build时,保存了整个控件的widgetData,当B被build时,只有B控件自身进行了更新,A中保存的widgetDdata没有更新,所以当A由于flutter端触发的build操作,使用的还是旧的widgetData,显示出来的B控件就变成旧的UI样式了。
希望状态管理这块内容在新版本能有更好的更直观的使用方式。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.