Flutter私服搭建之package查询

news2025/1/11 23:48:59

温馨提示:这是一篇私有的package客户端查询的平台搭建文章,牵扯到python中的Djiango框架,虽和Flutter相关,但客户端的代码并没有关联,请您根据需要进行阅读。

公有的package,对于一个Flutter开发者而言,再熟悉不过,比如常见的网络库dio,存储库shared_preferences等等,我们都可以在官网进行查找和使用,中文地址:https://flutter.cn/,很方便的就可以找到package网址,如下图所示:

点击打开之后,如下图,我们就可以查找想要的三方库。

在一些特定的环境下,自己公司封装的库,不适合于发布到公有的仓库中,那么就需要搭建一套私有的仓库,和Android中的私有Maven是一个道理,私有的服务端仓库,搭建起来很是简单,因为官方已经给我们提供了,地址是:https://github.com/dart-archive/pub_server,我们只需要按照流程,就可以完美的实现,在这里就不过多介绍,本篇重在于解决如何查看,也就是客户端查看,而不是上传,请各位老铁须知。

私有的package存储服务搭建好之后,一般来说就足够了,只需要把使用方式整理成一个文档即可,但是,如果上传的package足够多,而且公司的开发人员又足够多,那么开发一个针对性的查看平台类似与官网提供的查看就很有必要了。

目前客户端查看实现的方案,有官网提供,当然也有一些三方提供,大家可以根据自己公司需求进行选择性使用,这里采用的是自己从0到1开发,旨在一个简单易用。

本篇的内容大概如下:

1、最终的实现效果一览

2、采用哪种语言作为接口开发

3、前端UI设计以及搭建

4、如何获取package对应的相关信息

5、路由设置和页面返回

6、相关总结

一、最终的实现效果一览

UI效果主打简洁,和官网的风格,简单的保持一致,内容区域只展示基本的内容,别的什么也不展示,以动画的形式,展示左右结构,只有简单的检索和列表展示及简单的内容展示。

首页

搜索页面

内容展示页面

右侧为测试内容,点击想要的Item后,以动画的形式滑入。

二、采用哪种语言作为接口开发

既然作为一个客户端查看,难免需要一个服务端作为支持,不然内容从哪来?服务端主要负责提供package检索和内容的返回,客户端负责内容展示,基于这是一个比较小得项目,选择一个轻量级的语言比较好,一开始选的是php,奈何最近一段时间对python比较感兴趣,于是就选择使用python作为服务端语言,使用的是比较成熟的Djiango框架。

关于Djiango框架,这里不做过多介绍,后续准备了相关文章进行着重的概述,所以啊铁子们,需要注意,虽是开发的Flutter的私有package查看,但是呢,用的是python,这个大家一定要熟知。

三、前端UI设计以及搭建

关于前端的UI,确实没什么好设计的,都是遵循着极简的模式,能多简单就多简单,一共三个页面,都是html文件,第一个是首页,第二个是搜索和内容展示页,第三个是上传package介绍页。这里着重介绍下搜索和内容展示页面。

搜索和内容展示页面,搜索的时候是以列表的形式展示,点击相关Item后,左边展示列表,右边展示内容,有一个动态切换的效果,这里简单的做了一个小动画。

  $(".list_name").each(function () {
                $(this).click(function () {
                    //点击之后查看详情
                    $(".list_div").animate({marginLeft: "5%", width: "40%"});
                    setTimeout(function () {
                        $(".list_content").css("display", "block");
                        $(".list_content").animate({right: "5%"});
                    }, 300);
                    //请求接口信息
                    $.get("../queryReadMe?fileName=gwm_lib", function (data) {
                        let content = data.data;

                        var converter = new showdown.Converter();
                        var html = converter.makeHtml(content);
                        $(".list_text").html(html);
                    });
                });
            });

为了支持md文件加载,这里使用了一个第三方showdown.min.js,当然了在实际的开发中,大家可以随意。

关于填充内容,使用的是Djiango的模板,主要用于分离文档的表现形式和内容,和Vue使用起来很像。

