flutter 上拉加载和下拉刷新

迷南。 2021-07-24 14:32 598阅读 0赞
  1. 上拉加载
  2. 1、定义ScrollController控制器
  3. ScrollController scroll=new ScrollController();
  4. 2、使用控制器监听滚动事件
  5. scroll.addListener((){
  6. if(scroll.position.pixels==scroll.position.maxScrollExtent){
  7. ...
  8. 第一个为当前滚动距离
  9. 第二个为组件可滚动的最大距离
  10. }
  11. });
  12. 3、在ListView添加controller参数,并赋值控制器
  13. controller: scroll,
  14. 4、组件销毁的生命周期函数中销毁该方法,避免内存泄漏
  15. void dispose(){
  16. scroll.dispose();
  17. }
  18. 下拉刷新:
  19. 1、将容器包裹在RefreshIndicator组件内
  20. RefreshIndicator(
  21. onRefresh: xx, 触顶回调
  22. child: 组件
  23. );
  24. 2、设置onRefresh参数的回调函数
  25. 返回类型和异步固定,设置后自带加载动图
  26. Future<void> xx() async{
  27. ...
  28. }
  29. 3、引入异步函数库
  30. import 'dart:async';

代码示例:
上拉加载:

  1. import 'package:flutter/material.dart';
  2. import 'txl/textItem-wl.dart';
  3. import 'txl/txlHeader.dart';
  4. import 'package:flutter/rendering.dart';
  5. class Txl extends StatefulWidget {
  6. @override
  7. _AppsState createState() => _AppsState();
  8. }
  9. class _AppsState extends State<Txl> {
  10. @override
  11. Widget build(BuildContext context) {
  12. return Scaffold(
  13. appBar:AppBar(
  14. centerTitle: true,
  15. title: Text('通讯录'),
  16. actions: <Widget>[
  17. Padding(
  18. padding: EdgeInsets.only(right: 10),
  19. child:Icon(Icons.person_add) ,
  20. )
  21. ]
  22. ),
  23. body: Home(),
  24. );
  25. }
  26. }
  27. class Home extends StatefulWidget {
  28. Home({ Key key}) : super(key: key);
  29. @override
  30. _HomeState createState() => _HomeState();
  31. }
  32. class _HomeState extends State<Home> {
  33. //定义控制器
  34. ScrollController scroll=new ScrollController();
  35. @override
  36. void initState() {
  37. // TODO: implement initState
  38. super.initState();
  39. //监听控制器
  40. scroll.addListener((){
  41. if(scroll.position.pixels==scroll.position.maxScrollExtent){
  42. print("到底了");
  43. }
  44. });
  45. }
  46. @override
  47. Widget build(BuildContext context) {
  48. return Container(
  49. child: Container(
  50. child: ListView(
  51. //设置控制器
  52. controller: scroll,
  53. children: <Widget>[
  54. ,,,
  55. ],
  56. ),
  57. ),
  58. );
  59. }

下拉刷新:

  1. import 'package:flutter/material.dart';
  2. import 'dart:async';
  3. class Fx extends StatefulWidget {
  4. @override
  5. _AppsState createState() => _AppsState();
  6. }
  7. class _AppsState extends State<Fx> {
  8. @override
  9. Widget build(BuildContext context) {
  10. return Scaffold(
  11. appBar:AppBar(
  12. centerTitle: true,
  13. title: Text('发现'),
  14. ),
  15. body: Home()
  16. );
  17. }
  18. }
  19. class Home extends StatefulWidget {
  20. Home({ Key key}) : super(key: key);
  21. @override
  22. _HomeState createState() => _HomeState();
  23. }
  24. class _HomeState extends State<Home> {
  25. //下拉刷新回调
  26. Future<void> refresh() async{
  27. print('下拉刷新');
  28. }
  29. @override
  30. Widget build(BuildContext context) {
  31. //触发下拉刷新的组件
  32. return RefreshIndicator(
  33. onRefresh: refresh,
  34. child: Container(
  35. child: ListView(
  36. // controller: scroll,
  37. children: <Widget>[
  38. Text('bb',style: TextStyle(fontSize: 80),),
  39. Text('bb',style: TextStyle(fontSize: 80),),
  40. Text('bb',style: TextStyle(fontSize: 80),),
  41. Text('bb',style: TextStyle(fontSize: 80),),
  42. Text('bb',style: TextStyle(fontSize: 80),),
  43. Text('bb',style: TextStyle(fontSize: 80),),
  44. Text('bb',style: TextStyle(fontSize: 80),),
  45. ],
  46. ),
  47. ),
  48. );
  49. }
  50. }

发表评论

表情:
评论列表 (有 0 条评论,598人围观)

还没有评论,来说两句吧...

相关阅读