首页 > 解决方案 > 颤振不变性

问题描述

我正在使用有状态小部件,并且必须声明最终变量才能从另一个页面接收数据。但是,我声明的 int 变量之一必须在同一页面上再次更改,因此我删除了 Final 并且代码工作正常,但它警告我:

“信息:这个类(或这个类继承自的类)被标记为'@immutable',但它的一个或多个实例字段不是最终的”。

我需要从不同的页面发送我的计数值

   Navigator.of(context)
                  .push(MaterialPageRoute(builder: (BuildContext context) {
                return EditScheduleScreen(

                  count: widget.count + 1,

                );
              }));

但是这个计数值在我发送到的页面中再次更新:

          widget.count--;

因此我必须在没有 final 的情况下声明 int 值:

class EditScheduleScreen extends StatefulWidget {

  int count;

  EditScheduleScreen({
    Key key,  
    this.count,
  }) : super(key: key);

  @override
  _EditScheduleScreenState createState() => _EditScheduleScreenState();
}

这给了我警告。

这是我应该担心的事情,还是有办法改变这个 int 的值并保持它的最终状态(因为它需要从不同的页面接收)?

标签: flutterflutter-layout

解决方案


我正在使用有状态小部件,并且必须声明最终变量才能从另一个页面接收数据。但是,我声明的 int 变量之一必须在同一页面上再次更改,因此我删除了 Final 并且代码工作正常,但它警告我。

它不会破坏您的代码,但最好不要尽可能避免警告。您可以将值分配给count状态类中的新变量,然后简单地使countfinal 或 const 适合您。

所以以下面的方式做事的好处是它会首先删除警告,你也可以改变值。

import 'package:flutter/material.dart';

class EditScheduleScreen extends StatefulWidget {
  final int count;

  EditScheduleScreen({
    Key key,
    this.count,
  }) : super(key: key);

  @override
  _EditScheduleScreenState createState() => _EditScheduleScreenState();
}

class _EditScheduleScreenState extends State<EditScheduleScreen> {
  // Creating a variable to receive the count's value from the stateful class
  int stateCount;

  @override
  void initState() {
    super.initState();
    // Passing the count's value to stateCount variable
    stateCount = widget.count;
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: FlatButton(
          onPressed: () {
            Navigator.of(context)
                .push(MaterialPageRoute(builder: (BuildContext context) {
              return EditScheduleScreen(
                count: stateCount + 1,
              );
            }));
          },
          child: Text("Flat Button")),
    );
  }
}

推荐阅读