Giter Site home page Giter Site logo

mpflutter / mpflutter Goto Github PK

View Code? Open in Web Editor NEW
1.9K 1.9K 127.0 8.54 MB

MPFlutter 是一个跨平台 Flutter 开发框架,可用于微信小程序以及 Web 应用开发。

Home Page: http://mpflutter.com/

License: Apache License 2.0

Dart 100.00%
dart flutter

mpflutter's Introduction

MPFlutter 2.0

MPFlutter 是一款用于构建小程序的开发框架,基于 Flutter 构建,开发体验无限接近于 Flutter 原生应用。

你可以基于 MPFlutter 开发以下平台的小程序:

  • 微信小程序
  • 抖音小程序(WIP - 预计 2024 年 4 月)

原生 Flutter 开发体验

MPFlutter 的目标是,在尽可能保留 Flutter 开发体验的同时,降低应用迁移到微信小程序的成本。

我们已经实现以下能力:

  • 无缝迁移
    • 无须裁剪 Flutter Framework,你可以使用 Material / Cupertino 这些官方组件搭建 UI。
    • 自适应的构建脚本,构建小程序就像构建原生应用一般简单。
    • 完整的分包支持,适应小程序分包大小限制,静态资源、代码都可以轻松分包。
  • 实时预览能力
    • 快速预览,在 Desktop 上使用 Hot Reload / Hot Restart 快速预览界面及应用逻辑
    • 跨端联调,在 Desktop 预览的基础上,可连接到微信宿主,远程调用端上接口。
  • 纯正的 Flutter
    • 支持 Flutter 3.13 以上版本,并且保证跟随官方升级而升级。
    • 完全一致的 Flutter 插件体系,开发 MPFlutter 插件就像开发 Flutter 插件一样简单。
    • 完全一致的 Pub 包管理系统,开发好的插件直接上传官方包管理平台即可使用。

总的来说,MPFlutter 就是尽可能地帮助你以低成本的方式构建微信小程序。

高性能的渲染体验

MPFlutter 2.0 使用 Skia + WebGL 渲染,对于 MPFlutter 1.0,性能提升是非常明显的。

具体体验在以下场景:

  • 频繁更新的界面
    • 不再通过 WXML <-> JS 双向传递数据,直接通过 JS 控制 WebGL 渲染,只要 Widget 层级合理,可以做到毫秒级驱动界面更新。
    • 使用 WebGL 驱动渲染,可提升渲染缓存灵活性,你可以使用 RepaintBoundary 进一步提升界面帧率。
  • 频繁的事件交互
    • 事件的接收不再单纯依赖宿主小程序的回传,MPFlutter 仅接收最基本的触摸、键盘事件,后续的事件分发全部交回 Flutter Framework 处理。
    • 这意味着你可以在小程序中获取更多、更实时的事件。
  • 小游戏方案
    • 得益于渲染性能的提升,MPFlutter 也允许使用 Flutter 开发微信小程序(小游戏)中使用 Flame 开发游戏。

完整的 API 生态配套

在渲染能力以外,配套提供平台 API 封装,你不需要手动编写 Channel,MPFlutter 官方已为你完成对应封装,直接使用就可以。

开始体验

从《环境安装》开始体验 MPFlutter

授权

MPFlutter 2.0 版本并不是一个完全开源的项目,如果你使用 MPFlutter 开发的小程序需要用于商业目的,需要购买商用授权。

商业目的定义

  • 面向企业内部的应用,属于商业目的,需要购买授权。
  • 面向公众的应用,属于商业目的,需要购买授权。
  • 目标用户只包括开发者自己,无任何营利目的,不需要购买授权。
  • 目标用户是以教学演示、内部研究为目的的小程序,不需要购买授权。

授权购买方式

请参考《授权购买指南》,授权购买后我们将通过电子邮件发送授权文件给您。

mpflutter's People

Contributors

archangelxu avatar blackmatrix2007 avatar huang12zheng avatar ilinqh avatar ponycui avatar sakurasduck avatar viet06061999 avatar zsakvo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mpflutter's Issues

小程序页面加载速度,平均在3秒上下

WechatIMG209

查看了官方的线上小程序,从首页进入 装修设计、福利团页面,加载时间都在3秒以上。
点击 我 页面加载速度在2秒以上。

这个加载速度是否可优化 目前页面的加载体验 感觉还有提升空间

打包构建小程序长时间等待无报错信息

