class _NewsListPageState extends State {
bool isLogin = false;
int curPage = 1;//页数,加载更多的时候参数会改变
List newsList;
ScrollController _controller = ScrollController();
@override
void initState() {
// TODO: implement initState
super.initState();
//下拉的监听
_controller.addListener(() {
var maxScroll = _controller.position.maxScrollExtent;
var pixels = _controller.position.pixels;
if (maxScroll == pixels) {
curPage++;
getNewsList(true);
}
});
//登录成功
DataUtils.isLogin().then((isLogin) {
if (!mounted) return;
setState(() {
this.isLogin = isLogin;
});
});
//EventBus监听登录事件
eventBus.on().listen((event) {
if (!mounted) return;
setState(() {
this.isLogin = true;
});
//获取新闻列表
getNewsList(false);
});
eventBus.on().listen((event) {
if (!mounted) return;
setState(() {
this.isLogin = false;
});
});
}
//NEWS_LIST
getNewsList(bool isLoadMore) async {
DataUtils.isLogin().then((isLogin) {
if (isLogin) {
DataUtils.getAccessToken().then((accessToken) {
if (accessToken == null || accessToken.length == 0) {
return;
}
Map<String, dynamic> params = Map<String, dynamic>();
params[‘access_token’] = accessToken;
params[‘catalog’] = 1;
params[‘page’] = curPage;
params[‘pageSize’] = 10;//每次刷新10条
params[‘dataType’] = ‘json’;
///action/openapi/news_list
NetUtils.get(AppUrls.NEWS_LIST, params).then((data) {
//{
// “newslist”: [
// {
// “id”: 26754,
// “author”: “test33”,
// “pubDate”: “2013-09-17 16:49:50.0”,
// “title”: “asdfa”,
// “authorid”: 253469,
// “commentCount”: 0,
// “type”: 4
// }
// ],
// “notice”: {
// “replyCount”: 0,
// “msgCount”: 0,
// “fansCount”: 0,
// “referCount”: 0
// }
//}
print(‘Debug NEWS_LIST=====: $data’);
if (data != null && data.isNotEmpty) {
Map<String, dynamic> map = json.decode(data);
List _newsList = map[‘newslist’];
if (!mounted) return;
setState(() {
if (isLoadMore) {
//加载更多
newsList.addAll(_newsList);
} else {
newsList = _newsList;
}
});
}
});
});
}
});
}
@override
Widget build(BuildContext context) {
//没有登录就去登录
if (!isLogin) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(‘由于openapi限制,必须登录才能获取资讯!’),
InkWell(
onTap: () async {
final result = await Navigator.of(context).push(
MaterialPageRoute(builder: (context) => LoginWebPage()));
if (result != null && result == ‘refresh’) {
//登录成功
eventBus.fire(LoginEvent());
}
},
child: Text(‘去登录’),
),
],
),
);
}
//下拉刷新
Future _pullToRefresh() async {
curPage = 1;
getNewsList(false);
return null;
}
//下拉刷新的
return RefreshIndicator(
onRefresh: _pullToRefresh,
child: buildListView(),
);
}
Widget buildListView() {
if (newsList == null) {
getNewsList(false);
//返回转圈圈
return CupertinoActivityIndicator();
}
return ListView.builder(
controller: _controller,
itemCount: newsList.length,
itemBuilder: (context, index) {
return NewsListItem(newsList: newsList[index]);
});
}
}
NewsListItem.dart单个条目的布局,点击以后会跳转到详情的信息
import ‘package:flutter/material.dart’;
import ‘package:flutterapp2/pages/news_detail_page.dart’;
/**
- 新闻
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
主界面Item的布局
*/
class NewsListItem extends StatelessWidget {
final Map<String, dynamic> newsList;
//构造函数
NewsListItem({this.newsList});