<div class="pub_div">
    <div class="pub_input_div">
        <input class="pub_input" placeholder="Search packages"/>
        <img src="../static/img/pub_search.png" class="pub_search"/>
    </div>
    <!--搜索结果页-->
    <div class="list_div">
        {% if count > 0 %}
            {% for search in searchList %}
                <div class="list_item">
                    <div class="list_name">{{ search.name }}</div>
                    <div class="list_author">
                        最新版本:<span style="font-style: italic;color: #7a8dc5;">{{ search.version }}</span>
                        作者:{{ search.author }}
                    </div>
                    <div class="list_description">{{ search.description }}</div>
                    <div class="list_time">
                        {{ search.time }}
                    </div>
                </div>
            {% endfor %}
        {% else %}
            <div class="list_no">暂时没有数据</div>
        {% endif %}
    </div>
    <!--使用详情-->
    <div class="list_content">
        <div class="list_text">

        </div>
    </div>
</div>

四、如何获取package对应的相关信息

当服务端搭建完成之后,便可以按照相关流程,上传自己的package,无论谁去上传,最终都会存到一个路径下,比如,我做为测试用的,所有的package都上传到了E盘下的tmp目录下的package-db。

在package-db目录下,存放的就是所有上传到私服的package,目前做为测试,仅上传了一个,我们继续打开:

每个package下存放的就是各个对应的版本号,再往下,就是存放的资源了。

知道了上传的基本目录结构后,一个问题就来了,如何拿到package的相关信息呢?比如名字,时间,版本号,作者,如何使用等?

其实大家,可以发现,在每个版本号的里面都有一个yaml文件,而这个yaml文件里就是我们上传到package时所填的一些信息,如下所示:

我们只需要逐行读取信息就可以拿到了,拿到信息之后,我们就可以用一个数组存储起来,组成我们需要的列表了。

只提供package而不提供如何使用,显然是不科学的,形同鸡肋,会让人懵逼,最终会造成,你这个package怎么使用?方法怎么调?属性怎么使用?没有一个简单的使用说明,会让人望而却步。

但是,使用方式如何获取呢?当我们开源一个库,为了让别人了解如何使用,一般都会在哪里书写呢?README啊,是不是,随便去github上扒拉一个不错的开源,相信都会有一个README文件,同样的,我们再上传package时,尽量也书写一下README文件,在README里书写相关使用方式或步骤即可,有了README文件,在上传的时候就会跟着一起上传,如下图,它是在tar.gz压缩包里:

压缩文件目录:

打开README文件,是不是发现和上边的截图内容展示一样,没错,所谓的package使用方式,就是通过读取压缩文件里的README内容而来的。

通过以上的分析,我们便可以拿到我们想要的内容,如,名字,版本号,描述,作者,上传时间,使用方式等等,具体的代码如下:

# Flutter私有库查询列表页面
def package(request):
    key = request.GET.get("key")
    packagePath = "E:\\tmp\\package-db"
    rootPath = os.listdir(packagePath)
    # 遍历,查找一样的
    endList = []
    for path in rootPath:
        if path.find(key) != -1:
            # 继续寻找,找到最大的一个版本号
            versionPath = packagePath + "\\" + path
            versionList = os.listdir(versionPath)
            # 找出最大的一个版本号
            versionDir = versionList[len(versionList) - 1]
            # 遍历Yaml文件后,读取内容
            versionYamlPath = versionPath + "\\" + versionDir + "\\pubspec.yaml"
            # 读取内容
            file = open(versionYamlPath, "r", encoding="UTF-8")
            lines = file.readlines()  # 读取所有的行数
            name = lines[0].replace("\n", "").replace("name: ", "")  # 名字
            description = lines[1].replace("\n", "").replace("description: ", "")  # 描述信息
            version = lines[2].replace("\n", "").replace("version: ", "")  # 版本号
            author = lines[3].replace("\n", "").replace("author: ", "")  # 作者
            c_time = os.path.getctime(versionYamlPath)
            e_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(c_time))
            json = {"name": name, "version": version, "description": description, "author": author, "time": e_time}
            endList.append(json)
    cou = len(endList)
    return render(request, "flutter/pubList.html", {"searchList": endList, "count": cou})

五、路由设置和页面返回

每个Djiango框架都有一个对应的urls文件,也就是路由文件,在这个文件里,我们可以设置我们跳转的页面,请求的接口等信息。

path('flutter/pub', index.pub),  # Flutter私有库查询首页面
path('flutter/package', index.package),  # Flutter私有库查询列表页面
path('flutter/packageUpload', index.packageUpload),  # Flutter私有库如何上传页面

路由指向的页面配置

# Flutter私有库查询首页面
def pub(request):
    return render(request, "flutter/pub.html")


# Flutter私有库如何上传页面
def packageUpload(request):
    return render(request, "flutter/pubUpload.html")

六、相关总结