[√] Flutter (Channel stable, 2.5.3, on Microsoft Windows [Version 10.0.19043.1348], locale zh-CN) [√] Android toolchain - develop for Android devices (Android SDK version 31.0.0) [√] Chrome - develop for the web [√] Android Studio (version 2020.3) [√] Connected device (2 available)
Dart
Dart SDK version: 2.14.4 (stable) (Wed Oct 13 11:11:32 2021 +0200) on "windows_x64"
使用命令 dart scripts/build_weapp.dart
image
尝试Ctrl+c 回车 都没反应

./mpdart scripts/build_web.dart 编译失败

当开发完成后,你可以通过以下命令构建 Web (HTML5) 产物。

./mpdart scripts/build_web.dart

构建完成后,产物位于 build 目录下。

按照文档,执行 ./mpdart scripts/build_web.dart -h -v
编译错误如下提示,build/main.dart.js,但是build还没生成文件,这个具体是什么问题呢?

 ./mpdart scripts/build_web.dart -h -v
正在构建...
Unhandled exception:
FileSystemException: Cannot open file, path = 'build/main.dart.js' (OS Error: No such file or directory, errno = 2)
# 0      _File.throwIfError (dart:io/file_impl.dart:635:7)
# 1      _File.openSync (dart:io/file_impl.dart:479:5)
# 2      _File.readAsBytesSync (dart:io/file_impl.dart:539:18)
# 3      _File.readAsStringSync (dart:io/file_impl.dart:584:18)
# 4      _fixDefererLoader (package:mp_build_tools/build_web.dart:81:41)
# 5      _buildDartJS (package:mp_build_tools/build_web.dart:55:3)
# 6      main (package:mp_build_tools/build_web.dart:13:3)
# 7      main (file:///Users/zby0520/WeChatProjects/awesome_project/scripts/build_web.dart:4:11)
# 8      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:32)
# 9      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)
(base) philos:awesome_project zby0520$ 


有没有微信群或者QQ群交流呢?

添加微信小程序的假页支持

目前 showMPDialog 展示出的对话框,整个页面会随用户从屏幕边缘右划、点按返回键而消失,这不符合 UI 交互预期。
应使用微信小程序的假页辅助开发。

完善 Canvas 功能

  1. 应允许响应 Canvas 上的触摸事件,并回调至 Dart 上下文。
  2. 应允许保存 Canvas 画面至 PNG 文件,并回调至 Dart 中。
  • 开发
  • 完善用例(手写签名板)
  • 编写文档

完善 2D Canvas 文本绘制能力

当前 CustomPaint 不支持文本渲染,也不支持文本测量,使用 CustomPaint 自带的 API 预估不能实现等价的效果,后续看是否可以设计另外的文本绘制 API 并连接到特定平台实现。

  • 设计
  • 开发
  • 用例
  • 文档

Playground 只显示RUN,点击控制台报错

Uncaught SyntaxError: Illegal return statement
DevTools 无法加载源映射: 无法加载https://cdn.jsdelivr.net/npm/[email protected]/min-maps/vs/editor/editor.main.js.map 的内容:加载超时导致加载取消
DevTools 无法加载源映射: 无法加载https://cdn.jsdelivr.net/npm/[email protected]/min-maps/vs/loader.js.map 的内容:加载超时导致加载取消
DevTools 无法加载源映射: 无法加载https://cdn.jsdelivr.net/npm/[email protected]/min-maps/vs/editor/editor.main.nls.js.map 的内容:加载超时导致加载取消
DevTools 无法加载源映射: 无法加载https://cdn.jsdelivr.net/npm/[email protected]/min-maps/vs/editor/editor.main.js.map 的内容:加载超时导致加载取消

image
image

EditableText setState 丢失焦点

EditableText(
controller: _textEditingController,
focusNode: _focusNode,
placeholder: '搜索你想关联的xxxx',
style: TextStyle(
color: YUIColors.textBlack,
fontSize: 14,
),
)

_textEditingController.addListener(() {
  setState(() {});  //输入框有内容时,最右边显示“清除输入按钮”
});

小程序动画性能优化

MPFlutter 播放动画的原理是通过不断地发送 diff_data,驱动小程序使用 setData 的方式,更新 DOM 树。
这种方式在 H5 上没有什么性能问题,但在小程序真机上,一旦超过 2 个动画同时进行时,可出现丢帧等问题。
详见 mpflutter_sample 中的 Animation -> Performance Test 用例。
@PonyCui

WebGL 实现

