被调用的构造函数不是 const 构造函数

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

我在创建列小部件时收到错误消息,提示“正在调用的构造函数不是

const
构造函数。”创建列小部件本身很困难,

    import 'package:flutter/material.dart';

    void main() {
      runApp(const MyApp());
    }

    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'My First Flutter App',
            theme: ThemeData(
              scaffoldBackgroundColor: Colors.white,
            ),
            home: const WelcomeScreen());
      }
    }

    class WelcomeScreen extends StatelessWidget {
      const WelcomeScreen({Key? key}) : super(key: key);

      @override
      Widget build(BuildContext context) {
        return const Scaffold(

          body: Column(
              children: <Widget>[
                Text("Login"),
              ]
            )
          );
        }}

flutter dart flutter-layout
5个回答
2
投票

错误发生在脚手架小部件级别。

只需删除脚手架之前的const即可。然后在列小部件的子项之前添加 const 关键字。

这就是你的代码应该是这样的

    import 'package:flutter/material.dart';

    void main() {
      runApp(const MyApp());
    }

    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'My First Flutter App',
            theme: ThemeData(
              scaffoldBackgroundColor: Colors.white,
            ),
            home: const WelcomeScreen());
      }
    }

    class WelcomeScreen extends StatelessWidget {
      const WelcomeScreen({Key? key}) : super(key: key);

      @override
      Widget build(BuildContext context) {
        return Scaffold(

          body: Column(
              children: const <Widget>[
                Text("Login"),
                ...
              ]
            )
          );
        }}


1
投票

只需从

const
小部件
中删除 
Scaffold


1
投票

Column
是一个非常量构造函数

 Column({
    Key? key,

您可以使用

const
,其中所有内容都可用作编译时间常数。在这种情况下,
Column
打破了条件。您可以在孩子之前使用
const
,现在可以使用
Text

class WelcomeScreen extends StatelessWidget {
  const WelcomeScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(children: const <Widget>[
        Text("Login"),
      ]),
    );
  }
}

我会鼓励您更多地了解

const
,您可以检查这个问题指南


1
投票

const
小部件中删除
Scaffold
,它就可以正常工作了。但是会有另一个警告告诉您
Column
小部件没有
const

要解决此问题,您可以将

const
放在
<Widget>
前面,或将
const
放在
children of columns

前面

0
投票

删除 Widget 上方的

const
关键字。

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