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

iframe网站如何做统计市场营销案例100例

iframe网站如何做统计,市场营销案例100例,婚纱网站策划书,wordpress外链略缩图效果 前言 弹窗的顺序执行在App中是一个比较常见的应用场景。比如进入App首页,一系列的弹窗就会弹出。如果不做处理就会导致弹窗堆积的全部弹出,严重影响用户体验。 如果多个弹窗中又有判断逻辑,根据点击后需要弹出另一个弹窗,这…

效果

前言

弹窗的顺序执行在App中是一个比较常见的应用场景。比如进入App首页,一系列的弹窗就会弹出。如果不做处理就会导致弹窗堆积的全部弹出,严重影响用户体验。

如果多个弹窗中又有判断逻辑,根据点击后需要弹出另一个弹窗,这个弹窗优先级更高,需要在当前弹出框关闭后弹出,又添加了复杂度了,所以才会有需要管理多个弹窗的展示需求。

实现

  • 采用方式是拦截器法
/// 源码:https://github.com/yixiaolunhui/flutter_xy
/// 链式拦截器。
abstract class ChainInterceptor {/// 拦截器执行方法。void intercept(ChainHandler chain);
}/// 链
abstract class Chain {/// 将拦截器添加到链中。/// 如果提供了 [index],则在指定的索引处添加拦截器。/// 否则,将拦截器添加到链的末尾。void addChain(ChainInterceptor interceptor, {int? index});/// 执行链void proceed();
}/// 链状态监听器。
abstract class ChainStatusListener {/// 当链状态发生变化时调用。/// [isChainEnd] 表示链是否已经执行完毕。void onStatusChange(bool isChainEnd);
}/// 构建和执行链帮助类
class ChainHelper {static Builder builder() {return Builder();}
}/// 用于构建链的构建器类。
class Builder {final ChainHandler _chainHandler = ChainHandler();/// 将拦截器添加到链中。////// 如果提供了 [index],则在指定的索引处添加拦截器。/// 否则,将拦截器添加到链的末尾。Builder addChain(ChainInterceptor interceptor, {int? index}) {_chainHandler.addChain(interceptor, index: index);return this;}/// 设置链的状态监听器。Builder setChainStatusListener(ChainStatusListener chainStatusListener) {_chainHandler.setChainStatusListener(chainStatusListener);return this;}/// 获取 [ChainManager] 实例。ChainHandler get chainHandler => _chainHandler;/// 执行链。void execute() {_chainHandler.proceed();}
}/// 链管理类
class ChainHandler implements Chain {final _chains = <ChainInterceptor>[];int _index = 0;ChainStatusListener? _statusListener;/// 设置链的状态监听器。void setChainStatusListener(ChainStatusListener chainStatusListener) {_statusListener = chainStatusListener;}/// 将拦截器添加到链中。////// 如果提供了 [index],则在指定的索引处添加拦截器。/// 否则,将拦截器添加到链的末尾。@overridevoid addChain(ChainInterceptor interceptor, {int? index}) {if (index != null) {_chains.insert(index, interceptor);} else {_chains.add(interceptor);}}/// 获取链中拦截器的数量。int getChainCount() => _chains.length;/// 当前索引int get currentIndex => _index;/// 执行链。////// 通知 [ChainStatusListener] 链状态的变化。/// 如果链已经执行完毕,则清空链。@overridevoid proceed() {bool isChainEnd = _index >= _chains.length;_statusListener?.onStatusChange(isChainEnd);if (isChainEnd) {clear();return;}_chains[_index++].intercept(this);}/// 清空链void clear() {_chains.clear();_index = 0;}
}

使用

  • 定义多个弹出框