基于Djiango框架,就简单的实现了一个客户端的package查询页面,前边也说过,不一定非得要使用python来作为服务端,使用php或者Java又或者其他语言都是可行的,最主要的就是选择一个自己熟悉的语言,这样写起来才比较顺手。

还有需要注意的是,如果官网和一些三方提供的package查询,能够满足我们的需求,我们也可以直接使用,没有必要再从0到1进行开发。

按照往常的文章风格,最后我都会贴出来源码或者开源地址,但是呢,实在是过于简单,如果大家了解了Djiango后,就会发现这些都是基本的知识点,所以就不贴了,但是主要的代码,都在文中介绍了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos + lnmp + tp6部署的项目,访问的时候经常出现No input file specified

1.检查路径设置 检查你的 Nginx 配置文件是否正确指定了 PHP 路径&#xff0c;确认文件路径是否正确。同时&#xff0c;确保你的 Web 服务器具有访问权限。 server { listen 80; server_name example.com; root /usr/share/nginx/html; index index.html ind…

汽车电子行业ECU烧录工艺人必须面对的重要课题

在汽车电子行业ECU烧录是很一个关键工序&#xff0c;如何有效地通过对它的过程进行管控是每个工艺人必须面对的重要课题。 为了解决烧录过程管控的问题&#xff0c;我们合共软件针对汽车电子行业研发的HG MES中有专门的烧录模块用于应对这一问题。对ECU烧录管控的核心目标是如…

MySQL 数据库的命令操作

文章目录 一.Mysql数据库的基本概念二.Mysql数据库系统发展史三.现主流Mysql数据库介绍四.关系数据库五.非关系数据库介绍六.MySQL安装方法1. 创建新的数据库2.创建新的表3.删除指定的数据库4.删除指定的数据表5.向数据表中插入新的数据记录6.修改、更新数据表中的数据记录7.在…

腾讯云对象存储COS及CDN加速配置

1. 登陆腾讯云官网&#xff0c;进入腾讯云对象存储COS控制台 腾讯云&#xff1a;https://cloud.tencent.com 2. 创建存储空间 3. 添加自定义CDN加速域名 在腾讯云COS的指定的存储桶中添加自定义CDN加速域名 在阿里云官网添加一个解析记录&#xff0c;等待两分钟就可以用该域名…

新书上市丨开启学习自然语言处理与ChatGPT的精彩旅程,你需要这本书!

2022年10月30日&#xff0c;ChatGPT 的横空出世&#xff0c;引起了全球范围内的广泛关注。微软创始人比尔盖茨 (Bill Gates) 认为 “ChatGTP 与互联网具有同等重要的意义”。作为一个人工智能系统&#xff0c;ChatGPT 能准确识别用户意图&#xff0c;与用户进行对话并提供有价值…

postgresql优化案例三:recheck cond

