gpt4 book ai didi

android - Flutter - 在 GridView 的末尾添加一个按钮

转载 作者:行者123 更新时间:2023-12-01 21:29:56 25 4
gpt4 key购买 nike

我想在 GridView 的末尾添加一个按钮。我查看了另一个类似的问题,但答案中给出的代码没有滚动。 Here是该答案的链接。
我的设计也有类似的。这是一个粗略的草图。 enter image description here
也只是为了澄清,我希望按钮在用户滚动到 GridView 的末尾时出现。
我还是新手,所以非常感谢您的帮助:)

最佳答案

你需要的是ScrollController class .
为什么选择滚动 Controller ?
它跟踪我们在滚动中所做的事情,即 scrolling , reached bottom , 或 top 我们如何使用它?
你需要在GridView里面使用, 让你的东西启动并运行

// Simply initialise your controller in your project
ScrollController _controller = new ScrollController();

// add listener to the controller to find out the scrolling event
_controller.addListener((){});

// pass this into your GridView.
// We we will add it to GridView. ScrollController is for every scrolling widget
// in Flutter
GridView.builder(
controller: _controller,
)
免责声明:请不要看 UI 方面,因为我们关心滚动事件跟踪和显示/隐藏我们的按钮
  • 我仅在创建 UI 时引用了您给定的链接 => Your Provided Link
  • 另外,我添加了滚动事件来识别我们是否正在滚动,但它被注释为
  • 项目目前在我们到达底部时显示按钮,当我们到达顶部时隐藏它

  • 代码
    class _MyHomePageState extends State<MyHomePage> {
    List<String> homeList = [];

    //to check whether we have reached bottom
    bool isBottom = false;

    ScrollController _controller = new ScrollController();

    @override
    void initState() {
    super.initState();
    homeList = List.generate(10, (ind) => 'Item $ind').toList();

    // adding controller to check whether the page is
    // at the bottom
    _controller.addListener((){
    // reached bottom
    if (_controller.offset >= _controller.position.maxScrollExtent &&
    !_controller.position.outOfRange) {
    setState(() => isBottom = true);
    }

    // IS SCROLLING
    // if (_controller.offset >= _controller.position.minScrollExtent &&
    // _controller.offset < _controller.position.maxScrollExtent && !_controller.position.outOfRange) {
    // setState(() {
    // isBottom = false;
    // });
    // }

    // REACHED TOP
    if (_controller.offset <= _controller.position.minScrollExtent &&
    !_controller.position.outOfRange) {
    setState(() => isBottom = false);
    }
    });
    }

    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(
    title: Text(widget.title),
    ),
    body: Container(
    height: MediaQuery.of(context).size.height,
    child: Stack(
    children: [
    GridView.builder(
    shrinkWrap: true,
    controller: _controller,
    itemCount: homeList.length,
    gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2, crossAxisSpacing: 20),
    itemBuilder: (ctx, i) {
    return GestureDetector(
    onTap: () => print(i),
    child: Container(
    margin: EdgeInsets.only(bottom: 20.0),
    decoration: BoxDecoration(
    color: Colors.indigo[300],
    borderRadius: BorderRadius.circular(15.0)
    )
    )
    );
    }
    ),
    // if we are bottom we show the button
    // else empty container, which is nothing but
    // hiding technique in Flutter
    isBottom ? Positioned(
    bottom: 20,
    left: 18,
    right: 18,
    child: Container(
    alignment: Alignment.center,
    height: 50,
    decoration: BoxDecoration(
    color: Colors.orangeAccent,
    borderRadius: BorderRadius.circular(15),
    ),
    child: Text('Your widget at the end')
    )
    ) : Container()
    ]
    )
    )
    );
    }
    }
    结果
    Resultant GIF

    关于android - Flutter - 在 GridView 的末尾添加一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63098001/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com