当前位置: 首页 > news >正文

网站建设方案意见营销型网站建设公司比较专业

网站建设方案意见,营销型网站建设公司比较专业,莱芜网站网站建设,想在百度上做网站1. 效果图 2. 下拉加载的实现RefreshIndicator 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator。 // 显示内容列表Widget _showNewsListWidget() {if (_newsDataList.isNotEmpty) {// RefreshIndicator 来实现下拉加载的功能return RefreshIndicator(onRefr…

1. 效果图

在这里插入图片描述

2. 下拉加载的实现RefreshIndicator

在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator。

// 显示内容列表Widget _showNewsListWidget() {if (_newsDataList.isNotEmpty) {//  RefreshIndicator 来实现下拉加载的功能return RefreshIndicator(onRefresh: () async {print("下拉加载");// 网络数据的请求_getNewDataRequest();},child: ListView.builder(itemCount: _newsDataList.length,itemBuilder: (context, index) {return Column(children: [ListTile(title: Text(_newsDataList[index]["title"]),onTap: () {Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewsdetailDemo(cid: _newsDataList[index]["aid"])),);},)],);}, ));} else {// loadingreturn Center(child: CircularProgressIndicator(),);}}

3. 上拉加载的实现

flutter是没有提供上拉分页加载更多的组件,但是在Flutter ListView中有一个ScrollController组件,它就是专门来控制ListView滑动事件,在
这里我们可以根据ListView的位置来判断是否滑动到了底部来做加载更多的处理

上拉分页加载更多主要通过ListView监听 ScrollController 实现
_scrollController.position.pixels 滚动的距离
_scrollController.position.maxScrollExtent 总距离

核心代码,就是在 initState方法中,添加监听:

	_scrollController = ScrollController(); //listview的控制器_scrollController.addListener((){double scrollOffsetY =  _scrollController.position.pixels;double scrollContentHeight =  _scrollController.position.maxScrollExtent;if (scrollOffsetY > scrollContentHeight + 20) { print("上拉加载更多");_getNewDataRequest();}});

ListView中的controller中 关联_scrollController, 代码如下:

