如何customPaint()在 Flutter 中绘制图像以指定其大小和旋转?通常只drawImage()绘制图像,其尺寸是以像素为单位的尺寸。例如,以 40 x 40 的尺寸绘制 40x40 像素的图像。如何绘制相同的图像,但例如大小为 80x80 且旋转为 120°?我试过了,drawAtlas但我在网上找不到任何东西。
这是我必须绘制的代码。(它在屏幕的右上角绘制了一个 20x20 的矩形)。
class ParticlePainter extends CustomPainter {
final List<GameObject> objects;
@override
void paint(Canvas canvas, Size size) {
canvas.drawRect(
Rect.fromCenter(
height: 20,
width: 20,
center: Offset(0.0, 0.0)),
Paint()
..color = Colors.red
..blendMode = BlendMode.darken);
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
ParticlePainter(this.objects);
}
Run Code Online (Sandbox Code Playgroud)
为了获取图像,我使用了此视频中的代码:Flutter 中的自定义绘制
Future<Image> _loadImage(File file) async{
final data = await file.readAsBytesSync();
return await decodeImageFromList(data);
}
Run Code Online (Sandbox Code Playgroud) 我有这个小部件:
TextFormField(
controller: _activityName,
autocorrect: true,
textAlign: TextAlign.start,
decoration: InputDecoration(
contentPadding = EdgeInsets.zero,
border: UnderlineInputBorder(
),
hintText: ""),
maxLines: 1,
cursorColor: Colors.white,
),
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我明确地将填充设置为 0,正如这个答案所说: 如何从 TextField 中删除内容填充?
但我得到的结果是这样的:
正如您在 Text MyActivity 下看到的那样,有很多填充,但我无法摆脱它。它看起来像一个错误,但我不确定:
这是颤振医生:
Flutter (Channel stable, v1.12.13+hotfix.5, on Microsoft Windows [Version 10.0.18362.295], locale en-US)
• Flutter version 1.12.13+hotfix.5 %Flutter path%
• Framework revision 27321ebbad (3 weeks ago), 2019-12-10 18:15:01 -0800
• Engine revision 2994f7e1e6
• Dart version 2.7.0
Run Code Online (Sandbox Code Playgroud) 我有这个Future函数,需要花费很多时间来加载,并且基本上像视频渲染一样工作(它执行一些步骤100次)。有什么办法可以在小部件中显示进度?我尝试在MyApp()中设置一个全局变量,例如,一个与框架相对应的int并通过setState()我尝试重建该窗口小部件,但是它不起作用,应用程序冻结并且该窗口小部件没有更新。
这是功能:
int _progress = 0;
Future _cycleGame() async {
await game.cycle((int value) {
print(value);
setState(() {
_progress = value;
});
}).whenComplete(() {
setState(() {});
});
}
Run Code Online (Sandbox Code Playgroud)
该game.cycle()是个循环的50倍将来的功能。
game.cycle()函数供参考:
Future cycle(Function cBack) async {
for (int i in Range(50)) {
if (!shouldFinish) {
cBack(i);
///Does things.
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只是在屏幕上使用文本作为_progress值。该vlaue会正确打印(每tot时间一次),但是_progress在功能末尾显示唯一更新的文本。我究竟做错了什么?
我尝试使用谷歌搜索方法,但没有发现任何问题。这可能吗?
编辑1。使用RémiRousselet提供的答案,我仍然无法使代码正常工作。仅在流结束时才更新小部件。
这是代码。
import 'dart:io';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: …Run Code Online (Sandbox Code Playgroud)