使用WidgetsBinding.instance.addPostFrameCallback在ListView构建完成后访问maxScrollExtent

20 min read

以下是一个示例,如何使用WidgetsBinding.instance.addPostFrameCallback在ListView构建完成后访问maxScrollExtent:

import 'package:flutter/material.dart';

class MyListView extends StatefulWidget {
  @override
  _MyListViewState createState() => _MyListViewState();
}

class _MyListViewState extends State<MyListView> {
  final ScrollController _scrollController = ScrollController();
  double _maxScrollExtent = 0;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _maxScrollExtent = _scrollController.position.maxScrollExtent;
      print('maxScrollExtent: $_maxScrollExtent');
    });
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      controller: _scrollController,
      itemCount: 100,
      itemBuilder: (BuildContext context, int index) {
        return ListTile(
          title: Text('Item $index'),
        );
      },
    );
  }
}

在上述示例中,我们将ScrollController绑定到ListView,然后在initState方法中使用WidgetsBinding.instance.addPostFrameCallback来获取maxScrollExtent。在回调函数中,我们可以访问maxScrollExtent并对其执行任何适当的逻辑。