小编hun*_*ter的帖子

Dart/Flutter 有弱引用的概念吗?

我正处于学习DartFlutter的早期阶段。我正在研究如何实现eventbus,它工作正常,但我注意到小部件(和/或它们的关联状态)持有对(全局) eventbus 的强引用,导致内存泄漏。解决方案是在小部件状态的 dispose 方法中取消订阅,但我想知道是否有更好的方法(我来自 Swift,它允许将变量声明为“弱”)。

编辑

我最终将状态子类化如下......还有更好的建议吗?

abstract class CustomState<T extends StatefulWidget> extends State {

  List<StreamSubscription> eventSubscriptions = [];

  void subscribeToEvent(Object eventClass, Function callback) {
    StreamSubscription subscription = eventBus.on(eventClass).listen(callback);
    eventSubscriptions.add(subscription);
  }

  void dispose() {
    super.dispose();
    eventSubscriptions.forEach((subscription) => subscription.cancel());
    eventSubscriptions = null;
  }
}

class MyEvent {
  String text;
  MyEvent(this.text);
}

class _MyHomePageState extends CustomState<MyHomePage> {

  @override
  void initState() {
    super.initState();
    subscribeToEvent(MyEvent, onEventFired);
  }

  void onEventFired(event) {
    print('event fired:  ${event.runtimeType}  ${event.text}');
  }
}
Run Code Online (Sandbox Code Playgroud)

memory-leaks weak-references circular-reference dart flutter

7
推荐指数
2
解决办法
3693
查看次数

将 Flutter 小部件转换/平移为其宽度的负 50%

假设我们有一个空的父部件(一个容器),没有大小,并且绝对定位(在它自己的父部件内)在上/左(x/y)坐标处。然后我们将一个子部件(具有可变大小,事先未知)放置在父部件中。有没有办法将子项定位在其自身宽度的-50%处,使得子项的水平中心出现在其父项的x坐标处?我不想使用全局键,因为会有数百个实例。我尝试过 Transform.translate (只接受已知的 x 偏移量)、FractionalOffsets、FractionallySizedBoxes、Alignments 等,但似乎没有任何效果可以实现我想要实现的目标。有谁知道解决方案吗?

编辑:展示目标的图像 在此输入图像描述

dart flutter flutter-layout

7
推荐指数
1
解决办法
6992
查看次数

Android 的 Sensor.TYPE_ROTATION_VECTOR 的 iOS 等效值

我正在开发一个跨平台增强现实库,我的 Android 代码运行良好,但我在 iOS 上遇到了问题。我正在使用 Android 的TYPE_ROTATION_VECTOR传感器,它会生成SensorEvent。此事件返回一个包含 5 个值的数组(如此处所述,这些值用于生成旋转矩阵(使用方法)。我只对前 4 个值感兴趣。它们被描述为:

\n
\n

SensorEvent.values[0] x *sin(\xce\xb8/2)

\n

SensorEvent.values[1] y *sin(\xce\xb8/2)

\n

SensorEvent.values[2] z *sin(\xce\xb8/2)

\n

SensorEvent.values[3] cos(\xce\xb8/2)

\n
\n

上述链接继续说

\n
\n

旋转矢量传感器 (TYPE_ROTATION_VECTOR) 以单位四元数的形式提供设备相对于地球坐标系的方向。具体来说,旋转矢量将设备的方向表示为角度和轴的组合,其中设备绕轴 < x , y\n, z > 旋转了角度 \xce\xb8 。旋转向量的前四个元素等于单位四元数 x sin(\xce\xb8/2)、y sin(\xce\xb8/2)、z\n*sin(\xce\xb8 /2)>. 旋转向量的元素是无单位的。

\n
\n

iOS 中的 CoreMotion 提供了四元数读取,但它似乎与 Android 的 TYPE_ROTATION_VECTOR 值没有关联(至少不是直接关联)。我也尝试过 deviceMotionattitude.rotationMatrix直接尝试过deviceMotion的值,但没有用。

\n

所以我的问题是:在iOS中,如何获得相当于Android的TYPE_ROTATION_VECTOR的传感器值?

\n

android augmented-reality ios android-sensors sensors

6
推荐指数
0
解决办法
337
查看次数

如何在 Flutter AnimatedSize 小部件中侦听调整大小事件

Flutter 的AnimatedSize类根据其子项的大小对其大小进行动画处理。我需要知道如何监听大小的变化,最好是在调整大小完成后。

在我的用例中,这个小部件包含在ListView 中,但我似乎只能使用NotificationListener来监听滚动事件(能够监听可滚动高度的变化可以解决我的问题)。

或者,能够在诸如Column之类的小部件更改其子项数量时进行侦听也可以。

flutter

5
推荐指数
3
解决办法
3239
查看次数

如何使用 FlutterDriver 以编程方式查找 iOS 后退按钮

我正在使用FlutterDriverFlutter包执行集成测试。

平台为Android时,脚手架中使用AppBar,平台为iOS时,使用CupertinoNavigationBar

在Android上测试时,我可以找到带有以下代码的后退按钮

await driver.tap(find.byTooltip('Back'));
Run Code Online (Sandbox Code Playgroud)

但是,这在 iOS 上失败了。由于按钮是自动生成的,我无法以编程方式添加标签。关于如何在 iOS 上选择它的任何建议?跨平台解决方案的奖励积分。

另外,对于模拟 android 设备后退按钮点击(在应用程序之外)有什么建议吗?

flutter flutter-test

4
推荐指数
1
解决办法
1061
查看次数

Flutter 的计算函数的上下文/范围是什么

我正在学习 Flutter 的计算功能。我的理解是,它是为了将计算量大的工作卸载到另一个线程,以免阻塞 UI 线程。我遇到了一些我不太理解的行为。考虑下面的应用程序。

import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';

void main() => runApp(new MyApp());

class StringValues {
  static String foo = 'Foo';
  static String bar;
}

String _calculate(String value) {
  return value + ' ' + (StringValues.foo ?? 'undefined') + ' ' + (StringValues.bar ?? 'undefined');
}

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  } …
Run Code Online (Sandbox Code Playgroud)

flutter

2
推荐指数
1
解决办法
1235
查看次数