-
Notifications
You must be signed in to change notification settings - Fork 10
/
ListViewScrollControllerWidget.dart
95 lines (85 loc) · 2.39 KB
/
ListViewScrollControllerWidget.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/common/CommonShowModel.dart';
///author: yang yi
///email: yangyirunning@163.com
class ListViewScrollControllerWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return ListViewScrollControllerState();
}
}
class ListViewScrollControllerState
extends State<ListViewScrollControllerWidget> {
var isShowFAB = false;
ScrollController scrollController = new ScrollController();
@override
Widget build(BuildContext context) {
// TODO: implement build
final arg = ModalRoute
.of(context)
.settings
.arguments;
return Scaffold(
appBar: getAppBar(arg),
body: Scrollbar(
child: ListView.builder(
itemBuilder: (BuildContext context, int index) {
if (index % 2 == 0) {
return Container(
alignment: Alignment.center,
color: Colors.blueAccent[100],
child: getLimitListWidget(100)[index],
);
} else {
return Container(
alignment: Alignment.center,
color: Colors.orange[200],
child: getLimitListWidget(100)[index],
);
}
},
itemCount: getLimitListWidget(100).length,
shrinkWrap: true,
padding: EdgeInsets.all(10),
controller: scrollController,
),
),
floatingActionButton: isShowFAB ? goTop() : null,
);
}
@override
void initState() {
super.initState();
scrollController.addListener(() {
//滚动的偏移量
print(scrollController.offset);
if (scrollController.offset < 500 && isShowFAB) {
setState(() {
isShowFAB = false;
});
}
if (scrollController.offset >= 500 && isShowFAB == false) {
setState(() {
isShowFAB = true;
});
}
});
}
@override
void dispose() {
super.dispose();
scrollController.dispose();
}
FloatingActionButton goTop() {
return FloatingActionButton(
child: Icon(Icons.vertical_align_top),
backgroundColor: Colors.red[200],
onPressed: () {
scrollController.animateTo(
0, duration: Duration(seconds: 1), curve: Curves.ease);
},
);
}
}