首页 > 解决方案 > 为什么我的变量在 StatelessWidget 中成功更改,即使我收到警告

问题描述

这是警告:

此类(或此类继承自的类)被标记为“@immutable”,但其一个或多个实例字段不是最终的:MyWidget.myVar

控制台告诉我该变量必须是最终的。我怀疑如果我想更改变量,我应该将我的小部件更改为有状态的,但对我来说这没有意义,因为代码按预期工作。当我更改变量时,我不想更改屏幕上的任何内容,我只想稍后使用它。

我在做什么是错的?如果没有,我该如何禁用此警告?

import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      home: MyWidget(),
    ),
  );
}

class MyWidget extends StatelessWidget {
  String myVar;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          MaterialButton(
            child: Text('Click me do change variable'),
            onPressed: () {
              myVar = 'Clicked!';
            },
          ),
          MaterialButton(
            child: Text('Click me to print the variable'),
            onPressed: () {
              print(myVar);
            },
          ),
        ],
      ),
    );
  }
}

标签: flutterdart

解决方案


您收到警告是因为扩展 StatelessWidget 的类中的所有字段都应该是最终的。

final通过在声明之前添加关键字来修复警告,type如下所示:

final String myVar;

从文档中。

StatelessWidget 类。不需要可变状态的小部件。

https://docs.flutter.io/flutter/widgets/StatelessWidget-class.html

我希望这回答了你的问题


推荐阅读