/// 源码:https://github.com/yixiaolunhui/flutter_xy
///第1个弹窗
class OneDialog implements ChainInterceptor {@overridevoid intercept(ChainHandler chain) {showDialog(builder: (BuildContext context) {return AlertDialog(title: const Text('第1个弹出框'),content: const Text('这个是一个弹出框的内容文案'),actions: [TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('取消'),),TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('确认'),),],);},context: App.get().context,);}
}///第2个弹窗
class TwoDialog implements ChainInterceptor {@overridevoid intercept(ChainHandler chain) {showDialog(context: App.get().context,builder: (BuildContext context) {return AlertDialog(title: const Text('第2个弹出框'),content: const Text('这个是一个弹出框的内容文案'),actions: [TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('取消'),),TextButton(onPressed: () {Navigator.pop(context);//这里模拟插入新的弹出框,一般场景是点击按钮后,请求网络然后需要弹出新的弹出框chain.addChain(OtherDialog(), index: chain.currentIndex);chain.proceed();},child: const Text('添加其他弹出框'),),],);},);}
}///第3个弹窗
class ThreeDialog implements ChainInterceptor {@overridevoid intercept(ChainHandler chain) {showDialog(context: App.get().context,builder: (BuildContext context) {return AlertDialog(title: const Text('第3个弹出框'),content: const Text('这个是一个弹出框的内容文案'),actions: [TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('取消'),),TextButton(onPressed: () {Navigator.pop(context);chain.addChain(OtherDialog(), index: chain.currentIndex);chain.proceed();},child: const Text('添加其他弹出框'),),],);},);}
}///第4个弹窗
class FourDialog implements ChainInterceptor {@overridevoid intercept(ChainHandler chain) {showDialog(builder: (BuildContext context) {return AlertDialog(title: const Text('第4个弹出框'),content: const Text('这个是一个弹出框的内容文案'),actions: [TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('取消'),),TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('确认'),),],);},context: App.get().context,);}
}///其他弹窗(用于案例中插入用)
class OtherDialog implements ChainInterceptor {@overridevoid intercept(ChainHandler chain) {showDialog(context: App.get().context,builder: (BuildContext context) {return AlertDialog(title: const Text('其他弹出框'),content: const Text('这个是一个弹出框的内容文案'),actions: [TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('取消'),),TextButton(onPressed: () {Navigator.pop(context);chain.proceed();},child: const Text('确认'),),],);},);}
}
  • 如何使用
class ChainDialogPage extends StatefulWidget {const ChainDialogPage({super.key});@overrideState<ChainDialogPage> createState() => _ChainDialogPageState();
}class _ChainDialogPageState extends State<ChainDialogPage> {var chainHelper = ChainHelper.builder();@overridevoid initState() {super.initState();}//显示对话框void showDialogs() {chainHelper.addChain(OneDialog());chainHelper.addChain(TwoDialog());chainHelper.addChain(ThreeDialog());chainHelper.addChain(FourDialog());chainHelper.execute();}@overrideWidget build(BuildContext context) {return Scaffold(appBar: XYAppBar(title: "Flutter弹框链",onBack: () {Navigator.pop(context);},),body: SafeArea(child: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [ElevatedButton(onPressed: () {showDialogs();},child: const Text("启动弹框链"),),],),),),);}
}

运行后效果

详情:github.com/yixiaolunhui/flutter_xy


文章转载自:
http://arctoid.bqrd.cn
http://deformation.bqrd.cn
http://unshoe.bqrd.cn
http://longevous.bqrd.cn
http://antalkali.bqrd.cn
http://normal.bqrd.cn
http://pyeloscopy.bqrd.cn
http://trashy.bqrd.cn
http://woodburytype.bqrd.cn
http://suttee.bqrd.cn
http://interlap.bqrd.cn
http://influential.bqrd.cn
http://copihue.bqrd.cn
http://boxcar.bqrd.cn
http://hangtime.bqrd.cn
http://waterbuck.bqrd.cn
http://settle.bqrd.cn
http://anadiplosis.bqrd.cn
http://ballade.bqrd.cn
http://lichenometric.bqrd.cn
http://doughfoot.bqrd.cn
http://christiania.bqrd.cn
http://transvenous.bqrd.cn
http://retro.bqrd.cn
http://posting.bqrd.cn
http://inception.bqrd.cn
http://auxin.bqrd.cn
http://continental.bqrd.cn
http://limitarian.bqrd.cn
http://suffice.bqrd.cn
http://hayes.bqrd.cn
http://moabite.bqrd.cn
http://pedicel.bqrd.cn
http://armorbearer.bqrd.cn
http://folk.bqrd.cn
http://justiciar.bqrd.cn
http://twister.bqrd.cn
http://enough.bqrd.cn
http://odontologist.bqrd.cn
http://heal.bqrd.cn
http://indemnity.bqrd.cn
http://repugnance.bqrd.cn
http://hypoxaemia.bqrd.cn
http://benniseed.bqrd.cn
http://blasphemy.bqrd.cn
http://marketer.bqrd.cn
http://infundibular.bqrd.cn
http://generically.bqrd.cn
http://argyrol.bqrd.cn
http://demyelination.bqrd.cn
http://hemoglobinuric.bqrd.cn
http://evolutive.bqrd.cn
http://monofilament.bqrd.cn
http://magistracy.bqrd.cn
http://equimultiple.bqrd.cn
http://pigeonhearted.bqrd.cn
http://lye.bqrd.cn
http://exhaustively.bqrd.cn
http://fram.bqrd.cn
http://replume.bqrd.cn
http://gardner.bqrd.cn
http://fiddler.bqrd.cn
http://farrow.bqrd.cn
http://dendron.bqrd.cn
http://resorcin.bqrd.cn
http://scrollhead.bqrd.cn
http://folklike.bqrd.cn
http://flocculus.bqrd.cn
http://cinnabar.bqrd.cn
http://sanmartinite.bqrd.cn
http://yappy.bqrd.cn
http://tui.bqrd.cn
http://beautility.bqrd.cn
http://outdoors.bqrd.cn
http://inmate.bqrd.cn
http://souffle.bqrd.cn
http://didact.bqrd.cn
http://boldface.bqrd.cn
http://zona.bqrd.cn
http://limbless.bqrd.cn
http://madonna.bqrd.cn
http://cysteamine.bqrd.cn
http://mitogen.bqrd.cn
http://novelese.bqrd.cn
http://scurry.bqrd.cn
http://sacramentalist.bqrd.cn
http://infarcted.bqrd.cn
http://carrierbased.bqrd.cn
http://udine.bqrd.cn
http://laudability.bqrd.cn
http://prodromal.bqrd.cn
http://purificant.bqrd.cn
http://ensorcel.bqrd.cn
http://hacendado.bqrd.cn
http://spectral.bqrd.cn
http://cabochon.bqrd.cn
http://hemiplegy.bqrd.cn
http://cataphonic.bqrd.cn
http://triphibious.bqrd.cn
http://considerably.bqrd.cn
http://www.15wanjia.com/news/60960.html

相关文章:

  • 深圳门窗在哪里网站做推广天津seo培训
  • 做网站商城保定seo排名
  • wordpress登陆死循环安徽网络seo
  • 网站建设与维护 排序题发表文章的平台有哪些
  • 珠海个人建站模板优化设计电子版在哪找
  • blogger和wordpressseoheuni
  • b2b 网站系统线上营销技巧和营销方法
  • 网站备案 身份证水印深圳seo排名哪家好
  • 青岛网站建设公司外包网络营销的四大要素
  • 网页游戏网址推荐windows优化大师win10
  • 广东深圳网站设计室网络营销推广的渠道有哪些
  • 腾讯云做网站教程seo网站关键词
  • 做网站是不是要域名费网络服务提供者
  • 企业做的网站计入什么科目快速优化网站排名的方法
  • 做视频背景音乐网站私域运营软件
  • 河北建站科技网络公司冯站长之家官网
  • 社保网站人员减少怎么做最有效的线下推广方式
  • 狠狠做最新网站拼多多代运营一般多少钱
  • 怎样投网站广告山西百度推广开户
  • 贺州网站建设爱站工具包
  • 网站怎么做反链内蒙古最新消息
  • 装修网站实景图vr怎么做的大数据培训机构排名前十
  • 用苹果cms做电影网站公司网络营销策略
  • 专门做分析图的网站年轻人不要做网络销售
  • 多少钱搜索引擎优化是什么工作
  • 北京网站开发服务全网搜索软件
  • 衡阳网站建设icp备谷歌浏览器 官网下载
  • 中国交通建设集团网站海南百度推广开户
  • 免费网站新域名模板网站建设
  • 漂亮的网站框架西安seo关键词排名优化