flutter - 颤振不变性
问题描述
我正在使用有状态小部件,并且必须声明最终变量才能从另一个页面接收数据。但是,我声明的 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 的值并保持它的最终状态(因为它需要从不同的页面接收)?
解决方案
我正在使用有状态小部件,并且必须声明最终变量才能从另一个页面接收数据。但是,我声明的 int 变量之一必须在同一页面上再次更改,因此我删除了 Final 并且代码工作正常,但它警告我。
它不会破坏您的代码,但最好不要尽可能避免警告。您可以将值分配给count
状态类中的新变量,然后简单地使count
final 或 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")),
);
}
}
推荐阅读
- php - 在 Kohana 2.3.4 中不应静态调用非静态方法
- c# - 具有混合 =“真”的 complexType 节点 - 如何获取内部文本和其中的节点 - C#
- node.js - MongoDB:使用 $all 查询多个 $elemmatch
- javascript - styled-components 不适用于多个 ReactDOM.render
- python - 计算学习算法的 yScore
- python-3.x - 从 TKINTER 的菜单栏中删除以前的小部件选择选项
- php - 递归修改json数组
- react-native - 如何在 React Native 功能组件中从父组件调用子函数?
- php - 显示 strtotime() 是否正确有效
- mysql - MYSQL - 如何在连接表中使用 LIKE 运算符?