效果图:

点击这三个新闻列表的内容,即可进入新闻详情

学习之前需要导入Dio库,具体用法与导入连接请查看我的博客
Flutter进阶第2篇:Dio库实现网络请求以及动态渲染数据

还需要导入解析HTML代码的第三方库:
flutter_html

新闻列表代码:

import 'package:flutter/material.dart';import 'dart:convert';
import 'package:dio/dio.dart';class NewsPage extends StatefulWidget {NewsPage({Key key}) : super(key: key);_NewsPageState createState() => _NewsPageState();
}class _NewsPageState extends State<NewsPage> {List _list = [];int _page = 1;bool hasMore = true; //判断有没有数据ScrollController _scrollController = new ScrollController();@overridevoid initState() {    super.initState();this._getData();//监听滚动条事件_scrollController.addListener(() {print(_scrollController.position.pixels); //获取滚动条下拉的距离print(_scrollController.position.maxScrollExtent); //获取整个页面的高度if (_scrollController.position.pixels >_scrollController.position.maxScrollExtent - 40) {this._getData();}});}void _getData() async {if (this.hasMore) {var apiUrl ="http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=${_page}";var response = await Dio().get(apiUrl);var res = json.decode(response.data)["result"];   setState(() {this._list.addAll(res);  //拼接this._page++;});//判断是否是最后一页if (res.length < 20) {setState(() {this.hasMore = false;});}}}//下拉刷新Future<void> _onRefresh() async {await Future.delayed(Duration(milliseconds: 2000), () {print('请求数据完成');_getData();});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("新闻列表"),),body: this._list.length > 0? RefreshIndicator(onRefresh: _onRefresh,child: ListView.builder(controller: _scrollController,itemCount: this._list.length, //20itemBuilder: (context, index) {//19                  if (index == this._list.length-1) {   //列表渲染到最后一条的时候加一个圈圈//拉到底return Column(children: <Widget>[ListTile(title: Text("${this._list[index]["title"]}",maxLines: 1),onTap: (){Navigator.pushNamed(context, '/newscontent',arguments:{"aid":this._list[index]["aid"]});},),Divider(),_getMoreWidget()],);} else {return Column(children: <Widget>[ListTile(title: Text("${this._list[index]["title"]}",maxLines: 1),onTap: (){Navigator.pushNamed(context, '/newscontent',arguments:{"aid":this._list[index]["aid"]});},),Divider()],);}},)): _getMoreWidget(),);}//加载中的圈圈Widget _getMoreWidget() {if(hasMore){return Center(child: Padding(padding: EdgeInsets.all(10.0),child: Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[Text('加载中...',style: TextStyle(fontSize: 16.0),),CircularProgressIndicator(strokeWidth: 1.0,)],),),);}else{return Center(child: Text("--我是有底线的--"),);}}
}

新闻详情

