Flutter之ListView 嵌套不同的Item

效果

实现代码如下

home_page.dart

import 'dart:convert';
import 'dart:ffi';

import 'package:flutter/material.dart';
import 'package:flutterwncq/constants/constants.dart' show AppUrls;
import 'package:flutterwncq/models/index_data_bean.dart';
import 'package:flutterwncq/utils/net_utils.dart';
import 'package:flutterwncq/widgets/error.dart';
import 'package:flutterwncq/widgets/home_list_item.dart';
import 'package:flutterwncq/widgets/loading.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State {
  IndexdataBean _data;
  bool _showLoading = false;
  bool _isFirst = true;

  @override
  Widget build(BuildContext context) {
    return RefreshIndicator(
      onRefresh: _pullToRefresh,
      child: _buildListView(),
    );
  }

  Future _pullToRefresh() async {
    _indexData();
  }

  _buildListView() {
    if (_data == null|| _showLoading) {
      if(_isFirst || _showLoading) {
        _isFirst = false;
        _showLoading = false;
        _indexData();
      }
      return Loading();//加载中视图
    }

    if(_data.errcode!='200'){
      return Error(
        onRetry: (){
          setState(() {
            _showLoading = true;
          });
        },
      );//加载出错显示的视图
    }

    //成功加载数据 显示界面
    return ListView.separated(
        padding: const EdgeInsets.all(0.0),
        itemBuilder: (context,index){
          return HomeListItem(
            indexDatas: _data.data.indexDatas[index],
          );
        },
        separatorBuilder: (context,index)=>Container(height: 2,),
        itemCount: _data.data.indexDatas.length,
    );
  }

  //网络加载数据
  void _indexData() {
    var params = new Map();
    params['pageV

你可能感兴趣的:(Flutter,flutter,android)