ListView.builder(// controller 关联_scrollControllercontroller: _scrollController,itemCount: _newsDataList.length,itemBuilder: (context, index) {return Column();}))

4. 实现列表上下拉加载的完整代码

import 'dart:convert';
import 'package:demoapp/Demo/NewsDemo/NewsDetail_demo.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';class NewsDemo extends StatefulWidget {const NewsDemo({super.key});State<NewsDemo> createState() => _NewsDemoState();
}class _NewsDemoState extends State<NewsDemo> {final ScrollController _scrollController = ScrollController();List _newsDataList = [];int _page = 1;bool _isLoadingData = false;bool _hasMoreData = true;// 获取网络请求的数据void  _getNewDataRequest() async {if (_isLoadingData == true ) {print("数据加载中,请勿重新加载");return;}if (_hasMoreData == false) {print("没有更多的数据了");return;}_isLoadingData = true;var apiUri = "https://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=$_page";print("apiUri = $apiUri");final response = await Dio().get(apiUri);List resultList = json.decode(response.data)["result"];setState(() {print("数据请求成功");if (_page == 1) {_newsDataList = resultList;} else {_newsDataList.addAll(resultList);}_isLoadingData = false;if (resultList.isNotEmpty) {_page += 1;}if (resultList.length < 20) {_hasMoreData = false;}});}// cell 底部视图的设置Widget _newsListCellBottomWidget(int index) {if (index == _newsDataList.length - 1) {if (_hasMoreData) {return CircularProgressIndicator();} else {return Text("---我也是有底线的---");}} else {return Divider();}}// 显示内容列表Widget _showNewsListWidget() {if (_newsDataList.isNotEmpty) {//  RefreshIndicator 来实现下拉加载的功能return RefreshIndicator(onRefresh: () async {print("下拉加载");_page = 1;_hasMoreData = true;_getNewDataRequest();},child: ListView.builder(controller: _scrollController,itemCount: _newsDataList.length,itemBuilder: (context, index) {return Column(children: [ListTile(title: Text(_newsDataList[index]["title"]),onTap: () {Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewsdetailDemo(cid: _newsDataList[index]["aid"])),);},),_newsListCellBottomWidget(index)],);}, ));} else {return Center(child: CircularProgressIndicator(),);}}void initState() {super.initState();_scrollController.addListener((){double scrollOffsetY =  _scrollController.position.pixels;double scrollContentHeight =  _scrollController.position.maxScrollExtent;if (scrollOffsetY > scrollContentHeight + 20) { print("上拉加载更多");_getNewDataRequest();}});_getNewDataRequest();}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("模拟新闻列表上下拉加载 + 加载html的数据"),),body: _showNewsListWidget(),);}
}

5. 加载 Html 的数据

  1. 第三方插件:flutter_widget_from_html_core: ^0.16.0
  2. 引入头文件:
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
  1. 使用代码
           return HtmlWidget("xxxx==> Html 的数据",onTapImage: (imageMetadata) {print(imageMetadata);},onTapUrl: (url) {print(url);return true;},);

6. 实现加载html的数据,完整代码

import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';class NewsdetailDemo extends StatefulWidget {final String cid;const NewsdetailDemo({super.key, required this.cid});State<NewsdetailDemo> createState() => _NewsdetailDemoState();
}class _NewsdetailDemoState extends State<NewsdetailDemo> {List _resultDetailList = [];// 获取详情的数据void _getNewsDetailRequest() async {String apiUri = "https://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=${widget.cid}";final response = await Dio().get(apiUri);final result = json.decode(response.data)["result"];setState(() {_resultDetailList = result;});}// 内容视图Widget _newsDetailWidget() {if (_resultDetailList.isNotEmpty) {Map resultInfo = _resultDetailList.isNotEmpty ?  _resultDetailList[0] : {};return Padding(padding: EdgeInsets.all(10),child: ListView(children: [Text(resultInfo["title"], textAlign: TextAlign.center, style: TextStyle(fontSize: 24),),SizedBox(height: 20),HtmlWidget(resultInfo["content"],onTapImage: (imageMetadata) {print(imageMetadata);},onTapUrl: (url) {print(url);return true;},)],),);} else {return Center(child: CircularProgressIndicator());}}void initState() {super.initState();_getNewsDetailRequest();}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("详情"),),body: _newsDetailWidget(),);}
}
http://www.yayakq.cn/news/998534/

相关文章:

  • 做dnf辅助官方网站拥有自己的网站
  • 网站备案密码通管局如何做网站在售产品分析
  • 单页面的网站模板免费下载网页微信版可以加入腾讯会议吗
  • 找效果图的网站哪个好网站维护做啥的
  • 酷炫给公司网站欣赏建设网站注册会员
  • 企业网站优化做法搭建平台要多少钱
  • 云南公司网站开发知识付费做的最好的平台
  • html5建设摄影网站意义python开源网站源码
  • 网站建设微信营销wordpress 1.0
  • 系统数据库与建设网站中等职业学校网站建设模块
  • 三门峡建设网站网站建设jsp
  • 监控性能网站模板青龙桥网站建设
  • 引流网站建设教程西安响应式网站
  • 技术培训网站seo网络专员招聘
  • qq教程网站源码城市便捷酒店
  • 公司备案的网站被别的公司盗用手机网站定制
  • 做ppt找素材的网站wordpress 角色后台权限
  • 龙岗网站价格抚顺网站制作
  • 沈阳做购物网站电话教育类网站开发公司
  • 网站建设交付形式网址缩短生成链接
  • 网站怎么做收录安庆网站建设兼职
  • 东莞网站推广方案企业解决单身问题方案
  • 广州我要做网站无锡seo网站建设费用
  • 什么星网站做调查问卷的重庆网站建设夹夹虫公司.很好
  • 电商网站 厦门哔哩哔哩网页版搜索不了
  • 散热器 东莞网站建设常用的关键词挖掘工具
  • 网站搜索排名和什么有关系如何用ps做网站图标
  • wordpress5.52 php版本没内容的网站怎么优化
  • 杭州响应式网站建设互联网下载安装
  • 为什么要做营销型网站网站视频你懂我意思吧app