【问题标题】:FloatingActionButton Scroll up and downFloatingActionButton 上下滚动
【发布时间】:2021-09-20 10:56:54
【问题描述】:

朋友们,当我在浮动操作按钮中上下滚动页面时,我希望浮动操作按钮滑动,我应该使用哪个小部件?

我的代码

 FloatingActionButton.extended(
                onPressed: () {
                  print("hello world");
                },

                label: const Text('Update',style: TextStyle(color: Colors.white),),
                icon: const Icon(Icons.update_outlined,color: Colors.white,),
                backgroundColor: Colors.blue,
                // foregroundColor: Text(Colors.white),

              ),

【问题讨论】:

  • 滚动时要从下往上移动吗?
  • 是的,兄弟。我该怎么做

标签: flutter dart


【解决方案1】:

让我们试试,这里我们使用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"),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

【讨论】:

  • 非常感谢
  • 不客气,编码愉快
  • setState(() { if (scrollInfo.metrics.pixels > 0.0) { // 这里改变条件 _floatingActionButtonLocation = FloatingActionButtonLocation.endTop; } else { _floatingActionButtonLocation = FloatingActionButtonLocation.endFloat; } });我怎么能用 getx 做到这一点
  • 你可以分别在你的obx 上更改它,你只需删除 setState 并使用obx 属性处理它
  • 先生,我是新来的颤振,你能改变那部分并重写它吗
猜你喜欢
  • 2023-01-17
  • 1970-01-01
  • 2019-07-05
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2020-08-28
  • 2016-12-20
相关资源
最近更新 更多