Tizi Dev
Tizi Dev

Reputation: 311

How to add an element at the end of ListView.builder to move back to the top?

How can I add an element to the end of a Listview.builder which allows the user to click it and make him go back to the top of the list?

Upvotes: 4

Views: 6219

Answers (1)

RaSha
RaSha

Reputation: 1482

Pass a scroll controller to ListView.builder and add one to item count which is used to add "back to top" button as the last item. Then you can use listView controller to scroll the list to top when user tap on the last item of the list.

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
        controller: _controller,
        itemCount: items.length + 1,
        itemBuilder: (context, index) => (index != items.length)
            ? ListTile(title: Text(items[index]))
            : ListTile(
                leading: IconButton(
                    icon: Icon(Icons.keyboard_arrow_up),
                    onPressed: _navigateToTop),
              ),
      ),
    );
  }

  void _navigateToTop() {
    final Duration duration = Duration(milliseconds: 400);
    final Curve curve = Curves.ease;
    if (_controller.hasClients) {
      var scrollPosition = this._controller.position;

      scrollPosition.animateTo(
        0,
        duration: duration,
        curve: curve,
      );
    }
  }

Upvotes: 11

Related Questions