Flutter 颤振-继承的模型仍然更新子对象,即使它与某个方面不匹配
你好。我看了一段关于弗利特继承模型的视频,对它很感兴趣。不幸的是,我似乎无法使它正常工作Flutter 颤振-继承的模型仍然更新子对象,即使它与某个方面不匹配,flutter,inherited-widget,Flutter,Inherited Widget,你好。我看了一段关于弗利特继承模型的视频,对它很感兴趣。不幸的是,我似乎无法使它正常工作 小结:需要帮助如何正确实现InheritedModel 预期的代码输出:在更新CountModel中的count参数时,不应更新小部件CountText 实际代码输出:CountText仍在更新(我认为这是因为父窗口小部件是一个StatefulWidget) 详细信息 我正在尝试使用InheritedModel实现一个计数器应用程序。下面的代码是我的代码 import 'package:flutter/
小结:需要帮助如何正确实现InheritedModel 预期的代码输出:在更新
CountModel
中的count
参数时,不应更新小部件CountText
实际代码输出:CountText
仍在更新(我认为这是因为父窗口小部件是一个StatefulWidget
)
详细信息 我正在尝试使用
InheritedModel
实现一个计数器
应用程序。下面的代码是我的代码
import 'package:flutter/material.dart';
class CountModel extends InheritedModel<String> {
final int count;
CountModel({ this.count, child }) : super(child: child);
@override
bool updateShouldNotify(CountModel oldWidget) {
if (oldWidget.count != count) {
return true;
}
return false;
}
@override
bool updateShouldNotifyDependent(InheritedModel<String> oldWidget, Set<String> dependencies) {
if (dependencies.contains('counter')) {
return true;
}
return false;
}
static CountModel of(BuildContext context, String aspect) {
return InheritedModel.inheritFrom<CountModel>(context, aspect: aspect);
}
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Counter',
theme: Theme.of(context),
home: Counter(),
);
}
}
class Counter extends StatefulWidget {
@override
CounterState createState() => CounterState();
}
class CounterState extends State<Counter> {
int count = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// title: Text("Counter"),
),
body: CountModel(
count: count,
child: CounterText()
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
++count;
});
},
child: Icon(Icons.add),
),
);
}
}
class CounterText extends StatelessWidget {
@override
Widget build(BuildContext context) {
CountModel model = CountModel.of(context, 'test');
return Text('Count: ${model.count}');
}
}
导入“包装:颤振/材料.省道”;
类CountModel扩展了InheritedModel{
最终整数计数;
CountModel({this.count,child}):super(child:child);
@凌驾
bool updateShouldNotify(CountModel oldWidget){
if(oldWidget.count!=计数){
返回true;
}
返回false;
}
@凌驾
bool updateShouldNotifyDependent(继承的模型oldWidget,设置依赖项){
if(dependencies.contains('counter')){
返回true;
}
返回false;
}
的静态计数模型(BuildContext上下文、字符串方面){
返回InheritedModel.inheritFrom(上下文,方面:方面);
}
}
类应用程序扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:"柜台",,
主题:主题(上下文),
主页:计数器(),
);
}
}
类计数器扩展StatefulWidget{
@凌驾
CounterState createState()=>CounterState();
}
类反状态扩展状态{
整数计数=0;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
//标题:文本(“计数器”),
),
正文:CountModel(
伯爵:伯爵,
子对象:CounterText()
),
浮动操作按钮:浮动操作按钮(
已按下:(){
设置状态(){
++计数;
});
},
子:图标(Icons.add),
),
);
}
}
类CounterText扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
CountModel model=CountModel.of(上下文“test”);
返回文本('Count:${model.Count}');
}
}
我有一个CountModel作为
InheritedModel
和一个CountText
小部件,它使用CountModel
中的数据。正如您在CountText
的实现中所看到的,当获取CountModel
时,它通过了test
。根据我的理解,在CountModel中更新count
值时,不应更新它。不幸的是,这并没有发生。简而言之,您应该使用常量
将常量添加到计数器文本构造函数
class CounterText extends StatelessWidget {
const CounterText();
...
}
并在创建CounterText()的实例(const CounterText())时使用const
类计数器状态扩展状态{
...
@凌驾
小部件构建(构建上下文){
返回脚手架(
...
正文:CountModel(…,子项:const CounterText()),
...
);
}
}
瞧,你好@maksimr谢谢~!我是按照你的指导来做的D
class CounterState extends State<Counter> {
...
@override
Widget build(BuildContext context) {
return Scaffold(
...
body: CountModel(..., child: const CounterText()),
...
);
}
}