要检测PageController是否触发到底,可以使用addListener方法来监听PageController的滚动事件,并通过positionatEdge属性来判断是否到达边界。

下面是一个示例代码,演示如何检测PageController是否触发到底:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  PageController _pageController;
  bool _isAtEnd = false;

  @override
  void initState() {
    super.initState();
    _pageController = PageController();
    _pageController.addListener(_handleScroll);
  }

  @override
  void dispose() {
    _pageController.dispose();
    super.dispose();
  }

  void _handleScroll() {
    if (_pageController.position.atEdge) {
      if (_pageController.position.pixels == 0) {
        // 已经到达开头
        setState(() {
          _isAtEnd = false;
        });
      } else {
        // 已经到达末尾
        setState(() {
          _isAtEnd = true;
        });
      }
    } else {
      setState(() {
        _isAtEnd = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PageController Demo'),
      ),
      body: Column(
        children: [
          Expanded(
            child: PageView(
              controller: _pageController,
              children: [
                Container(
                  color: Colors.red,
                  child: Center(
                    child: Text(
                      'Page 1',
                      style: TextStyle(fontSize: 24),
                    ),
                  ),
                ),
                Container(
                  color: Colors.blue,
                  child: Center(
                    child: Text(
                      'Page 2',
                      style: TextStyle(fontSize: 24),
                    ),
                  ),
                ),
                Container(
                  color: Colors.green,
                  child: Center(
                    child: Text(
                      'Page 3',
                      style: TextStyle(fontSize: 24),
                    ),
                  ),
                ),
              ],
            ),
          ),
          Container(
            padding: EdgeInsets.all(16),
            child: Text(
              _isAtEnd ? '已到达末尾' : '',
              style: TextStyle(fontSize: 18),
            ),
          ),
        ],
      ),
    );
  }
}

在上面的示例中,我们创建了一个带有PageView的页面,并使用PageController来控制页面的滚动。在_handleScroll方法中,我们通过判断_pageController.position.atEdge属性来确定是否到达边界,然后更新_isAtEnd变量的值。

通过在页面底部显示一个文本来展示当前是否到达末尾。

Flutter PageController 检测页面滑动到边界

原文地址: http://www.cveoy.top/t/topic/bznf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录