ListView中的提供程序没有处置?

时间:2019-10-04 19:23:15

标签: flutter dart flutter-provider flutter-listview

我有ListView,列表(values)包含约600个对象:


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会在未位于viewPort中时释放小部件,而当Provider不在视图层次结构中时将丢弃提供程序。 这是否意味着列表项没有被处置/重用导致对象在内存视图中增长,或者我误解了什么?如果是这样,我如何正确地将提供程序用作列表项而不面临应用程序潜在泄漏的问题?

0 个答案:

没有答案