当前 CustomPaint 提供的是 2D 绘图接口,平台实现也是通过 Canvas 2D API 实现的。
但在实际开发中,确实有需要用到 WebGL,我们需要设计一个新的 MPKit Widget,专用于 WebGL 绘制。
近期计划是支持大部分的 WebGL 1.0 API 使用,中期计划是支持使用 three.js 作为插件,结合 WebGL Widget 实现 3D 绘制及交互。

优化平台扩展开发工作流

当前 MPFlutter 是通过使用 mpflutter_plugin_template 的方式开发平台扩展的,这个工作流对于开发者来说,并不友好。
我们将尝试将平台扩展工作流集成到 mpflutter/mp_build_tools 中,目标是做到开发者在三步以内完成一个扩展开发。

  • 开发
  • 用例
  • 文档

Widget Row不受约束 超出边界

MPScaffold( name: widget.name, body: Container( padding: EdgeInsets.only(bottom: 56, left: 10, right: 10, top: 10), child: SingleChildScrollView( child: Column( children: [ Container( margin: EdgeInsets.only(top: 10), width: 180, child: Row( children: [ Text( 'Voluptate ex occaecat ipsum proident sunt et id pariatur. Amet duis ipsum ipsum eu consequat ad irure reprehenderit incididunt do ut. Quis incididunt ea voluptate cupidatat ex consequat qui ea elit ad qui ut dolor commodo.') ], ), ), ], ), )), );
Uploading image.png…

Intro

Hi can someone please tell me,
That.
What will be the differences between Flutter normal web app and MPFlutter web app?
Are there any performance and initial loading improvements?

打包构建长时间等待无报错信息

执行 dart scripts/build_web.dart,打印构建中,长时间未完成,无报错信息

flutter doctor -v
[✓] Flutter (Channel stable, 2.8.0, on macOS 11.6 20G165 darwin-x64, locale
zh-Hans-CN)
• Flutter version 2.8.0 at /Users/zby0520/flutter/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision cf44000065 (7 days ago), 2021-12-08 14:06:50 -0800
• Engine revision 40a99c5951
• Dart version 2.15.0
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
• Android SDK at /Users/zby0520/Library/Android/sdk
• Platform android-31, build-tools 31.0.0
• ANDROID_SDK_ROOT = /Users/zby0520/Library/Android/sdk
• Java binary at: /Applications/Android
Studio.app/Contents/jre/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
• All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.0)
• Xcode at /Applications/Xcode.app/Contents/Developer
• CocoaPods version 1.10.1

[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)

[✓] IntelliJ IDEA Ultimate Edition (version 2020.1.3)
• IntelliJ at /Applications/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] Connected device (1 available)
• Chrome (web) • chrome • web-javascript • Google Chrome 95.0.4638.69

• No issues found!

模板工程更新依赖时出错

首先感谢作者提供这么好的项目,谢谢!

  • 遇到的问题
    按文档使用命令行,通过 git clone 方式克隆模板工程至目标目录后,执行 ./mpdart pub get ,提示如下:

···
./mpdart pub get
Resolving dependencies... (1.3s)
Because mpflutter_template depends on path_provider >=0.4.0 which requires the Flutter
SDK, version solving failed.

Flutter users should run flutter pub get instead of dart pub get.
···

  • 遇到问题的场景 (微信小程序或 Web 或其它?)

操作系统: ubuntu 20.04
IDE: vscode

  • 重现方法(最好能提供一个 Demo,打包上传至 GitHub)

模板工程更新依赖时出现

  • flutter 的版本
flutter --version
Flutter 2.8.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 77d935af4d (2 周前) • 2021-12-16 08:37:33 -0800
Engine • revision 890a5fca2e
Tools • Dart 2.15.1

dart --version
Dart SDK version: 2.15.1 (stable) (Unknown timestamp) on "linux_x64"

dart2js --version
Dart-to-JavaScript compiler (dart2js) version: 2.15.1

  • mpflutter 的版本( mpcore 的版本)

不确定是不是这样查看

./mpflutter --version
Flutter 2.8.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 77d935af4d (2 周前) • 2021-12-16 08:37:33 -0800
Engine • revision 890a5fca2e
Tools • Dart 2.15.1

支持小程序根据路由表生成实体页面

为了更适合小程序特性,我们应该支持在小程序编译时,自动读取路由表,并根据路由表生成相应的 pages。
当应用需要 navigate 到相应路由页面时,优先使用生成的 page 作跳转。

  • 开发
  • 测试用例
  • 编写文档

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.