Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scroll Controller And Refresh Indicator not work

Tags:

flutter

dart

i'hve a flutter project, when i tried to make a invinite listview but scroll controller not work, no error. also refresh indicator not work to, but if primary false on listview refresh work.

for information, my listview not work if primary set to false, because this listview inside listview on main.dart code

List<dynamic> list = [];
ScrollController _scrollController = ScrollController();

void initState() {
    super.initState();
    _loadData();
    _scrollController.addListener(() {
      if (_scrollController.position.pixels ==
          _scrollController.position.maxScrollExtent - 50) {
        _loadData();
      }
    });
  }

  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }

  Future<dynamic> _loadData() {
    var offset = list.length;
    return Api().postData("resto",
        body: <String, String>{"offset": "$offset"}).then((dynamic res) {
      if (res["error"]) throw new Exception(res["msg"]);
      setState(() {
        list.addAll(res['data']);
      });
    });
  }

@override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.end,
      children: <Widget>[
        FlatButton(
          child: Text(
            "Filter Popularity",
            style: TextStyle(color: Colors.red),
          ),
          onPressed: () {},
        ),
        Padding(
            padding: const EdgeInsets.all(8.0),
            child: list.length == 0 ? _shimmer() : _listResto()),
      ],
    );
  }

  Widget _listResto() {
    return ListView.builder(
      controller: _scrollController,
      primary: false,
      shrinkWrap: true,
      itemCount: list == null ? 0 : list.length,
      itemBuilder: (context, i) {
like image 541
RIFAL Avatar asked Oct 05 '18 02:10

RIFAL


1 Answers

add physics: const AlwaysScrollableScrollPhysics() to RefreshIndicator

body: RefreshIndicator(
        onRefresh: _refreshList,
        child: ListView.builder(
          controller: _scrollController,
          physics: const AlwaysScrollableScrollPhysics(),
          itemCount: items.length,
          itemBuilder: (context, index) => ListTile(
                title: Text('Item ${items[index]}'),
              ),
        ),
      )
like image 107
Orlay Garcia Duconge Avatar answered Oct 20 '22 16:10

Orlay Garcia Duconge