小编Rém*_*let的帖子

在抖动中预加载图像资产

我正在建立一个扑朔迷离的游戏。我有大约130-150mo的图片。而且其中一些必须预先加载,否则用户体验会不流畅。

我自己发现了一种预加载图像的方法:

final asset = new ExactAssetImage(assetPath);
final stream = asset.resolve(createLocalImageConfiguration(context));
Run Code Online (Sandbox Code Playgroud)

虽然这样做有效,但存在一个巨大的缺点:内存成本大约是实际图像大小的6倍。

结果呢?我的应用程序仅通过加载图像就消耗了800 MO的内存,这太疯狂了(特别是考虑到它是一个相对简单的应用程序)。实际上,公羊的消耗是如此之大,以至于我丢失了很多框架。

简而言之:预加载图像的最理想方法是什么?有什么我想念的吗?

memory-leaks dart flutter

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

如何使用与 T 不同类型的 Proxy<T> 作为参数?

我处于一种情况,我想使用Proxy, 在类列表之间“负载平衡”。

我想做的一个简单的例子如下:

class Foo {
    constructor(private msg: string) {}

    foo() {
        console.log(this.msg);
    }
}

// @ts-ignore
const proxy: Foo = new Proxy([new Foo('foo'), new Foo('bar')], {
    get: (o, key) => {
        const client = o[Math.floor(Math.random() * o.length)];
        console.log(client, key);
        return client[key];
    },
});
proxy.foo();
Run Code Online (Sandbox Code Playgroud)

这“有效”。问题是我正在使用打字稿。而且,由于Proxy类型定义,我们不能做类似的事情

new Proxy<Foo>([new Foo(), new Foo()], handler)
Run Code Online (Sandbox Code Playgroud)

因为它会产生以下错误:

“Foo[]”类型的参数不可分配给“Foo”类型的参数。

有没有办法实现这一点;不丢失类型检查?

javascript typescript ecmascript-6

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

避免在BLoC和RxDart中重复

希望我能说清楚。

在观看视频和教程之后,我发现这种方式使一些小部件可以将数据输入到块(valueSetting)中,而另一些小部件可以将数据输入(值)中。

我要问的是,是否有更好的方法(必须)。我想避免在小部件之间只共享1个实际值的4个变量。

import 'dart:async';

import 'package:rxdart/subjects.dart';

class BlocExample {
  final _valueSettingController = StreamController<bool>();

  // object use by widget to push data
  Sink<bool> get valueSetting => _valueSettingController.sink;

  final _value = BehaviorSubject<bool>(seedValue: false);

  // object used by widget to get data
  Stream<bool> get value => _value.stream;

  BlocExample() {
    _valueSettingController.stream.listen(_value.add);
  }

  void dispose() {
    _value.close();
    _valueSettingController.close();
  }
}
Run Code Online (Sandbox Code Playgroud)

dart flutter

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

嵌套PageView:当内部PageView到达末尾时改变外部PageView

考虑一个PageView用法,其中我们有一个PageView在另一个里面:

PageView(
  children: [
    Container(color: Colors.red),
    Column(
      children: [
        Text('Title'),
        PageView(
          children: [
            Container(color: Colors.green),
            Container(color: Colors.yellow),
          ],
        ),
      ],
    )
  ],
);
Run Code Online (Sandbox Code Playgroud)

这种架构将允许我们在外部PageView和内部PageView之间转换。但是一旦我们到达内部的PageView,我们就无法再出去了。

这是一个展示它的gif:

在此处输入图片说明

在这样的架构中,我们不能将两个PageView都“合并”为一个,因为内部的PageView不会填满屏幕

我们如何在允许从两个PageView转换而不会卡住的情况下获得类似的结果?

flutter

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

渐进式网络应用程序和AngularDart

我目前正在为我的下一个项目寻找一个Web框架,由于某些原因,我对角感兴趣.

但与此同时,我希望我的webapp遵循PWA指南.

