我有一个文本文件(.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.
值得注意的是,我正试图通过单元测试来做到这一点.关于如何正确地做到这一点的任何想法?谢谢!
我正在渲染一组图块网格,其中每个图块都是从图像中提取的。为了渲染它,我在我自己的实现中渲染所有内容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,所以我基本上无法返回false,bool shouldRepaint(MyPainter old)因为它需要重新绘制以呈现新的偏移和缩放。
所以,我的问题是:解决这个问题的更有效的方法是什么?
我尝试了另一种方法:
var separateRenderTree = RepaintBoundary(
child: OverflowBox(
child: CustomPaint(
painter: MyPainter(),
),
),
);
return Transform( …Run Code Online (Sandbox Code Playgroud)