我有一个包含约 600 个对象ListView
的列表 ( ):values
ListView.builder(
itemCount: values.length,
itemBuilder: (context, index) {
return ChangeNotifierProxyProvider<DatabaseRepository,
AlbumViewModel>(
initialBuilder: (context) => AlbumViewModel(album: values[index]),
builder: (context, dbRepo, vm) => vm..databaseRepository = dbRepo,
child: const AlbumEntryView(),
);
随着根据AlbumEntryView
class AlbumEntryView extends StatelessWidget {
const AlbumEntryView({Key key}) : super(key: key);
Widget _flagIconButton(AlbumViewModel model) {
IconData icon = model.album.flagged ? Icons.flag : Icons.outlined_flag;
return IconButton(icon: Icon(icon), onPressed: () => model.toggleFlagged());
}
@override
Widget build(BuildContext context) {
AlbumViewModel model = Provider.of(context);
return ListTile(
title: Text(model.album.title),
trailing: _flagIconButton(model),;
}
我在我的应用程序中检查了内存中的 ChangeNofifierProxyProvider
对象数量,当我滚动列表时它不断增加(它包含AlbumEntryView
对象)。
据我所知,ListView
当它们不在视口中时发布小部件,并且当它不再在视图层次结构中时,提供者将被处置。这是否意味着列表项没有被处理/重用导致对象在内存视图中增长或者我误解了什么?如果是这样,我怎样才能正确地将提供程序用作列表项,而不会面临应用程序潜在泄漏的问题?