flutter - paint()方法中的Size属性不同于CustomPainter中指定的大小

标签 flutter dart flutter-layout

首先是code:

import 'package:flutter/cupertino.dart';

class Test extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final width1 = MediaQuery.of(context).size.width;
    print(width1);
    return GestureDetector(
        child: Container(
      height: width1,
      width: width1,
      child: Stack(
        alignment: AlignmentDirectional.center,
        children: <Widget>[
          Child1(),
          Child2(),
          Child3(),
          //...
        ],
      ),
    ));
  }
}

class Child1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final width2 = MediaQuery.of(context).size.width;
    print(width2);
    return CustomPaint(
      painter: Painter1(),
      size: MediaQuery.of(context).size,
      //even trying to impose a child's width didn't work
      //      child:Container(
      //        width: width2,
      //          height: width2,
      //      )
    );
  }
}

class Painter1 extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    final width3 = size.width;
    print(width3);//different than width1 and width2 !!
  }
//...
}

我将小部件Test()放置在占据整个屏幕的Column小部件中,而我期望的是width1=width2=width3(即我期望paint()方法接收的大小与为相应CustomPaint类指定的大小相同)。

当我将此Test()小部件直接放置在Column中时,可以实现预期的行为。

但是,当我用Test()包装Padding()时,然后paint()方法接收到小于width1的大小(并且width1保持等于width2)

如何使paint()接收想要的大小?

最佳答案

当用Padding()包装Test()时,Canvas会变小,因为Padding会占用剩余的空间。

width1 and width2 stays the same because its the size from MediaQuery, which is your screen size.



我认为您在paint()中获得的尺寸是您的width1-填充,如果没有错的话。

尝试对齐容器的子级,而不添加填充。

关于flutter - paint()方法中的Size属性不同于CustomPainter中指定的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999140/

相关文章:

android-studio - Flutter:无法编辑pubspec.yml文件,尝试编辑pubspec.yml文件时显示 “File is read-only”弹出警告

javascript - 将 JavaScript 数字转换为 Dart double

html - 使用 Dart 检查 HTML5 API 在浏览器中是否可用

flutter - 自定义 FlexibleSpaceBar 小部件

flutter - 如何强制行填充 flutter 中堆栈内定位列中的水平空间?

flutter - 出现错误——类型 'SocketException' 不是类型 'widget' 的子类型

dart - 在 Column Flutter 中居中展开的 ListView

android - native Checkout Paypal 按钮未在 android 中为发布 apk 呈现

timer - 如何跟踪Flutter中的功能?

dart - Paypal 订单v2创建响应:请求的操作无法执行,语义上不正确或业务验证失败