热议:Flutter加载图片流程之ImageProvider源码示例解析
目录
加载网络图片ImageProviderresolveobtainKeyresolveStreamForKeyloadBufferload(被废弃)evict总结困惑解答加载网络图片
Image.network()
是Flutter提供的一种从网络上加载图片的方法,它可以从指定的URL加载图片,并在加载完成后将其显示在应用程序中。本节内容,我们从源码出发,探讨下图片的加载流程。
ImageProvider
ImageProvider
是Flutter中一个抽象类,它定义了一种用于加载图片的通用接口,可以用于加载本地图片、网络图片等各种类型的图片。
ImageProvider
类包含两个核心方法:obtainKey
和loadBuffer
。
(相关资料图)
resolve
/// Resolves this image provider using the given `configuration`, returning /// an [ImageStream]. /// /// This is the public entry-point of the [ImageProvider] class hierarchy. /// /// Subclasses should implement [obtainKey] and [load], which are used by this /// method. If they need to change the implementation of [ImageStream] used, /// they should override [createStream]. If they need to manage the actual /// resolution of the image, they should override [resolveStreamForKey]. /// /// See the Lifecycle documentation on [ImageProvider] for more information. @nonVirtual ImageStream resolve(ImageConfiguration configuration) { assert(configuration != null); final ImageStream stream = createStream(configuration); // Load the key (potentially asynchronously), set up an error handling zone, // and call resolveStreamForKey. _createErrorHandlerAndKey( configuration, (T key, ImageErrorListener errorHandler) { resolveStreamForKey(configuration, stream, key, errorHandler); }, (T? key, Object exception, StackTrace? stack) async { await null; // wait an event turn in case a listener has been added to the image stream. InformationCollector? collector; assert(() { collector = () =>[ DiagnosticsProperty ("Image provider", this), DiagnosticsProperty ("Image configuration", configuration), DiagnosticsProperty ("Image key", key, defaultValue: null), ]; return true; }()); if (stream.completer == null) { stream.setCompleter(_ErrorImageCompleter()); } stream.completer!.reportError( exception: exception, stack: stack, context: ErrorDescription("while resolving an image"), silent: true, // could be a network error or whatnot informationCollector: collector, ); }, ); return stream; }
根据文档解释,我们可以了解到以下几点:
1、使用给定的`configuration`解析该图片提供器,返回一个 [ImageStream]。
2、这是 [ImageProvider] 类层次结构的公共入口点。
3、子类应该实现 [obtainKey] 和 [load] 方法,这两个方法将被该方法使用。
4、如果子类需要更改使用的 [ImageStream] 的实现,则应该重写 [createStream] 方法。
5、 如果子类需要管理实际的图像分辨率,则应该重写 [resolveStreamForKey] 方法。
阅读resolve
方法的实现。我们可以知道:
1、它使用给定的configuration
参数创建一个ImageStream
对象(createStream
)。然后调用_createErrorHandlerAndKey
方法,该方法会异步获取图片的唯一标识符,并设置一个错误处理区域,以防图片加载过程中发生错误。
2、如果获取唯一标识符的过程中出现异常,则会将错误信息封装成一个_ErrorImageCompleter
对象,并将其设置为ImageStream
的completer
属性,表示图片加载失败。
3、如果唯一标识符获取成功,则会调用resolveStreamForKey
方法来解析图片,并将图片数据存储到ImageStream
对象中,供后续使用。
4、该方法是ImageProvider
类层次结构的公共入口点,因为它是所有图片提供器的解析方法。子类只需要实现obtainKey
和load
方法来获取图片的唯一标识符和加载图片的数据,而不需要重写resolve
方法。
5、如果子类需要更改使用的ImageStream
的实现方式,则可以重写createStream
方法。如果子类需要管理实际的图像分辨率,则可以重写resolveStreamForKey
方法。例如,AssetImage
类中的createStream
方法返回一个AssetBundleImageStreamCompleter
对象,该对象用于从应用程序资源中加载图片数据。而NetworkImage
类中的resolveStreamForKey
方法使用HTTP客户端从网络上加载图片数据。
6、这段代码中还有一些调试信息,例如将图片提供器、图片配置和图片唯一标识符添加到调试信息中,以便在出现错误时进行调试。
obtainKey
/// Converts an ImageProvider"s settings plus an ImageConfiguration to a key /// that describes the precise image to load. /// /// The type of the key is determined by the subclass. It is a value that /// unambiguously identifies the image (_including its scale_) that the [load] /// method will fetch. Different [ImageProvider]s given the same constructor /// arguments and [ImageConfiguration] objects should return keys that are /// "==" to each other (possibly by using a class for the key that itself /// implements [==]). Future<T> obtainKey(ImageConfiguration configuration);
这段注释是关于obtainKey
方法的说明。该方法是ImageProvider
的子类应该实现的方法之一,用于将ImageProvider
的设置及ImageConfiguration
转换为一个可以唯一标识图片的key
。
不同的ImageProvider
根据相同的构造函数参数和ImageConfiguration
对象应该返回相等的key
,以便于后续加载和缓存图片。key
的类型由子类确定,它应该是一个值,可以唯一地标识出要加载的图片(包括其缩放比例)。
在实现obtainKey
方法时,子类可以考虑使用自定义的类来表示key
,并实现==
方法以保证唯一性。
resolveStreamForKey
@protected void resolveStreamForKey(ImageConfiguration configuration, ImageStream stream, T key, ImageErrorListener handleError) { // This is an unusual edge case where someone has told us that they found // the image we want before getting to this method. We should avoid calling // load again, but still update the image cache with LRU information. if (stream.completer != null) { final ImageStreamCompleter? completer = PaintingBinding.instance.imageCache.putIfAbsent( key, () => stream.completer!, onError: handleError, ); assert(identical(completer, stream.completer)); return; } final ImageStreamCompleter? completer = PaintingBinding.instance.imageCache.putIfAbsent( key, /// 加载 () => loadBuffer(key, PaintingBinding.instance.instantiateImageCodecFromBuffer), onError: handleError, ); if (completer != null) { /// 关键是解析并设置ImageStreamCompleter对象 stream.setCompleter(completer); } }
官方文档解释:
该方法是ImageProvider
的子类应该实现的方法之一,用于根据key
来解析图片。resolveStreamForKey
方法是由resolve
方法调用的,其参数包括ImageConfiguration
、ImageStream
、key
和errorHandler
。子类可以通过实现resolveStreamForKey
方法来管理图片的实际解析过程,同时也可以通过调用errorHandler
来处理解析过程中可能发生的错误。实现resolveStreamForKey
方法时,子类可以考虑使用key
与ImageCache
交互,例如调用ImageCache.putIfAbsent
方法,并向stream
通知监听器。默认实现已经使用key
与ImageCache
交互,子类可以选择调用super.resolveStreamForKey
方法或不调用。
从上面的源码,我们可以知道以下几点:
1、如果stream
对象已经有了 completer
(即已经有了可以加载图片的方式),则将 completer
添加到 ImageCache
中,实现缓存功能,并直接返回。2、如果 stream
对象还没有 completer
,则调用 loadBuffer
方法加载图片,并将其返回的 ImageStreamCompleter
对象添加到 ImageCache
中,同时设置到 stream
对象的 completer
中。3、如果 loadBuffer
方法出现了异常,则会将异常交给 onError
回调处理,以便在异常处理时能够提供详细的错误信息。4、关键是解析并设置ImageStreamCompleter
对象5、PaintingBinding.instance.imageCache.putIfAbsent
方法在内部将ImageStreamListener
对象添加到ImageStreamCompleter
对象的_listeners
数组中了。
PaintingBinding.instance.imageCache.putIfAbsent( key, () => loadBuffer(key, PaintingBinding.instance.instantiateImageCodecFromBuffer), onError: handleError, )
loadBuffer
/// Converts a key into an [ImageStreamCompleter], and begins fetching the /// image. /// /// For backwards-compatibility the default implementation of this method calls /// through to [ImageProvider.load]. However, implementors of this interface should /// only override this method and not [ImageProvider.load], which is deprecated. /// /// The [decode] callback provides the logic to obtain the codec for the /// image. /// /// See also: /// /// * [ResizeImage], for modifying the key to account for cache dimensions. @protected ImageStreamCompleter loadBuffer(T key, DecoderBufferCallback decode) { return load(key, PaintingBinding.instance.instantiateImageCodec); }
从源码我们知道, [ImageProvider.load], which is deprecated
被废弃了。子类只需要重写loadBuffer
方法即可。
load(被废弃)
/// Converts a key into an [ImageStreamCompleter], and begins fetching the /// image. /// /// This method is deprecated. Implement [loadBuffer] for faster image /// loading. Only one of [load] and [loadBuffer] must be implemented, and /// [loadBuffer] is preferred. /// /// The [decode] callback provides the logic to obtain the codec for the /// image. /// /// See also: /// /// * [ResizeImage], for modifying the key to account for cache dimensions. @protected @Deprecated( "Implement loadBuffer for faster image loading. " "This feature was deprecated after v2.13.0-1.0.pre.", ) ImageStreamCompleter load(T key, DecoderCallback decode) { throw UnsupportedError("Implement loadBuffer for faster image loading"); }
从注释可知:
这个方法被废弃了,现在已经不再建议使用了。如果需要更快的图像加载,请实现 [loadBuffer] 方法。在 [load] 和 [loadBuffer] 方法中只需要实现其中一个,而且 [loadBuffer] 更受推荐。
[decode] 回调提供了获取图像编解码器的逻辑。
evict
/// Evicts an entry from the image cache. /// /// Returns a [Future] which indicates whether the value was successfully /// removed. /// /// The [ImageProvider] used does not need to be the same instance that was /// passed to an [Image] widget, but it does need to create a key which is /// equal to one. /// /// The [cache] is optional and defaults to the global image cache. /// /// The [configuration] is optional and defaults to /// [ImageConfiguration.empty]. /// /// {@tool snippet} /// /// The following sample code shows how an image loaded using the [Image] /// widget can be evicted using a [NetworkImage] with a matching URL. /// /// ```dart /// class MyWidget extends StatelessWidget { /// const MyWidget({ /// super.key, /// this.url = " ... ", /// }); /// /// final String url; /// /// @override /// Widget build(BuildContext context) { /// return Image.network(url); /// } /// /// void evictImage() { /// final NetworkImage provider = NetworkImage(url); /// provider.evict().then<void>((bool success) { /// if (success) { /// debugPrint("removed image!"); /// } /// }); /// } /// } /// ``` /// {@end-tool} Future<bool> evict({ ImageCache? cache, ImageConfiguration configuration = ImageConfiguration.empty }) async { cache ??= imageCache; final T key = await obtainKey(configuration); return cache.evict(key); }
这是一个名为evict
的异步方法,它的作用是从图像缓存中删除给定配置下的图片。它有两个可选参数:cache
和configuration
。如果cache
参数为null,则默认使用全局的imageCache
。configuration
参数是一个图像配置,它用于获取将要从缓存中删除的图片的键值。这个方法返回一个Future
对象,表示删除是否成功。如果缓存中没有找到要删除的图片,则返回false
。
列表快速滑动,内存暴增时,可以用这个方法做些事情。
总结
ImageProvider
是Flutter中一个用于提供图像数据的抽象类,它定义了如何从不同的数据源(如文件系统、网络、内存)中获取图像数据,并将其转换成ImageStreamCompleter
对象,以供Image
组件使用。
在Flutter中,使用Image
组件来加载和显示图像,需要先提供一个ImageProvider
对象作为其image
属性的值。ImageProvider
类包含了两个关键的方法:obtainKey
和load
。
obtainKey
方法用于获取一个用于唯一标识图像数据的ImageProvider
对象,这个对象可以用来缓存图像数据,以便在需要重新加载图像时能够快速获取到它。例如,AssetImage
类使用图片资源的路径作为其ImageProvider
对象的标识符,以便在需要重新加载该资源时能够快速地从内存或磁盘缓存中获取到它。
load
方法用于获取一个ImageStreamCompleter
对象,该对象包含了用于绘制图像的图像数据。在Flutter 2.5之前,load
方法是一个抽象方法,必须由子类实现。但是从Flutter 2.5开始,load
方法已被废弃,取而代之的是resolve
方法。resolve
方法接受一个ImageConfiguration
参数,并返回一个Future
对象。它与load
方法的功能类似,都是用于获取图像数据,并将其转换成ImageStreamCompleter
对象,以供Image
组件使用。
使用ImageProvider
类加载和显示图像的流程如下:
ImageProvider
对象,该对象提供了图像数据的来源和标识符。使用ImageProvider
对象作为Image
组件的image
属性的值。Image
组件会调用obtainKey
方法获取一个用于唯一标识图像数据的ImageProvider
对象。Image
组件会调用resolve
方法获取一个Future
对象。当图像数据加载完成后,ImageStreamCompleter
对象会将其通知给Image
组件,Image
组件会将其渲染到屏幕上。
总的来说,ImageProvider
类是Flutter中一个非常重要的类,它提供了一种方便的方式来加载和显示图像。虽然load
方法已被废弃,但是resolve
方法提供了更好的替代方案,可以用于获取图像数据并将其转换成ImageStreamCompleter
对象。
参考链接
Flutter系统网络图片加载流程解析_Android
Flutter入门系列(四)---Flutter图片缓存
Flutter | Image 源码分析与优化方式
困惑解答
第一次加载图片时,stream
对象通常没有completer
。在第一次调用resolveStreamForKey
时,会将stream
对象的completer
与对应的ImageCache
的ImageStreamCompleter
进行绑定,并且completer
会被设置为ImageStreamCompleter
。
以上就是Flutter加载图片流程之ImageProvider源码示例解析的详细内容,更多关于Flutter加载图片ImageProvider的资料请关注脚本之家其它相关文章!
标签:
- 热议:Flutter加载图片流程之ImageProvider源码示例解析
- 世界速讯:义翘神州:2022年净利同比下降57.9% 拟10派20元
- 天天速读:失去“药王”的艾伯维,还可以问鼎行业桂冠吗?
- 世界百事通!贵州大学怎么样_贵州大学资料
- 环球观点:环氧乙烷灭菌器_关于环氧乙烷灭菌器介绍
- 当前速讯:今日美元/加元货币对技术信号分析(2023年4月21日)
- 当前观察:2022年10月江苏宿迁市市属事业单位招聘拟聘用名单公示(第二批次)
- 焦点快报!穆迪谈自己的角色:谦虚地讲我一直都是赢家 我喜欢胜利的时刻
- 全球关注:4月21日基金净值:招商科技动力3个月股票A最新净值0.9311,跌3.58%
- 当前报道:4月21日基金净值:国泰兴泽优选一年持有期混合A最新净值0.8034,跌1.86%
- 当前聚焦:2023年上海夏天几月份开始
- 世界报道:netimmerse override安装了没用_netimmerse override
- 环球微资讯!富宝贷逾期8天不还会上征信吗?
- 环球关注:威和光电2022年净利918.09万同比增长32.61% 销售毛利率上升
- 天天最新:西安翻译学院2门课程获批陕西省特色线上课程立项
- 世界新消息丨鲁故城遗址公园(鲁y古城是哪个城市)
- 短讯!LPR连续8月持平 降息空间收窄
- 每日看点!t95e6和m60哪个好
- 环球观察:梦见蜘蛛是什么意思呀_梦见蜘蛛是什么意思
- 观察:韩国的军事力量排第几_韩国军事实力
- 世界快看点丨积极参与“癌症防治共同行动”,强化肿瘤预防、早筛选、早诊断、早治疗理念
- 全球速讯:一旦名校光环褪去剩下的就是难卖的楼盘和贬值的房产
- 今日讯!买房人速看!这些城市房贷利率或上调,究竟怎么回事?央行也发声
- 每日热议!肃州区就业服务中心: 加强创业孵化载体建设
- 天天快资讯丨华海诚科(688535)龙虎榜数据(04-21)
- 天天头条:雪榕生物4月21日盘中涨幅达5%
- 天天即时看!俄罗斯一渔船在韩国附近海域起火 4人失踪
- 世界热消息:怎么给孩子补锌_儿童缺锌怎么补
- 前沿热点:刚果(金)伊图里省居民频遭极端武装杀害,使馆提醒中国公民加强防范
- 热点评!青未了|最后的木推车
- 世界微速讯:中学生学科网英语_中学学科网英语初中
- 焦点日报:常州周边旅游景点大全两日一晚_常州周边旅游景点大全
- 时讯:swot是什么意思啊_swot是什么意思
- 天天动态:长沙通报4起领导干部利用职权或影响力为亲友牟利典型案例
- 【天天播资讯】【收评】PTA日内下跌1.38% 机构称成本及供需良好 PTA高位震荡
- 【天天播资讯】山东省市场监督管理局抽查空气净化器产品25批次 未发现不合格项目
- 天天快看:大河街改造!泸州这片区域将变身“国潮新街”,未来长这样……
- 天天新消息丨斐色耐FASCINATE携新品亮相AWE2023,为用户提供全场景专业用镜需求方案
- 环球今亮点!四届新乡市卫滨区委第四轮巡察集中反馈会议召开
- 全球消息!信徒造就倪柝声全集 倪柝声全集
- 每日视点!江西取消省内异地就医备案
- 世界最资讯丨乒乓球——2023WTT澳门冠军赛:梁靖昆止步16强
- 世界头条:乌鲁木齐:外贸新优势亮眼,竞争新优势积聚
- 世界资讯:湖北长江出版传媒集团有限公司、长江出版传媒股份有限公司原党委书记、董事长陈义国严重违纪违法被开除党籍和公职
- 天天播报:铜川市零工服务中心——让就业供需“快匹配”
- 全球观点:开斋节将至 驻马里使馆提醒在马侨民关注安全形势、提高防范意识
- 热点!惠升基金管理有限责任公司旗下基金2023年第1季度报告提示性公告
- 焦点报道:小赢卡贷逾期十年多久上征信
- 天天即时:电话骚扰,智能手机治不好的顽症
- 【环球热闻】曼城vs拜仁:集体与个人的完美结合,欧陆之巅从未如此切近
-
【环球报资讯】小池云顶茶园_云顶茶园
1、茶园座落在国家森林公园西部、梅花山南麓边沿、新罗区最高峰黄连盂下、九龙江源头之一的小池镇山狗凹...
-
世界观焦点:伊森:搞不懂所谓的匿名消息人士 是男人就对你自己说的话负责
今天,火箭球员塔里-伊森更新了推特,谈到了体育媒体中的“匿名人士”。他说:“兄弟,那些匿名的NBA球...
-
环球滚动:艺评丨肖学周:试析昌耀与张枣诗歌语言的异同
试析昌耀与张枣诗歌语言的异同文 肖学周(湖南文理学院)如今新诗的历史已满百年,失败论、衰退论的论...
-
观速讯丨美股热门中概股普跌,理想汽车跌超6%
当地时间4月20日,美股热门中概股普跌,纳斯达克中国金龙指数跌53%。理想汽车跌超6%,蔚来、小鹏汽车跌...
-
当前头条:越剧《苏秦》 展“浙江小百花”风采
天津日报讯(记者刘莉莉摄影崔跃勇)昨晚,由浙江小百花越剧院出品、浙江小百花越剧团全新创作演出的新...
-
【世界报资讯】亿纬锂能投资新设大储新能源公司 经营范围含海洋工程装备销售
证券时报e公司讯,企查查APP显示,近日,湖北省大储新能源有限公司成立,注册资本1000万元人民币,经营...
-
【快播报】72岁谭咏麟健康引担忧!肚子大到像10月怀胎腿却很细,跑步显吃力
72岁谭咏麟健康引担忧!肚子大到像10月怀胎腿却很细,跑步显吃力,香港,乐坛,健康,谭咏麟,张国荣,经典歌...
-
【世界速看料】百名中学生走进师大同上劳动美育“工坊实践课”
-
全球播报:基金从业资格证报名官网_基金从业资格证有什么用
1、基金从业资格证作用如下:一、中国基金业协会发布了有关规定,要求私募基金高管、法人、合伙人等应当...
-
世界热推荐:携泰健康2022年净利3861.77万同比下滑3.55% 投资收益减少
挖贝网4月20日,携泰健康(833669)近日发布2022年年度报告,报告期内公司实现营业收入437,350,844 6
-
环球关注:曼联vs塞维评分:恩内斯里9.3分最高 德赫亚5.2 马奎尔5.7
曼联vs塞维评分:恩内斯里9 3分最高德赫亚5 2马奎尔5 7,曼联,塞维,马奎尔,纳瓦斯,恩内斯里,巴西足球,...
-
世界微动态丨中国电信发布2023年第一季度财报 净利润约79.84亿元
近日,据御龙天下了解,中国电信20日晚间公告称,2023年第一季度,该公司营业收入为人民币1297 53亿元...
-
天天精选!建筑学专业适合女生吗_建筑学专业适合女生
1、培养目标本专业培养具备建筑设计、城市设计、室内设计等方面的知识,能在设计部门从事设计工作,并具...
-
今日视点:成都人的运动基因,要从金沙说起……
热意渐浓还有100天第31届世界大学生夏季运动会将在成都拉开帷幕成都这座千年历史文化名城早已被“爱成都...
-
环球关注:观展|从上海车展看新技术:智能化是必选项,通用计算是趋势
在智能化和电动化浪潮愈加猛烈的当下,车展成为车企展示最新最潮技术的舞台。4月18日,第二十届上海国际...
-
快报:常州电子地图 常州电大全称
今天来聊聊关于常州电子地图,常州电大全称的文章,现在就为大家来简单介绍下常州电子地图,常州电大全...
-
精选!捷豹路虎加速电汽化转型,首款纯电车型续航700公里
IT之家4月19日消息,印度塔塔汽车旗下的捷豹路虎(JLR)在当地时间周三宣布了一系列“重塑未来”全球战...
-
【环球新视野】刚刚,央行重磅发声!信息量巨大!
4月20日,人民银行举行2023年一季度金融统计数据有关情况新闻发布会,央行调查统计司司长、新闻发言人阮...
-
每日热点:缅甸又有人因发表敏感言论被抓
缅文媒体消息,4月17日,缅甸国家管理委员会真实新闻宣传组证实称,因在社交软件参与、宣传恐怖暴力思想...
-
当前快看:特斯拉降价并非“没痛苦” 但它是从长远考虑客户价值
最近一个季度,特斯拉公司的利润率受到了降价的冲击,分析师们正在激烈讨论这家汽车制造商接下来会怎么...
-
焦点速看:微软正开发基于Arm的Surface Go 4 采用骁龙7c处理器
微软正计划推出搭载Arm架构处理器的SurfaceGo4和配备11英寸屏幕的新款SurfacePro。
-
【天天速看料】TikTok电商数据服务平台“嘀嗒狗”完成数千万元Pre-A轮融资
鞭牛士4月20日消息,TikTok电商数据服务平台“嘀嗒狗”宣布完成数千万元Pre-A轮融资,由OXYZSeaf
-
热门看点:宜华健康延期至4月29日发布2022年年报
4月20日,宜华健康医疗股份有限公司公布,延期披露2022年年度报告。观点新媒体获悉,宜华健康表示,原计...
-
【全球新视野】不休江湖阵容选哪个最强 不休江湖阵容强力组合推荐
不休江湖是卡牌类型游戏,可以让玩家来到江湖中,执剑走天涯,完成江湖梦想,不过想要更好的体验游戏,...
-
全球热推荐:比5G强10倍!工信部:将推动6G等关键核心技术加速突破
快科技4月20日消息,据国际电联的判断,6G技术会在2030年左右会商用,我国也非常重视6G发展,早在2018年...
-
世界最新:兴业银行“兴公益”惠民驿站推出网点政务服务
“没想到在银行网点也能打印不动产证明,以后就不用特地跑去政务大厅了!”赵女士在兴业银行厦门文滨支行...
-
滚动:青岛税务: 办问协同再升级 一体化服务显高效
半岛网4月20日讯(记者李京媛通讯员范婧霄)“不巧赶着大征期最后一天来处理几件棘手业务,我本以为需要...
-
全球速看:年内套现1.5亿,拟继续减持2%,华谊的“解药”是什么?
过去的四五年里,“缺钱”一直是王忠军、王忠磊两兄弟绕不开的话题。而华谊兄弟也早已失去了昔日的荣光...
-
天天精选!平潭蓝眼泪直播在那里看?
问:2023年平潭蓝眼泪直播在哪看?答:2023年4月4日晚,平潭南澳仔等地出现“蓝眼泪”,平潭融媒体中心...
-
热点聚焦:博俊科技:客户需求增加、子公司产能释放,一季度归母净利润同比增长95.75%
博俊科技4月19日公告,公司2023年第一季度营业收入4 13亿元,同比增长82 91%;归属于上市公司股东的净...
-
环球消息!关于通缩、住户存款增加、存款利率下调、房地产恢复,央行最新回应
4月20日,人民银行举行2023年一季度金融统计数据有关情况举行新闻发布会,就当前市场关心的通胀、存款利...
-
环球新动态:2023五一期间沈阳方特标准票包含夜场吗?
2023五一期间沈阳方特标准票包含夜场吗?包含。五一期间沈阳方特标准票是可以从早上一直畅玩到夜场结束,...
-
最新:干细胞医疗行业的市场竞争力剖析
欲了解更多干细胞医疗行业的未来发展前景,可以点击查看中研普华产业院研究报告《2023-2027年中国干细胞...
-
天天观热点:发掘更多全新市场潜力,搜电共享充电宝实现持续发展
发掘更多全新市场潜力,搜电共享充电宝实现持续发展
-
简讯:3条内裤轮流穿正常吗
3条内裤轮流穿是比较正常的情况,夏天是够的,但如果是冬天的话,可能不太够,因为洗的内裤不一定干透了...
-
当前速看:武汉华夏理工学院:学子在游戏体验中寻找职业方向
你适合哪一类职业发展方向?适合走哪条职业发展路线?来一起游戏闯关确定吧!近日,武汉华夏理工学院桃...
-
环球热讯:2023建筑央企大爆发!新签超2万亿项目!
近日,多家建筑央企发布了2023年第一季度的经营情况的报告。
-
【世界速看料】practisedoing翻译(practisedoing)
1、practise后加doing,如Heispracticingplayingthepiano 。以上就是【practisedoing翻译,prac
-
环球通讯!大乐透23044期侃透玄机预测:前后区胆码
唯彩会分享大乐透23044期侃透玄机预测,查看专家精选胆码、走势图、开奖查询。
-
全球观天下!【世界说】欧媒:美西方霸权“失效” 中东地区将迎多边主义发展“春天”
中国日报网4月19日电据欧洲《现代外交》网站报道指出,随着以美国为首的西方势力的弱化,中东地区的发展...
-
每日速递:方媛晒全家福为4岁小女儿庆生,57岁郭富城太年轻,俩女儿颜值高
4月16日是方媛小女儿的4岁生日,她分享了全家福,感谢郭富城带全家一起去旅行,从配上的图片头像来看,...
-
【独家】2023上海幼儿园信息登记时间+入口+方式
2023上海幼儿园入园信息登记一、登记时间2023年4月20日12:00-4月27日24:00二、登记平台登记系统:上海市...
-
【天天速看料】惠州出台住房公积金管理新规 物业管理费支出不再适用于提取公积金
根据通知,惠州住房公积金汇缴年度为每年7月1日至次年6月30日;月缴存基数的调整工作由原来的5月至7月调...
-
微资讯!保险理赔不合理怎么解决
如果当事人认为保险公司的理赔不合理,并且确实符合法律规定的情况,当事人可以与保险公司的理赔专员协...
-
环球通讯!福建省爱心慈善楷模刘清影:雪中送炭 帮更多人
几十年来受到资助的孩子们给基金会写来的信、寄来的礼物都存放在基金会的办公室里。善行截至2022年底,...
-
焦点资讯:鸿博股份设立数科科技新公司 含功能玻璃和新型光学材料销售业务
证券时报e公司讯,企查查APP显示,近日,福建兴元数科科技有限公司成立,注册资本5000万元,经营范围包...
-
每日速讯:“谷雨”由何而来 与仓颉造字有何关系?专家解惑
“谷雨春光晓,山川黛色青。”春光流转,时光飞逝,我们迎来了春季的最后一个节气——谷雨。谷雨寓意“...
-
世界时讯:国防标准创新信息服务平台上线发布
人民网北京4月19日电(记者赵竹青)4月18日,国防标准创新信息服务平台发布会在北京召开。发布会通过视频...
-
世界简讯:促进人工智能与实体经济深度融合
当前,我国正处于工业经济向数字经济、智能经济迈进的关键时期。在闭幕不久的第三届中国国际消费品博览...
-
焦点短讯!如何加固钩编篮子
你需要的东西气球织物硬挺剂和悬垂液铝箔保鲜膜大而浅的碗棉花球用精致的钩针棉钩编而成的篮子是您家中...
X 关闭
X 关闭