Flutter 如何将代码显示到界面上

2023-05-05 10:12:14 来源: 博客园
前言

如何优雅的将项目中的代码,亦或是你的demo代码展示到界面上?本文对使用简单、便于维护且通用的解决方案,进行相关的对比和探究


(相关资料图)

为了节省大家的时间,把最终解决方案的相关接入和用法写在前面

预览代码快速开始接入:pub,github
dependencies:  code_preview: ^0.1.5
用法:CodePreview,提供需要预览的className,可自动匹配该类对应的代码文件本来想把写法简化成传入对象,但是因为一些原因无奈放弃,改成了className具体可以参考下面Flutter Web中的问题模块的说明
import "package:code_preview/code_preview.dart";import "package:flutter/material.dart";class Test extends StatelessWidget {  const Test({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return const CodePreview(className: "Test");  }}
使用效果:flutter_smart_dialog配置代码文件

因为原理是遍历资源文件,所以必须将需要展示的代码文件或者其文件夹路径,定义在assets下,这步操作,为大家提供了一个自动化的插件解决

强烈建议需要展示到界面的代码,都放在统一的文件夹里管理

展示界面的代码需要在pugspec.yaml中的assets定义

如果代码预览的文件夹,分级复杂,每次都需要定义路径实在麻烦

提供一个插件:Flutter Code Helper

安装:Plugins中搜索Flutter Code Helperpugspec.yaml中定义下需要自动生成文件夹的路径,文件夹随便套娃,会自动帮你递归在assets下生成不需要自动生成,可:不写该配置,或者配置空数组(auto_folder: [])
code_helper:  auto_folder: [ "assets/", "lib/widgets/" ]

说明下:上面的插件是基于RayC的FlutterAssetsGenerator插件项目改的

看了下RayC的插件代码和相关功能,和我预想的上面功能实现有一定出入,改动起来变动较大想试下插件项目的各种新配置,直接拉到最新后期如果想到需要什么功能,方便随时添加

所以没向其插件里面提pr,就单独新开了个插件项目

高级使用

主题

提供俩种代码样式主题

日间模式
CodePreview.config = CodePreviewConfig(codeTheme: CodeTheme.light);
夜间模式
CodePreview.config = CodePreviewConfig(codeTheme: CodeTheme.dark);

注释解析

你可以使用如下的格式,在类上添加注释key的前面必须加@,举例(@title,@xxx)key与value的之间,必须使用分号分割,举例(@xxx: xxx)value如果需要换行,换行的文案前必须加中划线
/// @title:///  - test title one///  - test title two/// @content: test content/// @description: test descriptionclass OneWidget extends StatelessWidget {  const OneWidget({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return const Placeholder();  }}
然后可以从customBuilder的回调获取param参数,param中拥有parseParam参数获取取得上面注释的数据:param.parseParam["title"]或者param.parseParam["***"]获取的value的类型是List,可兼容多行value的类型customBuilder的用法codeWidget内置的代码预览布局,如果你想定义自己预览代码的布局,那就可以不使用codeWidget一般来说,可以根据注释获取的数据,结合codeWidget嵌套来自定义符合要求的布局param中含有多个有用内容,可自行查看
import "package:code_preview/code_preview.dart";import "package:flutter/material.dart";class Test extends StatelessWidget {  const Test({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return CodePreview(      className: "OneWidget",      customBuilder: (Widget codeWidget, CustomParam? param) {        debugPrint(param?.parseParam["title"].toString());        debugPrint(param?.parseParam["content"].toString());        debugPrint(param?.parseParam["description"].toString());        return codeWidget;      },    );  }}
目前内部预览的布局,会自动去掉类上的注释,如果想保留注释,可自行匹配下
CodePreview.config = CodePreviewConfig(removeParseComment: false);
几种代码预览方案FlutterUnit方案https://github.com/toly1994328/FlutterUnit

FlutterUnit项目也是自带代码预览方案,这套方案是比较特殊方案

大概看了下,整个FlutterUnit的数据都是基于flutter.db,该文件里面就有相关demo的文本信息所有的demo也是单独存在一个叫widgets的项目中所以大概可以猜测出应该会有个db的辅助工具,会去扫描widgets的项目中的demo代码将他们的文本信息都扫描出来,然后解析上面的注释等相关信息,分类存储到数据库中,最后生成db文件映射表,宿主可以通过db中的组件类名,从这里拿到demo效果实例

总结

整套流程看下来,实现起来的工作量还是有点大的

db辅助工具的编写文本注释相关解析规则如何便捷的维护db文件(辅助工具是否支持,生成后自动覆盖宿主db文件)不同平台db文件的读取和相关适配

优点

因为扫描工具不依赖Flutter相关库,预览方案可以快速的移植到其它编程语言(compose,SwiftUI等)具备高度自定义,因为是完全独立的第三方扫描工具,可以随性所欲的定制化

缺点

最明显的缺点,应该就是稍微改下demo代码,就需要三方工具重新生成db文件(如果三方工具实现的是cli工具,可以将扫描生成命令和push等命令集成一起,应该可以比较好的避免该问题)build_runner方案https://pub.dev/packages/build_runner

build_runner是个强大代码自动生成工具,根据ast语法树+自定义注解信息,可以生成很多强大的附属代码信息,例如json_serializable等库

所以,也能利用这点自定义类注解,获取到对应的整个类的代码信息,在对应附属的xx.g.dart文件中,将获取的代码内容转换成字符串,然后直接将xx.g.dart文件的代码字符串信息,展示到界面就行了

优点

可以通过生成命令,全自动的生成代码,甚至将整个预览demo的映射表都可以自动配置完成可以规范的通过注解配置多个参数

缺点

因为build_runner需要解析整个ast语法树,一旦项目很大之后,解析生成的时间会非常非常的长!因为现在很多的这类库都是依赖build_runner,所以跑自动生成命令,会导致巨多xx.g.dart文件被改动,极大的增加cr工作量资源文件方案

这应该最常用的一种方案

pubspec.yaml中的assets中定义下我们代码文件路径
flutter:  assets:    - lib/widgets/show/
然后用loadString获取文件内容
final code = await rootBundle.loadString("lib/widgets/show/custome_dialog_animation.dart");

优点

侵入性非常低,不会像build_runnner方案那样影响到其它模块便于维护,如果demo预览代码被改变了,打包的时候,资源文件也会生成对应改变后的代码文件

缺点

使用麻烦,使用的时候需要传入具体的文件路径,才能找到想要的代码资源文件需要反复的在pubspec.yaml中的assets里面定义文件路径资源文件方案优化

上面的三种方案各有优缺点,明确当前的诉求

目前是想写个简单的,通用的,仅在Flutter中实现代码预览方案

要求使用简单,高效

维护简单,多人开发的时候不会有很大成本

FlutterUnit方案:实现起来成本较大,且多人开发对单个db文件的维护很可能会有点问题,例如:更新代码的时候,db文件忘记更新

build_runner方案:生成时间是个问题,还有很对其他类型xx.g.dart文件产生影响也比较麻烦

资源文件方案:整体是符合预期的,但是使用时候,需要传入路径和pubspec.yaml中反复定义文件路径,这是俩个很大痛点

结合实现成本和诉求,选择资源文件方案,下面对其痛点进行优化

使用优化

Flutter的编译产物中,有个相当有用的文件:AssetManifest.json

AssetManifest.json文件里面,有所有的资源文件的路径,然后就简单了,我们只需要读取该文件内容

final manifestContent = await rootBundle.loadString("AssetManifest.json");

获取到所有的路径之后,再结合传入的类名,读取所有路径的文件内容,然后和传入的类名做正则匹配就行了

稍微优化

将传入的类名,转换为下划线名称和所有路径名称做匹配,如果能匹配上,再进行内容匹配,匹配成功后就返回该文件的代码内容如果上述匹配失败,就进行兜底的全量匹配

优化前

import "package:code_preview/code_preview.dart";import "package:flutter/material.dart";class Test extends StatelessWidget {  const Test({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return const CodePreview(path: "lib/widgets/show/custome_dialog_animation.dart");  }}

优化后

import "package:code_preview/code_preview.dart";import "package:flutter/material.dart";class Test extends StatelessWidget {  const Test({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return const CodePreview(className: "CustomDialogAnimation");  }}
一般来说,我是统一配置预览demo和className,这样比较好对照路径定义优化

本来是想在pubspec.yamlassets里面直接写通配符定义全路径,然后悲剧了,它不支持这种写法

flutter:  assets:    - lib/widgets/**/*.dart

GG,只能想其他办法了,想了很多方法都不行,只能从外部入手,用idea插件的形式,实现自动化扫描生成路径

安装:Plugins中搜索Flutter Code Helperpugspec.yaml中定义下需要自动生成文件夹的目录,文件夹随便套娃,会自动帮你递归在assets下生成不需要自动生成,可:不写该配置,或者配置空数组(auto_folder: [])
code_helper:  auto_folder: [ "assets/", "lib/widgets/" ]
Flutter Web中的问题魔幻的runtimeType

flutter web的release模式中

dart2js 会压缩 JS,这样会使得类型名被改变例如:dart中的TestWidgetFunction类的runtimeType,可能会变成minified:Ah,而不是TestWidgetFunction

为啥需要压缩呢?压缩名称可以使得编译器将 JavaScript体积缩小 3 倍+;精确等效语义和性能/代码大小之间的权衡,Dart明显是选择了后者

这种情况只会在Flutter Web的release模式下发生,其他平台和Flutter web的Debug | Profile模式都不会有这种问题;所以说Xxx.runtimeType.toString,并不一定会得到预期内的数据。。。

具体讨论可参考

https://github.com/dart-lang/sdk/issues/35052https://github.com/flutter/flutter/issues/78041

解决思路

将压缩类型minified:Ah恢复成 Test将获取的Test字符串使用相同算法压缩成minified:Ah

如有知道如何实现的,务必告诉鄙人

下面从压缩级别调整的角度,探究是否可解决该问题

dart2js压缩说明

注:flutter build web默认的是O4优化级别

O0: 禁用许多优化。O1: 启用默认优化(仅是dart2js该命令的默认级别)O2: 在O1优化基础上,尊重语言语义且对所有程序安全的其他优化(例如缩小)备注:使用-O2,使用开发JavaScript编译器编译时,类型的字符串表示不再与Dart VM中的字符串表示相同O3: 在O2优化基础上,并省略隐式类型检查。注意:省略类型检查可能会导致应用程序因类型错误而崩溃O4: 在O3优化基础上,启用更积极的优化注意:O4优化容易受到输入数据变化的影响,在依赖O4之前,需测试用户输入中的边缘情况

下面是flutter新建项目,未做任何改动,不同压缩级别的js产物体积

# main.dart.js: 7.379MBflutter build web --dart2js-optimization O0 # main.dart.js: 5.073MBflutter build web --dart2js-optimization O1# main.dart.js: 1.776MBflutter build web --dart2js-optimization O2# main.dart.js: 1.716MBflutter build web --dart2js-optimization O3# main.dart.js: 1.687MBflutter build web --dart2js-optimization O4
总结预期用法为什么想使用对象?因为当对象名称改变时,对应使用的地方,可以便捷观察到需要改变可以使用传入的对象实例,在内部使用runtimeType获取类型名,再进行相关匹配
CodePreview(code: Test());

但是

综上可知,使用flutter build web --dart2js-optimization O1编译的flutter web release产物,能够使得runtimeType的语义和Dart VM中字符串保持一致

但是该压缩级别下的,js体积过于夸张,务必会对加载速度产生极大影响,可想而知,在复杂项目中的体积增涨肯定更加离谱

对于想要用法更加简单,使用低级别压缩命令打包的想法需要舍弃

用法不得已做妥协
CodePreview(className: "Test");

这是个让我非常纠结的思路历程

最后

到这里也结束了,自我感觉,对大家应该能有一些帮助

一般来说,大部分团队,都会有个自己的内部组件库,因为Flutter强大的跨平台特性,所以就能很轻松的发布到web平台,可以方便的体验各种组件的效果,结合文章中的代码预览方案,就可以更加快速的上手各种组件用法了~

好了,下次再见了,靓仔们!

标签:

Flutter 如何将代码显示到界面上

如何优雅的将项目中的代码,亦或是你的demo代码展示到界面上?本文对使用简单、便于维护且通用的解决方案,

05-05 10:12:14

还有什么是广西人不敢烤着吃的? 世界热门

广西的夜,若没了烧烤,便失了灵魂。

05-05 10:13:09

每日热门:吕梁老年公寓有哪些?吕梁老年公寓名单

1 汾阳市老年公寓▪床位数量:80张▪详细地址:汾阳海洪区2 交口县万寿山老年公寓▪床位数量:102张▪详细

05-05 09:38:36

【天天速看料】​河南禹州:墙绘艺术扮靓美丽乡村

绿树掩映之下,灰白相间的墙体,色彩鲜艳的墙画,格外引人瞩目……2023年5月4日,记者来到群山环绕的河...

05-05 09:17:12

5月5日生意社异辛醇基准价为9185.71元/吨 全球关注

5月5日,生意社异辛醇基准价为9185 71元 吨,与本月初(9100 00元 吨)相比,上涨了0 94%。异辛醇年度统计(2022-05-05--2023

05-05 08:59:30

今日要闻!GE医疗独立上市后调整中国战略,全面国产化或成跨国药械企业未来方向

GE医疗独立上市后调整中国战略,全面国产化或成跨国药械企业未来方向,中国,医疗器械,医疗技术,ge医疗,药械企业

05-05 08:16:10

【全球聚看点】离谱,房企各部门都开始独立谋生了

离谱,房企各部门都开始独立谋生了,万科,代建,房地产,碧桂园,旭辉地产

05-05 07:59:15

天天看热讯:新股公告 | 绿竹生物-B(02480)公开发售获认购约3.25倍 每股发售价32.8港元

智通财经APP讯,绿竹生物-B(02480)公布配售结果,发售价为每股发售股份32 80港元,每手200股,预期股份将于

05-05 07:00:40

5月4日基金净值:易方达上证50增强A最新净值1.8438,涨0.28%

5月4日,易方达上证50增强A最新单位净值为1 8438元,累计净值为3 7938元,较前一交易日上涨0 28%。历史数据

05-05 06:22:04

快看:广东潮南警方通报一起殴打他人案件:5名涉案嫌疑人已全部到案

本文转自【平安潮南】;情况通报 5月2日15时许,潮南区陈店镇上宅村发生一起殴打他人案件。目前,周某坤正

05-05 05:58:14

盲井迅雷下载 每日热门

今天来聊聊关于盲井迅雷下载的文章,现在就为大家来简单介绍下盲井迅雷下载,希望对各位小伙伴们有所帮助。

05-05 04:07:54

全球热点评!祝人生日快乐的文案小作文_祝人生日快乐的文案

1、在这个属于你最灿烂的日子里,我诚挚的送上一句最古老但又是最新鲜出炉的祝福:生日快乐!终身美丽!2、

05-05 02:06:41

视点!3月大型SUV交强险数:奔驰GLS月销1666辆 北京BJ90售出197辆

从整体份额来看,大型SUV市场相比中大型SUV市场要小很多,但因为有丰田兰德酷路泽、奔驰GLS等明星车型,这

05-04 23:56:00

对象捕捉快捷键是什么(对象捕捉快捷键)

1、第一步,输入快捷键div(等分的意思),回车或者空格。2、第二步,光标变成小方格后,提示选择对象。这

05-04 22:16:54

2022唱片公司十大品牌排行榜_唱片公司哪个牌子好

1、UNIVERSAL环球音乐2、索尼音乐3、Warner华纳音乐4、滚石唱片5、英皇娱乐EEG6、华谊兄弟7、福茂唱片

05-04 21:39:09

用网购祛痣膏点痣,23岁男孩脸被腐蚀“毁容”_今头条

长江日报大武汉客户端5月4日讯妈妈网购祛痣膏给儿子点脸上的痣,不料儿子面部被腐蚀毁容。得知要接受至少半

05-04 21:11:52

城发环境一季度净利润同增逾三成 天天新动态

日前,城发环境披露2023年第一季度报告。公司一季度营业收入15 21亿元,同比增长27 54%;归属于上市公司股

05-04 20:23:53

切实做好节假日期间渔业安全生产执法监管-全球动态

2023年“三月三”和“五一”节假日期间,梧州市农业农村局积极采取各种有效措施,全力以赴保障渔业安全...

05-04 19:52:06

大学怎么学规划样习做 全球看热讯

1、大学怎么学规划01 学习规划与目标大学学习不再像中学那样,每天时间都很紧张,安排得很紧凑。大学相对来

05-04 19:26:45

中评镜头:基隆港迎史上最大吨位邮轮荣耀号

基隆港4日清晨7点多,迎接历年来最大吨位的邮轮“地中海荣耀号MSC Bellissima”首航挂靠,总吨重达17万159

05-04 18:53:06

如何撤销代书遗嘱-速递

名下有许多的财产,担心自己有一天会遭遇不测后财产处理不当,有些人早早的就找个专业的律师代书遗嘱。但是

05-04 18:25:04

劳动法旷工多少天算自动离职_劳动法规定旷工多少天可以解除劳动合同

1、一、劳动法规定旷工多少天可以解除劳动合同?过去职工奖惩条例明确规定,连续旷工15天,累计旷工30天的,

05-04 18:07:10

男子在湖边休闲丢了包,民警通过监控找到他 独家

扬子晚报网5月4日讯(记者任国勇通讯员栖公宣)5月2日中午,南京栖霞区万达茂警务站接到仙林湖附近一市民报

05-04 17:28:41

新青年的专属座驾来啦!小牛电动2023春夏新品亮点抢先看-天天即时看

5月4日,全球智能城市出行解决方案提供商小牛电动在官网上线了新品预热海报,暗影线条勾勒出的独特产品形态

05-04 16:58:57

财政部:2023年中央财政继续支持实施并启动新的农村综合性改革试点试验-全球看热讯

讯(记者金朝力陆珊珊)5月4日,财政部发布《关于做好2023年农村综合性改革试点试验有关工作的通知》提出

05-04 16:40:36

标致2008中期改款曝光,今年夏天全球上市!

近日,标致公开了第二代2008中期改款车型。新款2008将于今年夏天在全球上市。标致的小型SUV2008在2013年上

05-04 16:12:07

「聚焦贵阳马拉松」线上线下开赛!2023贵阳马拉松将于6月10日鸣枪起跑

5月4日上午,2023贵阳马拉松赛新闻发布会举行,宣布2023贵阳马拉松将于6月10日鸣枪起跑。随后,贵州省体育

05-04 15:57:07

平凡而温暖的小人物作文(热门44篇) 微速讯

平凡而温暖的小人物作文第1篇我们身边总有这样一些小人物,他们总在为我们的家园默默奉献,他们的精神像太

05-04 15:43:01

惠厦保怎么报销 有两种报销方式

惠厦保是一款普惠型补充商业医疗保险,投保该保险之后,若是发生了符合保障内容范围的医疗费用,是可以申请

05-04 15:02:40

我市拟开展一处生态保护修复工程 位于翔安九溪口-大嶝大桥段-天天热议

近日,记者从厦门市生态环境局网站获悉,我市拟开展一处生态保护修复工程——九溪口-大嶝大桥段海洋生态...

05-04 14:42:36

超实用!B端表格设计技巧大全,果断收藏!

表格作为展现结构化数据最为清晰、高效的形式,常和按钮、搜索、筛选、分页等其他元素一起协同,构成表格页

05-04 13:55:06

天天滚动:2023鹤壁最好的十大高中

2023鹤壁最好的十大高中分别是:1 鹤壁市外国语中学;2 鹤壁高中;3 浚县第一中学;4 鹤壁市第一中学;5 浚

05-04 13:06:35

热资讯!综合国力_关于综合国力介绍

1、综合国力(ComprehensiveNationalPower)是衡量一个国家基本国情和基本资源最重要的指标

05-04 12:48:14

宁夏银川旅游必去十大景点 银川必去的旅游十大景点排行榜-资讯

可能大家对于银川的旅游景点都不是非常了解,但是小编说一个非常非常经典的场景大家应该知道,那就是《大话

05-04 12:10:53

通达海净利下滑10%却“10转增5派10元” 深交所追问:分红比例是否与业绩增长幅度匹配

通达海还需说明此次利润分配及资本公积金转增股本方案制订的具体过程,包括方案的提议人、参与筹划人、内部

05-04 11:44:34

天天快看:天津外地车高峰通行证申请材料一览

➤➤天津外地车高峰通行证申请材料一览答:天津外埠号牌小型、微型载客汽车(北京号牌除外)办理高峰通行证的

05-04 11:11:58

吉林化纤(000420):1.2万吨碳纤维复材项目前端碳化线已达产_当前动态

  有投资者在投资者互动平台向吉林化纤(000420 SZ)提问,“请问公司碳纤维生产线量

05-04 10:56:26

小鹏四月汽车销量超7000辆 新车G6也将在年中上市

【CNMO新闻】5月1日,CNMO注意到,小鹏汽车方面也公布了自己在2023年4月份的汽车交付成绩。作为国内的造车

05-04 10:51:33

郭艾伦5字暗示复出,杨鸣回应不背锅,钟豪大莫抱摔苏群透露实情

前言辽宁队杨鸣甩锅若争议,郭艾伦发话暗示复出,莫兰德跟许钟豪双双犯规,而苏群说出了大实话。辽宁队跟广

05-04 10:21:58

全国双一流大学专业排名_全国985211双一流大学一览表

1、一般没有特别权威的排名说是哪个大学一定排第几,只是有一个大概的范围,各个层次内排名不分先后。2、前

05-04 09:45:29

演员黄渤人民日报撰文:挖掘生活里的故事,表现好故事里的生活 环球消息

文艺创作要经得起时代检验和历史沉淀,文艺工作者就必须厚植人民情怀,投入时代洪流,激发青春理想,用有温

05-04 09:37:03

双预警!中央气象台发布暴雨蓝色预警+强对流蓝色预警

双预警!中央气象台发布暴雨蓝色预警+强对流蓝色预警。

05-04 09:11:56

李梦高调秀3号战袍 张隆前妻最新发声三个字硬刚到底:等开庭

北京时间5月4日,李梦参加了新东家神秘人队的新赛季媒体日,她高调秀3号战袍,引发热议。而张隆前妻也回应

05-04 08:16:41

沃特股份(002886.SZ):已就高性能聚合物超滤膜的关键技术进行合作研发

格隆汇5月4日丨有投资者在投资者互动平台向沃特股份提问,“聚砜在医疗方面比如血液透析应用空间很大,...

05-04 07:50:01

30+23+5+4打爆勇士内线!你已经是湖人老大!史诗级一战刷8大纪录 天天新要闻

7 这是自沙克-奥尼尔后,首次有湖人球员在季后赛的比赛中砍下30+20的数据,这对戴维斯和詹姆斯来说是一个非

05-04 06:31:23

【南篱/黄金】关于加息,黄金有它自己的想法 当前资讯

2023 05 03周三文 南篱各位好,我是南篱,一个财经人。人生的旅程就是这样,用大把时间迷茫,在几个瞬间成

05-04 05:48:44

每日速讯:千里送鹅毛的下一句是什么_千里送鹅毛的下一句

1、千里送鹅毛,下一句是:礼轻情意重。2、现在用它来表示“虽然我送的礼物不贵重,但我对你的情意却很...

05-04 03:41:36

孙美红|环球观点

1、孙美红,现任山西农业大学职工。2、。文章到此就分享结束,希望对大家有所帮助。

05-04 01:03:33

2023年4月26日境内美元同业拆放参考利率

2023年4月26日境内美元同业拆放参考利率

05-03 22:39:03

中方要求缅方严厉打击网络诈骗

国务委员兼外长秦刚访问缅甸期间,要求缅方严厉打击网络诈骗犯罪。秦刚指出,缅甸边境地区长期盘踞电信网络

05-03 22:12:13

还有什么是广西人不敢烤着吃的? 世界热门
每日热门:吕梁老年公寓有哪些?吕梁老年公寓名单
【天天速看料】​河南禹州:墙绘艺术扮靓美丽乡村
5月5日生意社异辛醇基准价为9185.71元/吨 全球关注
今日要闻!GE医疗独立上市后调整中国战略,全面国产化或成跨国药械企业未来方向
【全球聚看点】离谱,房企各部门都开始独立谋生了
天天看热讯:新股公告 | 绿竹生物-B(02480)公开发售获认购约3.25倍 每股发售价32.8港元
5月4日基金净值:易方达上证50增强A最新净值1.8438,涨0.28%
快看:广东潮南警方通报一起殴打他人案件:5名涉案嫌疑人已全部到案
盲井迅雷下载 每日热门
全球热点评!祝人生日快乐的文案小作文_祝人生日快乐的文案
视点!3月大型SUV交强险数:奔驰GLS月销1666辆 北京BJ90售出197辆
对象捕捉快捷键是什么(对象捕捉快捷键)
2022唱片公司十大品牌排行榜_唱片公司哪个牌子好
用网购祛痣膏点痣,23岁男孩脸被腐蚀“毁容”_今头条
城发环境一季度净利润同增逾三成 天天新动态
切实做好节假日期间渔业安全生产执法监管-全球动态
大学怎么学规划样习做 全球看热讯
中评镜头:基隆港迎史上最大吨位邮轮荣耀号
如何撤销代书遗嘱-速递
劳动法旷工多少天算自动离职_劳动法规定旷工多少天可以解除劳动合同
男子在湖边休闲丢了包,民警通过监控找到他 独家
新青年的专属座驾来啦!小牛电动2023春夏新品亮点抢先看-天天即时看
财政部:2023年中央财政继续支持实施并启动新的农村综合性改革试点试验-全球看热讯
标致2008中期改款曝光,今年夏天全球上市!
「聚焦贵阳马拉松」线上线下开赛!2023贵阳马拉松将于6月10日鸣枪起跑
平凡而温暖的小人物作文(热门44篇) 微速讯
惠厦保怎么报销 有两种报销方式
我市拟开展一处生态保护修复工程 位于翔安九溪口-大嶝大桥段-天天热议
超实用!B端表格设计技巧大全,果断收藏!
天天滚动:2023鹤壁最好的十大高中
热资讯!综合国力_关于综合国力介绍
宁夏银川旅游必去十大景点 银川必去的旅游十大景点排行榜-资讯
通达海净利下滑10%却“10转增5派10元” 深交所追问:分红比例是否与业绩增长幅度匹配
天天快看:天津外地车高峰通行证申请材料一览
吉林化纤(000420):1.2万吨碳纤维复材项目前端碳化线已达产_当前动态
小鹏四月汽车销量超7000辆 新车G6也将在年中上市
郭艾伦5字暗示复出,杨鸣回应不背锅,钟豪大莫抱摔苏群透露实情
全国双一流大学专业排名_全国985211双一流大学一览表
演员黄渤人民日报撰文:挖掘生活里的故事,表现好故事里的生活 环球消息
双预警!中央气象台发布暴雨蓝色预警+强对流蓝色预警
李梦高调秀3号战袍 张隆前妻最新发声三个字硬刚到底:等开庭
沃特股份(002886.SZ):已就高性能聚合物超滤膜的关键技术进行合作研发
30+23+5+4打爆勇士内线!你已经是湖人老大!史诗级一战刷8大纪录 天天新要闻
【南篱/黄金】关于加息,黄金有它自己的想法 当前资讯
每日速讯:千里送鹅毛的下一句是什么_千里送鹅毛的下一句
孙美红|环球观点
2023年4月26日境内美元同业拆放参考利率
中方要求缅方严厉打击网络诈骗
每日速读!香港理工大学本科申请_香港理工大学怎么样
X 广告
行业动态
X 广告

Copyright ©  2015-2022 亚太植物网版权所有  备案号:沪ICP备2020036824号-11   联系邮箱: 562 66 29@qq.com