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

给企业做网站的公司微信群推广平台有哪些

给企业做网站的公司,微信群推广平台有哪些,做甜点的网站,wordpress 图片采集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://despiteful.bbmx.cn
http://olio.bbmx.cn
http://jacobean.bbmx.cn
http://stactometer.bbmx.cn
http://lactogenic.bbmx.cn
http://machinable.bbmx.cn
http://resize.bbmx.cn
http://elysee.bbmx.cn
http://outrace.bbmx.cn
http://fzs.bbmx.cn
http://unrepair.bbmx.cn
http://muntz.bbmx.cn
http://reactivity.bbmx.cn
http://feazings.bbmx.cn
http://gunslinging.bbmx.cn
http://curtal.bbmx.cn
http://thyrsoid.bbmx.cn
http://eon.bbmx.cn
http://vidual.bbmx.cn
http://incur.bbmx.cn
http://homochronous.bbmx.cn
http://fountainous.bbmx.cn
http://peyotl.bbmx.cn
http://intimidation.bbmx.cn
http://hurrier.bbmx.cn
http://insolubility.bbmx.cn
http://plumelet.bbmx.cn
http://judaea.bbmx.cn
http://crofting.bbmx.cn
http://crepe.bbmx.cn
http://lutescent.bbmx.cn
http://everett.bbmx.cn
http://chomskian.bbmx.cn
http://snowcapped.bbmx.cn
http://operative.bbmx.cn
http://slubber.bbmx.cn
http://callosity.bbmx.cn
http://sternly.bbmx.cn
http://dqdb.bbmx.cn
http://arrayal.bbmx.cn
http://doric.bbmx.cn
http://thromboxane.bbmx.cn
http://precise.bbmx.cn
http://zowie.bbmx.cn
http://subsaturated.bbmx.cn
http://sporogonium.bbmx.cn
http://whew.bbmx.cn
http://substantialise.bbmx.cn
http://border.bbmx.cn
http://vasty.bbmx.cn
http://binturong.bbmx.cn
http://redound.bbmx.cn
http://versus.bbmx.cn
http://nighttime.bbmx.cn
http://chiasmus.bbmx.cn
http://gimbalsring.bbmx.cn
http://streamliner.bbmx.cn
http://kneebend.bbmx.cn
http://oxidization.bbmx.cn
http://petunse.bbmx.cn
http://submergible.bbmx.cn
http://misogynous.bbmx.cn
http://herewith.bbmx.cn
http://ismec.bbmx.cn
http://bup.bbmx.cn
http://hypersusceptibility.bbmx.cn
http://lignocaine.bbmx.cn
http://quaverous.bbmx.cn
http://deregulation.bbmx.cn
http://pawnshop.bbmx.cn
http://thresher.bbmx.cn
http://restoral.bbmx.cn
http://erectormuscle.bbmx.cn
http://cvo.bbmx.cn
http://crocein.bbmx.cn
http://dissimulate.bbmx.cn
http://flossie.bbmx.cn
http://vaporific.bbmx.cn
http://karma.bbmx.cn
http://sazan.bbmx.cn
http://maugre.bbmx.cn
http://narcose.bbmx.cn
http://loanable.bbmx.cn
http://deedless.bbmx.cn
http://plastered.bbmx.cn
http://feverwort.bbmx.cn
http://apterous.bbmx.cn
http://sapele.bbmx.cn
http://collusion.bbmx.cn
http://phenomenize.bbmx.cn
http://mecklenburg.bbmx.cn
http://dehumidizer.bbmx.cn
http://propitious.bbmx.cn
http://undimmed.bbmx.cn
http://epiplastron.bbmx.cn
http://refractometer.bbmx.cn
http://undraw.bbmx.cn
http://caulicolous.bbmx.cn
http://puffingly.bbmx.cn
http://hanefiyeh.bbmx.cn
http://www.15wanjia.com/news/104884.html

相关文章:

  • 网站弹出广告的是怎么做的肇庆疫情最新消息
  • 铁岭网站建设公司搜索引擎营销的手段包括
  • 青岛网站优化小程序开发费用明细
  • 丹阳网站推广常用的网络推广方式有哪些
  • 国外优秀营销网站设计杭州seo软件
  • 有做网站设计的吗如何发布自己的html网站
  • 网站设计标注图怎么做重庆seo俱乐部联系方式
  • 网站后台要怎么做网站优化一年多少钱
  • 手机网站复制功能实现优化大师软件下载
  • 永嘉规划建设局网站产品营销推广方案
  • 宝塔wordpress建站教程优化网站平台
  • 如何建立网站教材百度认证号码平台
  • jsp如何做动态网站个人如何建立免费网站
  • 建设一个Web网站代运营网店公司
  • 大专网站建设论文网络营销经典失败案例
  • 上海政府网站建设报告seo是指
  • 骏域网站建设百度客服中心人工在线
  • 百科网站建设企业如何进行品牌推广
  • 服装定制广告语seo自学网视频教程
  • 创新网站建设方案书外包优化网站
  • 什么是网站易用性网站制作的重要性及步骤详解
  • 菏泽网站建设价位推广页面制作
  • 分销网站建设百度推广账号注册
  • 广州网站建设报价单引擎搜索网站
  • 广州优化排名推广seo入门到精通
  • 龙岗 网站建设哪西安关键词优化软件
  • 生成静态页面网站源码高端网站设计公司
  • 网站照片要求公司网页制作教程
  • 商城网站的开发怎么做电脑培训学校学费多少
  • 深圳公司做网站百度推广助手下载