我搜索了很多,但我还没有在angulardart中找到PWA的例子.我看到了JS对应的一些例子或者发现了pwadart包,但是我缺乏angulardart框架的知识来知道它是否可能在dart中.

那么,是否有可能在angulardart中制作PWA?

dart angular-dart angular

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

为什么`if(var = null)`在dart中编译?

我最近遇到了这个问题,如何解决Flutter中的“断言失败:布尔表达式不能为null”异常

问题出在哪里,应该是被视为有效的无效代码。

这段代码可以总结为:

int stuff;
if (stuff = null) { // = instead of ==
}
Run Code Online (Sandbox Code Playgroud)

但是为什么要编译此代码?如下将不会。

int stuff;
if (stuff = 42) {
}
Run Code Online (Sandbox Code Playgroud)

伴随以下编译错误:

条件必须具有静态的“布尔”类型。

因此,我可能会出于一致性考虑if (stuff = null)而产生相同的错误。

dart

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

在调试和生产模式之间切换

在开发过程中调试应用程序的一种快速方法是编写如下语句:

print($data)
Run Code Online (Sandbox Code Playgroud)

有没有办法在切换到生产模式时停止打印,这样它就不会影响应用程序的性能?

例如,布尔值作为开关?

dart flutter

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

`TypeMatcher` 与 `throwsA` 一起使用时不起作用

我的应用程序中有以下代码:

expect(() => dataSource.getLastPost(), throwsA(TypeMatcher<CacheException>()));
Run Code Online (Sandbox Code Playgroud)

这导致以下错误

Expected: throws <Instance of 'TypeMatcher<CacheException>'>
  Actual: <Closure: () => Future<PostModel>>
   Which: threw <Instance of 'CacheException'>
Run Code Online (Sandbox Code Playgroud)

如果我删除包装 CacheException 的 TypeMatcher ...

expect(() => dataSource.getLastPost(), throwsA(CacheException()));
Run Code Online (Sandbox Code Playgroud)

然后它仍然给出类似的错误

Expected: throws <Instance of 'CacheException'>
  Actual: <Closure: () => Future<PostModel>>
   Which: threw <Instance of 'CacheException'>
Run Code Online (Sandbox Code Playgroud)

我想知道我做错了什么?无论哪种方式,很明显我们期待 CacheException 并且正在抛出 CacheException。那为什么expect测试没有通过呢?

unit-testing exception dart flutter

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

根据Dart / Flutter中的过滤器更新流

我有一个BLoC,它使用原始输入Stream(产生JSON对象列表)并将其转换为使用的可用对象StreamTransformer。UI将显示该列表。用户可以应用过滤器(本身是流到BLoC中的流),以便BLoC用相应的where(...)语句更新输入流转换器。

问题是:当过滤器更改时,UI不会更新,因为输出流取决于JSON输入流(而不是过滤器流)的事件。我的假设是我需要创建自己的流,将输入事件和过滤器事件都转发到该流中,或者我需要在转换后的输入流上重复最后一个事件,以便转换器有机会将其拾取。如何正确完成?一个例子会很有帮助!

stream dart flutter

3
推荐指数
1
解决办法
1774
查看次数

如何热装状态字段?

如何State在Flutter中热重载子类的字段?

我知道在热重装期间不考虑修改字段的初始值,并且可以对它们使用热重装。但这非常缓慢。

有什么办法可以简化这个过程?

典型的用例是动画,尤其是AnimationController。由于它存储在State字段中,但我们通常希望在其持续时间内进行迭代。例:

class MyAnim extends StatefulWidget {
  @override
  _MyAnimState createState() => _MyAnimState();
}

class _MyAnimState extends State<MyAnim> with SingleTickerProviderStateMixin {
  AnimationController animationController;

  @override
  void initState() {
    animationController =
        AnimationController(vsync: this, duration: const Duration(seconds: 1));
    super.initState();
  }

  @override
  void dispose() {
    animationController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
Run Code Online (Sandbox Code Playgroud)

flutter

3
推荐指数
1
解决办法
153
查看次数