小编Jel*_*lio的帖子

颤动 - 从资产中读取文本文件

我有一个文本文件(.txt),我想成为一个资产,我可以在以后扫描.

在pubspec.yaml中,我确保:

flutter:
  assets:
    - res/my_file.txt
Run Code Online (Sandbox Code Playgroud)

存在.该文件位于res/我创建的文件夹中,与lib/android/和的级别相同ios/

我正在尝试从自定义类中读取文件,而不是小部件.

根据文档,我将使用此导入:

import 'package:flutter/services.dart' show rootBundle;
Run Code Online (Sandbox Code Playgroud)

并开始阅读:

/// Assumes the given path is a text-file-asset.
Future<String> getFileData(String path) async {
  return await rootBundle.loadString(path);
}
Run Code Online (Sandbox Code Playgroud)

要获得实际数据,请执行以下操作:

String data = await getFileData(fileName);
Run Code Online (Sandbox Code Playgroud)

但是,当我使用fileNamelike时'assets/res/my_file.txt',我收到一个错误:Unable to load asset: assets/res/my_file.txt.

值得注意的是,我正试图通过单元测试来做到这一点.关于如何正确地做到这一点的任何想法?谢谢!

dart flutter

25
推荐指数
3
解决办法
2万
查看次数

Flutter - CustomPaint 更高效的平移和缩放

我正在渲染一组图块网格,其中每个图块都是从图像中提取的。为了渲染它,我在我自己的实现中渲染所有内容CustomPainter(因为网格可能会变得相当大)。为了支持平移和缩放功能,我选择将偏移和缩放作为画布绘画的一部分。

这是我的自定义绘画实现的一部分。

  @override
  void paint(Canvas canvas, Size size) {
    // With the new canvas size, we may have new constraints on min/max offset/scale.
    zoom.adjust(
      containerSize: size,
      contentSize: Size(
        (cellWidth * columnCount).toDouble(),
        (cellHeight * rowCount).toDouble(),
      ),
    );

    canvas.save();
    canvas.translate(zoom.offset.dx, zoom.offset.dy);
    canvas.scale(zoom.scale);

    // Now, draw the background image and grids.
Run Code Online (Sandbox Code Playgroud)

虽然这是有效的,但在渲染足够多的单元格后,性能可能会开始下降(例如,100x100 的网格会导致GestureDetector更新缩放值的每个回调出现一些滞后)。而且,因为偏移和缩放是在 中完成的CustomPaint,所以我基本上无法返回falsebool shouldRepaint(MyPainter old)因为它需要重新绘制以呈现新的偏移和缩放。

所以,我的问题是:解决这个问题的更有效的方法是什么?

我尝试了另一种方法:

var separateRenderTree = RepaintBoundary(
  child: OverflowBox(
    child: CustomPaint(
      painter: MyPainter(),
    ),
  ),
);
return Transform( …
Run Code Online (Sandbox Code Playgroud)

performance flutter

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

标签 统计

flutter ×2

dart ×1

performance ×1