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

问题描述 投票:0回答:1

这里是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()方法收到的大小小于width1width1等于width2

如何使paint()收到想要的尺寸?

这里是代码优先:import'package:package:flutter / cupertino.dart';类测试扩展StatelessWidget {@override Widget build(BuildContext context){final width1 = MediaQuery.of(context)....

flutter dart flutter-layout
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.