flutter - 嵌套的 Flutter Futurebuilder 不更新视图
问题描述
我有一个有状态小部件,我在无状态小部件中显示。我在我的应用程序的几个部分重用了这个小部件,它在那里工作。
小部件看起来像这样
class InnerWidget extends StatefulWidget {
// private keys for objects in the remote dataahase
List<int> privateKeys;
const InnerWidgt({
Key key,
this.privateKeys,
}) : super(key: key);
@override
_InnerWidgetState createState() => _InnerWidgetState();
}
class _InnerWidgetState extends State<InnerWidget> {
// data retrieved from the database
Future<List<SomeClass>> data;
@override
void initState() {
this.data = this.fetchData(widget.privateKeys);
super.initState();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<List<SomeClass>> (
future: this.data,
builder: (BuildContext contest, AsyncSnapshot<List<SomeClass>> snapshot) {
if(snapshot.hasData){
// return a widget (a list of names in this case)
}
return Text('Loading...');
}
);
}
Future<List<SomeClass>> fetchData(List<int> pKeys){
// fetches the JSON objects from the server and returns them as instances
}
}
小部件被创建并给出了一个键列表,它调用远程 API 来获取一些对象并将它们显示在一个列表中。我认为这个小部件可以自行处理可能很好,但也许它的设计不好?
发生的情况是,该fetchData()
方法永远不会被调用,并且永远显示“正在加载...”。但是snapshot.hasData
确实返回 true,所以我认为这是某种重绘问题。
我正在谈论的视图是详细视图,您可以从列表 (ListView) 导航到该视图。我在 ListView 内的元素中使用了完全相同的InnerWidget,它工作得非常好。但是当我单击该项目以导航到详细信息页面时,相同的InnerWidget不起作用。(我知道两次获取相同的数据并不好,我脑子里有它来改变它,而且下面已经有一个缓存)。也许这与 ElementTree 中的保留状态有关?那是因为我使用的是相同的InnerWidgit,它会保留其状态而不是重新渲染?
我希望我的问题表述得足够好,我不想向你扔数百行代码,这就是为什么至少创建了这个小部件的最小示例。如果需要,我也可以添加列表和导航部分,但也许这是一些与 Flutter 合作过的人马上就知道的东西,我只有 3 周的时间。
解决方案
推荐阅读
- c# - 为什么使用 List<> 的相关表值在 HttpContext.Session.Get 上为空?
- android - Android API 23 模糊矢量可绘制
- java - android setText 在片段内延迟
- c# - 如何在 Azure 存储模拟器中使用 MSI(托管服务标识)?
- sql-server - 微软 SQL 问题 08001
- laravel - 如何在 Laravel Excel 中设置行的背景颜色?
- vba - 用户窗体对象在不同的监视器上改变大小/缩放
- python-3.x - 如何从 CoreNLPParser 中提取短语?
- java - 我需要检查 Map 中是否已经存在添加值并将值添加到 Map 中的整数列表
- macos - 如何在 Mac 上的控制台中查看密码而不是 ******?