import 'package:flutter/material.dart';
import 'package:gmalpha_flutter/commonModel/net/DioUtil.dart';
import 'package:gmalpha_flutter/messageModel/model/message/message.dart';
import 'package:gmalpha_flutter/messageModel/model/notification_model.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:gmalpha_flutter/commonModel/list_item.dart';
import '../home/message_item.dart';
import '../home/message_notification_item.dart';


class NotificationList extends StatefulWidget {
  @override
  _NotificationListState createState() => _NotificationListState();
}

class _NotificationListState extends State<NotificationList> {
  @override
  List<ListItem> dataArr = List<ListItem>();
  int pageIndex = 1;
   List<String> data1 = [];

  RefreshController _refreshController =
      RefreshController(initialRefresh: true);

  void _onRefresh() async{
    pageIndex = 1;
   List<ListItem> newdataArr = List<ListItem>();
   newdataArr = await  _fetchListData();
   if (mounted) setState(() {
     dataArr = newdataArr;
   });
   _refreshController.refreshCompleted();
  }

  void _onLoading() async{
    pageIndex ++;
    List<ListItem>  newData = List<ListItem>();
    newData = await _fetchMesssageList();
    if (mounted) setState(() {
      this.dataArr.addAll(newData);
    });
    _refreshController.loadComplete();
  }

  Future<List<ListItem>> _fetchMesssageList() async {
    List<NotificationModel> messageList = List<NotificationModel>();
//    BaseResp<List> baseresp = await DioUtil().request<List>(Method.get, "api/v1/message/notice", queryParameters: {'page': pageIndex, 'count': 10});
//    if (baseresp.code != 0) {
//      return new Future.error(baseresp.msg);
//    }
//
//    if (baseresp.data != null) {
//      messageList = baseresp.data.map((value) {
//        return NotificationModel.fromJson(value);
//      }).toList();
//    }
     _refreshController.refreshCompleted();
    return messageList;
  }

   

   Future<List<ListItem>> _fetchListData() async {
     List<ListItem>  dataArr = List<ListItem>();
     List<ListItem> messageData = await _fetchMesssageList();
     messageData.forEach((item) {
       dataArr.add(item);
     });
    return dataArr;
   }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: new Text('消息'),
      ),
      body: new Container(
        child: SmartRefresher(
          child: _createListView(),
          controller: _refreshController,
          enablePullDown:  true,
          enablePullUp: true,
          header: WaterDropHeader(),
          onRefresh: (){
            _onRefresh();
          },
          onLoading: () {
            _onLoading();
          }
      ),
      )
    );
  }
  

  Widget _createListView() {
    List<ListItem> dataArr = this.dataArr;
    return ListView.builder(
      shrinkWrap: true,
      key: new PageStorageKey('message-list'),
      itemCount: dataArr.length,
      itemBuilder: (context,index) {
        ListItem  item = dataArr[index];
        if (item is Message) {
          return new MessageItem(onPressed: (){}, message:item);
        } else if (item is NotificationItem){
          return new MessageNotificationItem(onPressed: (){}, notification: item);
        } else {
          return Text('类型错误');
        }
      },
    );
  }
}