3)Learning diary for flutter about android

Yerstoday,I worte an android program which only has one list view

Today,I'll add  feature about load more to the list

The page is implement of  statefulWidget

The class used to updates page state is extend of State

To reload page need calls the method named setState  in  State

Note that the list will be reloaded when the page reloaded

So the data of initializing for list should be written in the  method named initState

ScrollController be  used to listens list scrolls

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> implements ScrollListener {
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    adapter = new MyLoadMoreListAdater.name(getData(), this);
    widgetList = adapter.getItemList(context);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: getLoadMoreList(context));
  }

  MyLoadMoreListAdater adapter;
  List<Widget> widgetList;

  getLoadMoreList(BuildContext context) {
    return ListView(children: widgetList, controller: adapter.getController());
  }

  @override
  void onLoaderMore(MyBaseAdapter data) {
    // TODO: implement onLoaderMore
    print("加載更多");
    List<MyListData> addItem = addData(adapter.data.length);
    adapter.data.addAll(addItem);
    int temp = widgetList.length;
    setState(() {
      widgetList = adapter.getItemList(context);
      print(temp);
    });
    print("加載end");
  }
}
abstract class ScrollListener {
  void onLoaderMore(MyBaseAdapter data);
}

class MyLoadMoreListAdater extends MyBaseAdapter<MyListData> {
  ScrollListener listener;

  MyLoadMoreListAdater(List data) : super(data);

  MyLoadMoreListAdater.name(List data, this.listener) : super(data);

  ScrollController getController() {
    ScrollController scrollController = new ScrollController();
    scrollController.addListener(() {
      if (scrollController.position.pixels ==
          scrollController.position.maxScrollExtent) {
        listener.onLoaderMore(this);
        print("下拉至最底部");
      }
    });
    return scrollController;
  }

  @override
  Widget getItem(BuildContext context, int pos) {
    // TODO: implement getItem
    return getLayout(data[pos], pos);
  }
}
List getData(){
  List <MyListData> data=[];
    for(int i=0;i<10;i++){
    data.add(new MyListData("item_title$i","item_content$i"));
    }
  return data;
}
List <MyListData> addData(int a) {
  List <MyListData> data=[];
  for (int i=a; i <a+10 ; i++) {
    data.add(new MyListData("item_title$i", "item_content$i"));
  }
  return data;
}

2)Next,used another list construction method recommended by official website that is more suitable for updating  

 getLoadMoreList(BuildContext context) {
//    return ListView(children: widgetList, controller: adapter.getController());
      return ListView.builder(itemCount: widgetList.length,controller:adapter.getController(),itemBuilder: (BuildContext context,int pos){
        return adapter.getItem(context, pos);
      });
  }

  @override
  void onLoaderMore(MyBaseAdapter data) {
    // TODO: implement onLoaderMore
    print("加載更多");
    List<MyListData> addItem = addData(adapter.data.length);
    adapter.data.addAll(addItem);
    int temp = widgetList.length;
    setState(() {
      for(int i=temp;i<temp+addItem.length;i++){
          widgetList.add(adapter.getItem(context, i));
      }
    });

//    setState(() {
//      widgetList = adapter.getItemList(context);
//      print(temp);
//    });
    print("加載end");
  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章