flutter - 继承的小部件不会更新其他小部件
问题描述
所以我有一个具有计数器数据的继承小部件
class FavProvider extends InheritedWidget
{
FavProvider({Key key, this.child}) : super(key: key, child: child);
final Widget child;
int counter =0;
// bool fav = true;
// var favIcon = Icon(Icons.favorite_border, size: 20, color: Colors.black,);
static FavProvider of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<FavProvider>();
}
@override
bool updateShouldNotify(FavProvider oldWidget)
{
if(oldWidget.counter != counter)
return true;
return false;
}
}
我不想把整个代码放在这里,因为它很大,但我会解释这个想法
我有一个 HomePage 类,其中包含一个包含许多 Hero() 小部件的 ListView,我构建的一个名为 ListItem() 的类负责根据我给它的属性返回 Hero 小部件,我还有另一个名为 HeroPage() 的类这是我们在单击 Hero 小部件后要转换到的页面。
负责创建 Hero 小部件的 ListItem 类,它创建一个包裹 Gesture Detector 的按钮
GestureDetector
(
child: Text(ptr.counter.toString(), style: TextStyle(fontSize: 20,), ),
onTap: _counterClick,
),
这是 _counterClick 方法
_counterClick()
{
setState(()
{
FavProvider.of(context).counter++;
});
}
HeroPage(我们在点击 Hero 小部件后转换到的页面)也有类似的按钮:
GestureDetector
(
child: Text(ptr.counter.toString(), style: TextStyle(fontSize: 20,), ),
onTap: _counterClick,
),
和类似的方法
_counterClick()
{
setState(()
{
FavProvider.of(context).counter++;
});
}
所以它们是不同的按钮但相同的数据,ListView 有 3 个 ListItem() 元素,所以我们得到了 3 个 Hero 小部件,每个小部件在 HomePage 中都有不同的标签,当点击每一个时,它会导致带有标签的 HeroPage()我们点击的那个
问题是当我单击英雄小部件时,我可以转到 HeroPage 并单击按钮以增加计数器我可以看到计数器增加但是当我返回主页时,我看不到任何变化3 小部件,除非我单击增加计数器的按钮(在 HomePage 中的按钮上的按钮而不是在 HeroPage 中)并且更改仅发生在我单击的小部件上,即使我们只有一个与所有相关联的计数器两个页面中的按钮
解决方案
推荐阅读
- javascript - 如何只在 adMob 中显示文字广告
- javascript - 为什么 VS Code 不跟踪 JavaScript 的变量类型?
- python - 首次完成后取消两个异步协程
- javascript - 故意不返回 Bluebird Promise
- node.js - 2018 年,谷歌的一位技术主管表示,他们正在努力在 64 位系统上的 V8 中“支持超过 4GiB 的缓冲区”。那发生了吗?
- python - 如何将列表传递给requests.patch中的数据参数?
- typescript - 如何返回预先填充了一些基础对象值的扩展对象?
- ios - 关于为什么我的谓词不断返回 nil 并使我的应用程序崩溃的任何想法
- arrays - 在 VBA Access 中循环遍历二维数组时出错
- r - 我在 R 中的 if else 语句中需要帮助,直到满足某个条件