Flutter 颤振代码在屏幕下方绘制矩形底线-原因(附示例)
为什么下方的直线在屏幕下方,即使我已经计算过了 代码:Flutter 颤振代码在屏幕下方绘制矩形底线-原因(附示例),flutter,flutter-layout,flutter-canvas,Flutter,Flutter Layout,Flutter Canvas,为什么下方的直线在屏幕下方,即使我已经计算过了 代码: 尝试管理您的顶部和底部区域,以便进行凹槽或底部控制: MediaQuery是否能计算出整个屏幕,而不仅仅是小部件的大小。例如,从logicHeight中删除AppBar的大小。@Glen-有办法获得AppBar的大小吗?我还需要考虑MediaQuery中也提供的填充/视图插入)。您可以使用PreferredSize设置appBar大小。其他设置不确定。与其使用Container>FittedBox>SizedBox>CustomPaint
尝试管理您的顶部和底部区域,以便进行凹槽或底部控制:
MediaQuery是否能计算出整个屏幕,而不仅仅是小部件的大小。例如,从logicHeight中删除AppBar的大小。@Glen-有办法获得AppBar的大小吗?我还需要考虑MediaQuery中也提供的填充/视图插入)。您可以使用PreferredSize设置appBar大小。其他设置不确定。与其使用
Container>FittedBox>SizedBox>CustomPaint
不如简单地使用Container>CustomPaint>SizedBox.expand
?只是基于我看到的谷歌视频和本文()-但我只是在学习-关键点是我意识到我不明白到底发生了什么,所以粘贴了这个问题。谢谢-但是设置我使用的逻辑高度,我需要以不同的方式动态计算?我是否需要完成MediaQuery的“大小”并减去其“填充”(我看到也有ViewInset和viewPadding?)或者是否有更好的方法动态获取实际剩余大小?LayoutBuilder!布局生成器!再也不要调用MediaQuery查询大小@RandalSchwartz——我想我的具体问题是如何计算这种情况下的正确尺寸(即这个问题)。[然而,注意,与此问题分开,向前推进时可能应使用另一种方法]也许应接受此答案,作为一般性问题的答案,重新解释为什么会发生这种情况,但不应尝试找到“修复”,因为不应尝试获取画布布局的特定屏幕或小部件大小?
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
),
body: MainScreen(),
),
);
}
}
class MainScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
var mq = MediaQuery.of(context);
final logicWidth = mq.size.width;
final logicHeight = mq.size.height;
return
SizedBox.expand(
child: Container(
color: Colors.blueGrey,
child: FittedBox(
fit: BoxFit.none, // Can more to "contain" after
alignment: Alignment.topLeft,
child: SizedBox(
width: logicWidth,
height: logicHeight,
child: CustomPaint(painter: GCPainter(),),
))));
}
}
class GCPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint1 = Paint()..color = Colors.red..style = PaintingStyle.stroke..strokeWidth = 50;
Rect rect = Rect.fromLTWH(0, 0, size.width, size.height);
canvas.drawRect(rect, paint1);
}
@override
bool shouldRepaint(GCPainter oldDelegate) => false;
@override
bool shouldRebuildSemantics(GCPainter oldDelegate) => false;
}
SafeArea(
child: Container(),
top: true,
bottom: true,
)