1

我有一个包含约 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当它们不在视口中时发布小部件,并且当它不再在视图层次结构中时,提供者将被处置。这是否意味着列表项没有被处理/重用导致对象在内存视图中增长或者我误解了什么?如果是这样,我怎样才能正确地将提供程序用作列表项,而不会面临应用程序潜在泄漏的问题?

4

0 回答 0