让我们试试,这里我们使用NotificationListener。在NotificationListener的帮助下,我们获取屏幕信息,当开始向上或向下滚动时,我们更改FloatingActionButtonLocation。
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(debugShowCheckedModeBanner: false, home: MyHomePage()));
}
class MyHomePage extends StatefulWidget {
const MyHomePage({
Key key,
}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
ScrollController _scrollController = ScrollController();
FloatingActionButtonLocation _floatingActionButtonLocation =
FloatingActionButtonLocation.endFloat;
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
floatingActionButton: FloatingActionButton(
child: Text("test"),
),
floatingActionButtonLocation: _floatingActionButtonLocation,
body: Container(
child: NotificationListener(
onNotification: (ScrollNotification scrollInfo) {
setState(() {
if (scrollInfo.metrics.pixels > 0.0) { // here you change the condition
_floatingActionButtonLocation =
FloatingActionButtonLocation.endTop;
} else {
_floatingActionButtonLocation =
FloatingActionButtonLocation.endFloat;
}
});
return true;
},
child: ListView(
children: [
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
SizedBox(
height: 500,
),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
Text("data"),
],
),
),
),
),
);
}
}