Flutter42,移动端网站开发工具

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});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值