标签: flutter-engine

使用 FlutterFragment 时使用 Flutter Engine 重置 FlutterFragment 内容

我在我的 Android 应用程序中使用 Flutter 模块。我在我的 Activity 中定义了一个处于预热状态的全局 Flutter 引擎,并在特定场景需要时将其附加到 FlutterFragment。下面是触发 onCreate()on Activity 时调用的预热引擎。

void setupFlutterEngine(){
        FlutterEngine flutterEngine=new FlutterEngine(getApplicationContext());

//        Start executing Dart code in the FlutterEngine.
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );

//      Cache the pre-warmed FlutterEngine to be used later by FlutterFragment.
        FlutterEngineCache
                .getInstance()
                .put(FLUTTER_ENGINE_CACHE_TAG, flutterEngine);

    }
Run Code Online (Sandbox Code Playgroud)

一切正常,我正在实例化缓存引擎并将其添加到我的 FlutterFragment 中,如下所示:

FlutterEngine flutterEngine=FlutterEngineCache.getInstance().get(FLUTTER_ENGINE_CACHE_TAG);

flutterMethodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), methodChannelTag);

flutterMethodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
            @Override
            public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
                
            }
        });

        GeneratedPluginRegistrant.registerWith(flutterEngine); 

flutterFragment = FlutterFragment
                .withCachedEngine(FLUTTER_ENGINE_CACHE_TAG)
                .renderMode(RenderMode.surface)
                .transparencyMode(TransparencyMode.opaque)
                .shouldAttachEngineToActivity(true)
                .build();
Run Code Online (Sandbox Code Playgroud)

我想在片段被销毁时完成 …

android dart flutter flutter-layout flutter-engine

5
推荐指数
0
解决办法
372
查看次数

Android Flutter 使用缓存引擎启动自定义 Activity

我正在集成FlutterActivity到本机 Android 应用程序。我有CustomFlutterActivity它继承自FlutterActivity,我想使用缓存启动它FlutterEngine

这是文档中有关如何执行此操作的代码:

startActivity(
      FlutterActivity
        .withNewEngine()
        .build(currentActivity)
      );
Run Code Online (Sandbox Code Playgroud)

我想要实现的是使用我的缓存引擎启动我的引擎(而不是文档中所说的CustomFlutterActivity通用引擎)FlutterActivity

android caching kotlin flutter flutter-engine

5
推荐指数
1
解决办法
1596
查看次数

我可以使用 Flutter FFI 获得 Flutter 表面纹理吗?

这是 Flutter 插件代码的一部分,该插件使用 Flutter 纹理通过 OpenGL 渲染某些内容

private FlutterVideoPlugin(Registrar registrar, MethodChannel channel) {
    this.registrar = registrar;
    this.channel = channel;
    this.textures = registrar.textures();
}

@Override
public void onMethodCall(MethodCall call, Result notSafeResult) {
    final AnyThreadResult result = new AnyThreadResult(notSafeResult);
    if (call.method.equals("createVideoRenderer")) {
        TextureRegistry.SurfaceTextureEntry entry = textures.createSurfaceTexture();
        //do anything with the texture
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用 Flutter methodCall。

是否可以用 C++ 中的 FFI 做同样的事情?我不想依赖onMethodCall,它必须是 FFI 或 Flutter 方法调用,因为我认为 FFI 以不同的方式做所有事情,类似的事情。

然而,由于 Flutter 引擎,特别是纹理部分是用 Java 编写的,看起来我需要一些 java 代码。问题是 FFI 和 java 不能混合。看起来我要么必须使用onMethodCall我的应用程序中的所有内容,要么使用 FFI,但 FFI …

c++ dart flutter flutter-engine

5
推荐指数
1
解决办法
776
查看次数

iOS部分使用bluetooth-central后台执行模式时如何暂停Flutter在后台运行

我的应用程序使用CoreBluetooth 状态恢复和保存 (SRP)连接到 BLE 配件,并使用bluetooth-central后台执行模式。这意味着用 Swift 编写的应用程序的本机部分即使在应用程序处于后台时也可以连续接收 HR 样本。然而,我还可以看到,尽管应用程序处于paused生命周期状态,但应用程序的 Flutter 部分仍在运行。

我做了一个简单的实验,并在使用不使用Core Bluetooth SRP时在 Flutter 中启动计时器。

  • 不使用 SRP 时,计时器会在 20 秒后停止打印到日志中
  • 使用 SRP 时,只要 BLE 配件发送 HR 样本,定时器就会无限期地运行

我想要的是保持典型的Flutter 行为,但继续在本机端使用 SRP。

  1. 当应用程序进入暂停状态时,Flutter 的哪一部分负责停止“执行”?
  2. 尽管 SRP 使应用程序保持唤醒状态(由于使用bluetooth-central模式和接收连续的 HR 更新),Flutter 是否可以暂停?
  3. 有没有办法让 Flutter 引擎以paused编程方式声明?
  4. 如果没有,您是否看到任何其他方法来保持典型的Flutter 引擎/ViewController 行为?

ios core-bluetooth flutter flutter-engine

5
推荐指数
1
解决办法
531
查看次数