构建 MyBrick 时抛出以下 _TypeError:类型 'int' 不是类型 'double' 的子类型

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

我正在这里编写一个 flutter 视频游戏。我尝试在网络上测试它,它工作正常,但在我的物理设备(手机)上执行时,brick.dart 文件遇到错误。

作为初学者,我希望得到你们的帮助:

import 'package:flutter/material.dart';

class MyBrick extends StatelessWidget {
  final x;
  final y;

  MyBrick({this.x, this.y});

  @override
  Widget build(BuildContext context) {
    return Container(
      alignment: Alignment(x, y),
      child: ClipRRect(
        borderRadius: BorderRadius.circular(10),
        child: Container(
          color: Colors.white,
          height: 20,
          width: MediaQuery.of(context).size.width / 5,
        ),
      ),
    );
  }
}

flutter integer double
2个回答
0
投票

flutter

Alignment(double x, double y)
小部件需要双倍。由于您将
x
y
传递给您的小部件而不指定它们的类型,因此如果您传递值
x = 1
y = 3
此对齐小部件将引发该错误。更新您的代码以包含您的字段类型。这将迫使您传递适当类型的
x
y
,否则您将收到 linter 错误:

import 'package:flutter/material.dart';

class MyBrick extends StatelessWidget {
  final double x; // type your fields
  final double y; // type your fields

  MyBrick({this.x, this.y});

  @override
  Widget build(BuildContext context) {
    return Container(
      alignment: Alignment(x, y), // accepts only doubles so if you pass an int value, you will get that error
      child: ClipRRect(
        borderRadius: BorderRadius.circular(10),
        child: Container(
          color: Colors.white,
          height: 20,
          width: MediaQuery.of(context).size.width / 5,
        ),
      ),
    );
  }
}

0
投票

因为 Alignment 小部件需要双精度值,但您传递的是 int 值。

alignment: Alignment(x.toDouble(), y.toDouble()), // convert int to double
© www.soinside.com 2019 - 2024. All rights reserved.