import 'package:flutter/material.dart';import 'dart:convert';
import 'package:dio/dio.dart';import 'package:flutter_html/flutter_html.dart';class NewsContent extends StatefulWidget {Map arguments;NewsContent({Key key,this.arguments}) : super(key: key);_NewsContentState createState() => _NewsContentState(this.arguments);
}class _NewsContentState extends State<NewsContent> {Map arguments;List _list=[];_NewsContentState(this.arguments);@overridevoid initState() {// TODO: implement initStatesuper.initState();print(this.arguments);this._getData();}_getData() async{var apiUrl="http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=${this.arguments["aid"]}";var response=await Dio().get(apiUrl);     setState(() {this._list=json.decode(response.data)["result"];});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("新闻详情")),body:ListView(children: <Widget>[// Text("${this._list.length>0?this._list[0]["title"]:''}"),// Text("${this._list.length>0?this._list[0]["content"]:''}")Html(data: """${this._list.length>0?this._list[0]["content"]:''}                            """,//Optional parameters:padding: EdgeInsets.all(8.0),backgroundColor: Colors.white70,defaultTextStyle: TextStyle(fontFamily: 'serif'),linkStyle: const TextStyle(color: Colors.redAccent,),onLinkTap: (url) {// open url in a webview})],));}
}

记得配置路由时,要传值:

Flutter进阶第4篇: 实现简单的新闻系统渲染新闻详情数据以及用flutter_html解析html相关推荐

  1. vue前端进阶之SSR篇 --- 搭建简单的SSR框架

    目录 理解ssr SSR的重要性 非SSR SSR 了解vapper 制作简易版脚手架 vue框架 环境区分 目录结构 api router views head信息 打包运行 结束 理解ssr 博主 ...

  2. Flutter进阶—简单平台插件实例

    在之前写过的<Flutter进阶-平台插件>中,笔者简单介绍了如何简单的使用和创建一个Flutter插件,现在可以试试编写一个可以在平台与客户端之间传递数据的Flutter平台插件.在此之 ...

  3. Flutter进阶—实现动画效果(二)

    在上一篇文章:Flutter进阶-实现动画效果(一)的最后,我们说到需要一个处理程序混乱的概念.在这一篇文章中,我们会引入补间,它是构建动画代码的一个非常简单的概念,主要作用是用面向对象的方法替代之前 ...

  4. 阿里内部总结“Flutter进阶笔记”,你收藏好了嘛?

    每一个移动开发者都在为 Flutter 带来的"快速开发.富有表现力和灵活的 UI.原生性能"的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者 ...

  5. UI2Code智能生成Flutter代码--整体设计篇

    背景:   随着移动互联网时代的到来,人类的科学技术突飞猛进.然而软件工程师们依旧需要花费大量精力在重复的还原UI视觉稿的工作. UI视觉研发拥有明显的特征:组件,位置和布局,符合机器学习处理范畴.能 ...

  6. SQL Server索引进阶第十篇:索引的内部结构

    索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其 ...

  7. Flutter进阶—实现动画效果(四)

    在上一篇文章:Flutter进阶-实现动画效果(三)中,实现了一个随机高度.颜色的条形.这一篇文章我们会实现多个条形,同样是随机高度.颜色. 首先在bar.dart中创建BarChart类,并使用固定 ...

  8. Flutter进阶—实现动画效果(三)

    在上一篇文章:Flutter进阶-实现动画效果(二)的最后,我们实现了一个控件,其中包含各种布局和状态处理控件.以及使用自定义的动画感知绘图代码绘制单个Bar的控件.还有一个浮动按钮控件,用于启动条形 ...

  9. Flutter进阶—实现动画效果(一)

    上一篇文章我们了解了Flutter的动画基础:Flutter进阶-解析动画,这一篇文章我们就来实现一个图表的动画效果. 首先,我们需要创建一个新项目myapp,然后把main.dart的内容替换成下面 ...

  10. Flutter进阶—创建有状态控件

    Flutter进阶-构建布局实例展示了如何创建以下布局. 当应用程序首次启动时,这颗实心星标是红色的,表明这个景点曾经被收藏过.实心星标旁边的人数表明,有66人喜欢这个景点.现在需要完成一个任务,点击 ...

最新文章

  1. sleep函数_MySQL中的sleep函数介绍
  2. 如何用python画函数曲线_Python笔记:用matplotlib绘制函数曲线图
  3. 基于FFmpeg音视频流同步
  4. 处理字符串_12_按照指定的位置截取字符
  5. 720x576P时序参数图
  6. 使用myeclipse建立maven项目(重要)
  7. 做嵌入式的必须学Android吗
  8. 微软打脸,Windows 7 再次成为微软的头号桌面操作系统
  9. 理解jQuery的 $ 和 $( )的含义
  10. js add方法_爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py
  11. 关于代码审查的几点建议
  12. 特意整理出来一百套游戏源码,免费分享给大家
  13. 武神主宰中的科幻理论体系设定
  14. iOS -- 第三方登录之微信登录 (Swift代码)
  15. win10 pycharm安装使用 MySQLdb
  16. android键盘还是讯飞输入,讯飞输入法BiuBiu键盘又添神仙操作 分类自定义排序来了...
  17. 基于k-means聚类算法对NBA球员数据的一次聚类分析
  18. 网络创业者之家:互联网创业的优势与不足,你真到了解吗?
  19. 爬取某壁纸网站图片(简单爬虫,入门)
  20. C300--HGU ONU 配置思路指导_方式1

热门文章

  1. java List的初始化
  2. Python全栈(第一部分)day1
  3. 手机端输入键盘导致 position fixed
  4. 在Linux平台使用VNC连接树莓派
  5. 2015,鬼王Xun和GGL比赛,带给我们无尽的欢乐
  6. Sharepoint 2010 备份与恢复 (二)
  7. 一个MYSQL PDO相对完整且功能强大的封装类
  8. python正则表达式笔记之字符集合的使用
  9. C语言杂记-vector 、 stack and queue
  10. 57个深度学习专业术语