在无限滚动Flutter中添加CircularProgressIndicator

时间:2020-03-10 14:33:22

标签: flutter infinite-scroll

我进行了无限滚动,但是我想在加载列表项时添加CircularProgressIndicator,但我做不到。所以我该如何根据向下的代码添加CircularProgressIndicator:

  ListView.builder( 
    padding: EdgeInsets.symmetric(
    vertical: 10, horizontal: 10),
    scrollDirection: Axis.vertical,
    shrinkWrap: true,
    primary: false,
    itemCount: _con.brandComplaints.length,
    itemBuilder: (context, index) {
     if (_con.isLoadingComplaints == false) {
            return Padding(
                 padding: const EdgeInsets.only(
                 bottom: 15.0),
                 child: ComplaintItemWidget(
                 complaint: _con.brandComplaints
                .elementAt(index),
                  ),
               );
    } else {
           return Center(
             child: CircularProgressIndicator());
                     }
                   },
               ),

----------------------------滚动侦听器,用于滚动列表项------------- ---------------------

  _scrollListener() {
    if (int.parse(_con.brand.complaintTotal) == _con.brandComplaints.length) {
      return;
    }
    //print(_scrollController.position.extentAfter);
    if (_scrollController.position.extentAfter <= 0 && isPageLoading ==false) {

      _con.listenForBrandComplaints(_con.brand.id);
    }
  }

-------------------------------控制器------------------- ------------

  void listenForBrandComplaints(String idBrand) async {
    //setState(() => isLoadingComplaints = true);
    final Stream<Complaint> stream =
        await getBrandComplaints(idBrand, brandComplaints.length);
    stream.listen((Complaint _complaint) {
      setState(() => brandComplaints.add(_complaint));
    }, onError: (a) {
      //setState(() => isLoadingComplaints = false);
      print(a);
    }, onDone: () {
      //setState(() => isLoadingComplaints = false);
      //complaintOffset += brandComplaints.length;
    });
  }

1 个答案:

答案 0 :(得分:0)

您可以通过使用Stack小部件并将CircularProgressIndicatorListView重叠来实现。查看以下代码以获取简化示例:

class LoadingOnScroll60619794 extends StatefulWidget {
  @override
  _LoadingOnScroll60619794State createState() => _LoadingOnScroll60619794State();
}

class _LoadingOnScroll60619794State extends State<LoadingOnScroll60619794> {
  bool _loading = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.refresh),
            onPressed: runLoading
          ),
        ],
      ),
      body: Stack(
        children: <Widget>[
          ListView(
            children: <Widget>[
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text('item 1'),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text('item 1'),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text('item 1'),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text('item 1'),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text('item 1'),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text('item 1'),
              ),
            ],
          ),
          _loading
            ? Center(
              child: CircularProgressIndicator(),
            )
            : SizedBox(width: 0, height: 0,)
        ],
      ),
    );
  }

  void runLoading(){
    setState(() {
      _loading = true;
    });
    Timer(Duration(milliseconds: 1500), (){
      setState(() {
        _loading = false;
      });
    });
  }
}