文章目录 1.SQL语句2.查看改善前执行计划:3.解决方案3.1增加work_mem的size3.2.创建合适的索引 4.改善后执行计划 1.SQL语句 delete from sap_dispatchingd_hist awhere exists (select 1 from sap_dispatchingm_hist b where a.ffact_nob.ffact_noand a.fsfc_nob.fsfc_noand …

正确认识:DOTA-CH2-Alkynyl(HCl salt),螯合剂修饰肽,物理化学性质参数

1.试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; DOTA-CH2-Alkynyl(HCl salt)使用有机溶剂或浓盐酸&#xff08;HCl&#xff09;&#xff0c;在酸化的环境中螯合剂修饰肽的主要优点是高效率和不存在有机溶剂。它可以应用于多种…

给清洁设备以“生命”,国邦从生产型制造走向服务型制造的转型之路|案例研究

国邦协同科技&#xff08;广州&#xff09;有限公司&#xff08;以下简称“国邦”&#xff09;成立于2011年&#xff0c;是行业领先的清洁解决方案服务商&#xff0c;致力于为客户提供全周期清洁解决方案&#xff0c;提高其清洁品质及效率。在2016年到2020年连续5年的时间里&am…

python 操作配置文件。

一&#xff1a;配置文件 1. 什么是配置文件 配置文件是为程序配置参数和初始设置的文件。一般为文本文件&#xff0c;以ini,conf,cnf,cfg,yaml等作为后缀名。 例如mysql的配置文件my.cnf内容如下&#xff1a; [mysqld] # Only allow connections from localhost bind-addre…

Java30天拿下---第三天(选择,循环,二重循环语句,输入,调试,标签)

Java30天拿下---第三天 一 流程图二 选择结构简单的if-else嵌套的if-else多重if的选择语句&#xff08;else-if&#xff09;switch语句 二 输入验证三 程序调试四 循环结构while循环do-while循环for循环流程控制二重循环&#xff08;重点&#xff09; 五 标签 label&#xff08…

中国移动云能力中心捐赠 secScanner 和 ksPack 项目,助力openEuler社区繁荣发展

2023 开放原子全球开源峰会于 6 月 11 日至 13 日在全球数字经济大会期间召开。本届大会以“开源赋能、普惠未来”为主题&#xff0c;全面展示开源技术应用&#xff0c;聚焦全球开源生态最新发展与前沿技术动态。中国移动云能力中心张胜举出席本次大会&#xff0c;并代表移动云…

618仿冒百出,如何保护品牌不受侵害|上云那些事

随着直播带货的兴起&#xff0c;如今的618&#xff0c;更多消费者选择在直播间下单。与传统电商不同的消费体验背后&#xff0c;是消费模式和销售渠道的改变&#xff0c;而与传统电商比较成熟的渠道风控相比&#xff0c;直播间则成为了不法分子潜伏的温床&#xff1a;大量号称“…

电能质量监测和分析仪器的设计与应用

安科瑞虞佳豪 随着电气环境中自动化程度的提高,以电力电子技术为代表的各种整流、逆变、变频等非线性负载比重不断变大,加之调控手段不完善及外来干扰等原因,使得电能质量下降。基于计算机、微处理器控制的电子仪器在国民经济企业中大量使用,对供电质量的敏感程度越来越高,对电…

Go语言精进之路读书笔记—第二章项目结构、代码风格与标识符命名

上面是go语言库项目结构&#xff0c;细节补充如下&#xff1a; cmd目录&#xff1a; 存放项目要构建的可执行文件对应的main包源文件。 pkg目录&#xff1a; 项目自身要使用并且同样也是可执行文件对应main包要依赖的库文件。 makefile&#xff1a; 代码任何第三方构建工具脚本…

二、Kibana简介与安装

目录 1、下载 2、安装 3、启动运行 4、访问http://localhost:5601 5、使用kibana工具查询elasticsearch 6、汉化kibana Kibana是一个开源的分析与可视化平台&#xff0c;设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana…

虹科教您 | 多功能时间敏感网络流量记录仪RELY-TSN-REC操作指南与基本功能测试

1. 设备描述 RELY-TSN-REC 是一款基于 RELYUM 灵活开放平台的强大网络流量记录器。 该设备可以使用 IEEE 802.1AS 通过连接到专用端口的外部主时钟进行同步&#xff0c;并为捕获的流量提供精确的时间戳。该设备可以安装在时间敏感网络(TSN)以太网网络中&#xff0c;并可以在TA…

VCL界面控件DevExpress VCL v23.1.3全新首发 - 支持Windows 11新主题

DevExpress VCL Controls是Devexpress公司旗下最老牌的用户界面套包&#xff0c;所包含的控件有&#xff1a;数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验&#xff0c;提供高影响力的业务解决方案&#xff0c;并利用您现有的VCL技能为未来构建下…

公开信发起人Tegmark:中国得天独厚,为AI安全和治理做贡献丨2023智源大会回顾...

导读 近日&#xff0c;MIT教授、「暂停大型AI实验」公开信的发起人之一Max Tegmark发表了题为「如何掌控 AI」的精彩演说&#xff0c;介绍了发展可控 AI 的重要意义&#xff0c;提出了通过「机械可解释性」实现可控 AI 的技术路线&#xff0c;同时也肯定了中国在 AI 安全领域的…

2自由度并联仿生腿的制作

1. 运动功能说明 本文实例将实现2自由度并联仿生腿模组运动起来&#xff0c;模拟实现狗腿行走的动作。 2. 结构说明 2自由度并联仿生腿模组是由两个舵机驱动的&#xff0c;它的所有动作都将在两个舵机的配合运动下实现。 3. 运动原理说明 2自由度并联仿生腿模组运动的点位如下…

【Vue】学习笔记-Vue UI组件库

学习笔记-Vue UI组件库 常用UI组件库移动端常用UI组件库PC端常用UI组件库element-ui 基本使用element-ui 按需引入 常用UI组件库 移动端常用UI组件库 VantCube UIMint UIhttps://nutui.jd.com/#/ PC端常用UI组件库 Element UIIView UI element-ui 基本使用 安装element:n…