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

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记
使用Flutter私有类涉及的授权协议问题

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/138330726
HuaWei:https://bbs.huaweicloud.com/blogs/426628

【介绍】:本文是一个杂谈,关于使用Flutter私有类涉及的授权协议问题。

flutter-ljc


1. 概述

在我最近的一个项目中,我需要使用 Flutter 框架来开发一个具有复杂图形界面的移动应用。在实现过程中,我发现 Flutter 框架内部的一个私有类 _StarGenerator 非常适合我需要实现的功能。这个类能够生成定制的星形图形,正是我所需要的。然而,由于 _StarGenerator 是一个私有类,直接使用它涉及到一些授权协议的问题。

Flutter 是开源的,遵循 BSD-style 许可协议,这意味着可以自由使用、修改和分发其源代码。但是,使用时需要遵守一些特定的条件,包括保留原始的版权声明,添加必要的许可声明,并且不能使用 Google 或 Flutter 的商标,除非得到明确的书面许可。

因此,我面临的问题是如何合法地使用这个私有类,同时遵守 Flutter 的授权协议。这不仅是一个技术问题,也是一个法律问题,需要我仔细考虑如何处理。在这篇文章中,我将详细探讨使用 Flutter 私有类时涉及的授权协议问题,并分享我如何解决这一问题的经验。

2. 关于Flutter使用的BSD-style协议

2.1 协议内容

Flutter 协议地址为:https://github.com/flutter/flutter/blob/master/LICENSE,内容全文如下:

Copyright 2014 The Flutter Authors. All rights reserved.Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:* Redistributions of source code must retain the above copyrightnotice, this list of conditions and the following disclaimer.* Redistributions in binary form must reproduce the abovecopyright notice, this list of conditions and the followingdisclaimer in the documentation and/or other materials providedwith the distribution.* Neither the name of Google Inc. nor the names of itscontributors may be used to endorse or promote products derivedfrom this software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

其中文翻译为::

版权所有 2014 年 Flutter 作者。保留所有权利。在源代码和二进制形式的再分发和使用中,无论是否进行修改,只要满足以下条件,均允许:源代码的再分发必须保留上述版权声明、条件列表和以下免责声明。二进制形式的再分发必须在文档和/或其他提供的材料中重现上述版权声明、条件列表和以下免责声明。未经特定事先书面许可,不得使用 Google 公司或其贡献者的名称来认可或推广从本软件衍生的产品。本软件由版权所有者和贡献者“按原样”提供,不提供任何明示或暗示的担保,包括但不限于对适销性和特定用途的适用性的担保。在任何情况下,版权所有者或贡献者均不对任何直接、间接、附带、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购、使用、数据或利润损失,或业务中断)承担责任,无论是在合同、严格责任还是侵权行为(包括疏忽或其他方式)的任何理论下,即使已被告知可能发生此类损害。

2.2 协议要点

Flutter 使用的 BSD-style 许可协议是一种非常宽松的开源许可协议,它允许个人和组织在几乎没有限制的情况下使用、修改和分发软件。然而,为了合法地使用 Flutter 框架及其组件,需要遵守以下几个关键要点:

  1. 版权声明保留:在使用 Flutter 源代码或其衍生产品时,必须保留原始的版权声明。这意味着在源代码的再分发中,无论是修改后还是未修改,都必须包含原始的版权声明和免责声明。

  2. 文档和材料中的版权声明:在以二进制形式分发软件时,必须在随软件提供的文档和其他材料中复制版权声明、条件列表和免责声明。这确保了使用者在接收到二进制文件时,也能明确了解到其使用条件和限制。

  3. 商标使用限制:许可协议明确禁止未经授权使用 Google 或其贡献者的名字来推广从 Flutter 框架衍生的产品。这意味着,除非得到 Google 的明确书面许可,否则不能在任何产品推广或广告中使用 Google 的名字。

  4. 免责声明:Flutter 框架和所有相关组件都是在“按原样”基础上提供的,不附带任何形式的明示或暗示的保证。这包括但不限于对商品的适销性和特定用途的适用性的暗示保证。这意味着开发者在使用 Flutter 框架时,需要自行承担使用风险。

  5. 责任限制:在任何情况下,Flutter 的版权所有者或贡献者都不会对任何直接或间接的损害负责,无论这些损害是如何引起的,也不论责任理论如何(包括合同责任、严格责任或侵权行为(包括疏忽或其他))。

3. 使用Flutter中未暴露的成员

在Flutter开发中,我们经常会遇到框架内部定义的私有成员或类,这些成员虽然在框架的内部被广泛使用,但并没有在公共API中暴露。这些私有成员包括函数、变量以及类等。虽然这些私有成员可能非常适合我们的需求,直接使用它们却涉及到一些特定的风险和限制。

3.1 风险

  1. 兼容性问题:私有成员在未来的Flutter版本中可能会被修改或完全移除。因为它们不是公开的API的一部分,Flutter开发团队不保证这些私有成员的稳定性和向后兼容性。这意味着依赖这些私有成员的应用或库可能在未来的Flutter更新后无法正常工作。

  2. 维护难度:使用未公开的成员会使得代码的维护变得更加困难。如果这些成员的实现发生变化,开发者需要投入额外的时间和资源来调整自己的应用以适应这些变化。

  3. 法律和许可问题:虽然Flutter的BSD许可证允许修改和再分发代码,但直接复制和修改Flutter框架内部的代码可能需要在项目中包含适当的版权声明和许可声明,这增加了合规的复杂性。

3.2 解决方案

3.2.1 寻找公开的替代方案

在使用私有成员之前,应首先寻找是否有公开的API可以达到同样的目的。Flutter社区和官方文档是获取这些信息的好资源。

3.2.2复制代码直接使用

如果必须使用某些私有功能,我们需要考虑许可和版权问题。

根据 Flutter 的许可协议(BSD-style license),你可以自由地使用、修改和分发 Flutter 框架的源代码,但需要遵守以下条件:

  1. 保留原始的版权声明。

  2. 在你的代码中添加一个许可声明,说明你的代码基于 Flutter 框架,并提供一个链接到 Flutter 的许可协议。

  3. 你不能使用 Google 或 Flutter 的商标,除非得到明确的书面许可。

因此,如果你直接复制了某个私有类的实现,你需要:

  1. 保留该私有类中原有的版权声明(如果有的话)。

  2. 在你的代码中添加一个许可声明,说明你的代码基于 Flutter 框架,并提供一个链接到 Flutter 的许可协议。例如,一个模板如下:

// Copyright 2023 Your Name. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.// This code is based on the Flutter framework.
// Flutter is licensed under the BSD-style license:
// https://github.com/flutter/flutter/blob/master/LICENSE// 下面是代码直接使用了Flutter私有成员的代码

4. 结论

在本文中,我们探讨了使用 Flutter 框架中未公开的私有类和成员时涉及的授权协议问题。详细分析 Flutter 的 BSD-style 许可协议,讨论了直接使用 Flutter 私有成员的潜在风险。

不过虽然使用 Flutter 私有类和成员可能在某些情况下看似方便,但要考虑遵守开源协议的规定、维护代码的兼容性和可维护性,以及避免潜在的法律风险才是更为稳妥和可持续的做法。

最后,开发者应当在充分理解相关许可协议的基础上,做出明智的技术和法律选择,以确保他们的项目既能利用到 Flutter 强大的功能,同时也符合开源社区的规范和精神。

相关文章:

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…...

面试过程种遇到的面试题收集

文章目录 讲一讲这个项目是干什么的?需求规格说明书有哪些章节?职工部门层级如何显示在一张SQL表上?需求开发用到了哪些技术?HashMap 底层数据结构说一下?介绍一下红黑树?HashMap是线程不安全的&#xff0c…...

Vue学习:21.mixins混入

在Vue中,mixins(混入)是一种用于分发Vue组件中可复用功能的灵活机制。它们允许你抽取组件中的共享功能,如数据、计算属性、方法、生命周期钩子等,并将其作为单独的模块复用到多个组件中。这种方式有助于保持代码的DRY&…...

上传文件到 linux

一、mac 法一:scp 先进入mac的 Node_exporter文件(要上传的文件)目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz,然后…...

NEO 学习之session7

文章目录 选项 A:它涉及学习标记数据。 选项 B:它需要预定义的输出标签进行训练。 选项 C:它涉及在未标记的数据中寻找模式和关系。 选项 D:它专注于根据输入-输出对进行预测。 答案:选项 C 描述了无监督学习的本质&am…...

毕业设计uniapp+vue有机农产品商城系统 销售统计图 微信小程序

本人在网上找了一下这方面的数据发现农村中的信心普及率很是低农民们都不是怎么会用手机顶多就是打打电话发发短信,平时不太会上网更不会想到通过网络手段去卖出自己的劳作成果—农产品,这无疑大大浪费了农民的劳动成果和国家资源也大大打击了人们的生产…...

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…...

metabase部署与实践

1. 项目目标 (1)了解metabase特点 (2)熟练部署metabase工具 (3)掌握metabase基本使用 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 metabase 10.0.1.141 metabase 2.2. 基础准备 系统镜…...

nacos v2.2.3 docker简单安装使用

nacos v2.2.3 docker简单安装使用 Nacos 官方文档: https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html 控制台: http://127.0.0.1:8848/nacos/ 初始用户名、密码: 账号:nacos 密码:nacos 启动docker…...

java设计模式-生成器模式

文章目录 生成器模式(Builder)1、目的和适用场景2、角色和职责3、实现步骤4、示例15、示例26、优点7、示例场景 生成器模式(Builder) 生成器模式(Builder Pattern)是一种创建型设计模式,它用于…...

《前端面试题》- TypeScript - TypeScript的优/缺点

问题 简述TypeScript的优/缺点 答案 优点 增强了代码的可读性和可维护性包容性,js可以直接改成ts,ts编译报错也可以生成js文件,兼容第三方库,即使不是ts编写的社区活跃,完全支持es6 缺点 增加学习成本增加开发成…...

微服务---feign调用服务

目录 Feign简介 Feign的作用 Feign的使用步骤 引入依赖 具体业务逻辑 配置日志 在其它服务中使用接口 接着上一篇博客,我们讲过了nacos的基础使用,知道它是注册服务用的,接下来我们我们思考如果一个服务需要调用另一个服务的接口信息&…...

刷题笔记 - 滑动窗口

文章目录 滑动窗口最长无重复子串最小覆盖子串串联所有单词的子串长度最小的子数组滑动窗口最大值字符串的排列最小区间 滑动窗口 所有题目来自leetcode的回答:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/3982/hua-d…...

Docker搭建LNMP+Wordpress的实验

目录 一、项目的介绍 1、项目需求 2、服务器环境 3、任务需求 二、Linux系统基础镜像 三、部署Nginx 1、建立工作目录 2、编写Dockerfile 3、准备nginx.conf配置文件 4、设置自定义网段和创建镜像和容器 5、启动镜像容器 6、验证nginx 三、Mysql 1、建立工作目录…...

使用Python Pandas实现两表对应列相加(即使表头不同)

目录 引言 Pandas库简介 实现对应列相加 步骤一:加载数据 步骤二:重命名列 步骤三:对应列相加 步骤四:保存结果 案例分析 结论 引言 在数据分析和处理的日常工作中,我们经常会遇到需要将来自不同数据源的数据…...

Linux 虚拟主机切换php版本及参数

我使用的Hostease的Linux虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机,但是没有找到切换PHP以及查看PHP有哪些版本的位置,因此咨询了Hostease的技术支持,寻求帮助了解到可以实现在cPanel面板上找到此切换PHP版本的按钮&…...

Content-Type详解

...

GaussDB数据库SQL系列-复合查询

目录 一、前言 二、复合查询基础 三、实际应用示例 1、使用UNION合并查询结果 2、使用INTERSECT找出共同元素 3、使用EXCEPT排除特定结果 四、高级技巧 1、子查询实例 2、JOIN的应用 五、总结 一、前言 GaussDB是华为自主创新研发的分布式关系型数据库,具…...

【Unity】修改模型透明度

在 Unity 中修改模型透明度主要有两种方法:通过材质和通过着色器。以下是两种方法的步骤和解释: 方法 1:通过材质 在 Unity 编辑器中,选择你想要修改透明度的模型。在 Inspector 窗口中,找到模型的 Renderer 组件&am…...

第五篇:通信脉络:探索计算机外设与总线体系的精髓

通信脉络:探索计算机外设与总线体系的精髓 1 引言 在这个技术日新月异的时代,理解计算机系统的基本构成要素 —— 总线和外设 —— 对于每个从事技术工作的人来说都是至关重要的。这些组件不仅是计算机通信的基石,也直接影响着系统的性能、效…...

24.5.5(离散化+树状数组,线段树)

星期一: dp题单 背包 第四题 混可乐 cf传送门 思路:条件可演化为每种可乐值为 ai-n,选最少的可乐使总和为0(具体可看官方题解 到这会发现背包并不适合了,其实这是道bfs伪装的背包…...

C语言 | Leetcode C语言题解之第69题x的平方根

题目&#xff1a; 题解&#xff1a; int mySqrt(int x) {long int i 0;for(i0;;i){long int a i*i;long int b (i1)*(i1);if(a < x&&b > x){break;}}return i; }...

静态分配IP,解决本地连接不上Linux虚拟机的问题

在Window环境下&#xff0c;使用远程终端工具连接不了VMware搭建的Linux虚拟机&#xff08;CentOS 7&#xff09;&#xff0c;并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题&#xff1a; 1 查看虚拟机网关地址 在VMware虚拟机上…...

每日JAVA高级面试题

Java 高级面试问题及答案 以下是几个Java高级面试中可能会问到的问题&#xff0c;包括问题、答案以及一些探讨过程。 问题1: 请解释Java中的多线程以及线程池的使用场景和优势 答案&#xff1a; Java中的多线程允许程序执行多个任务&#xff0c;从而提高应用程序的响应速度和…...

修改JupyterNotebook文件存储位置

Jupyter Notebook 1、通过AnaConda安装Jupyter Notebok 2、在开始菜单里找到并打开Anaconda Prompt&#xff0c;输入如下命令&#xff0c;然后执行。 jupyter notebook --generate-config4、打开以下文件 找到 C:/Userzh/.../.jupyter 打开 jupyter_notebook_config.py 取消…...

python Flask路由系统如何影响应用性能的一些关键点

Flask的路由系统对应用性能的影响主要体现在路由匹配和分发请求的效率上。以下是关于Flask路由系统如何影响应用性能的一些关键点&#xff1a; 路由匹配方式&#xff1a;Flask支持精准匹配和模糊匹配两种方式。精准匹配是指URL中的路径和定义的路由规则完全匹配&#xff0c;而…...

nodejs的ws+vue3编写聊天室的demo

nodejs编写ws服务是非常简单高效的&#xff0c;nodejs有众多的实现ws的库&#xff0c;如ws,SocketIO等&#xff0c;nodejs的事件线程是单线程的&#xff0c;所以不要在事件线程内做阻塞性的操作&#xff0c;耗时的操作交给工作线程或者子进程操作。 我使用nodejsvue3实现了写了…...

《MySQL数据类型》

文章目录 一、理解数据本身就是一种约束1.tinyint类型和 tinyint unsigned类型2.其他的int类型 二、bit类型三、float类型1.signed版本注意2.unsigned版本 四、decimal类型float 和 decimal 总结五、char类型&#xff08;固定长度&#xff09;六、varchar类型&#xff08;可变长…...

解决windows中的WSL Ubuntu子系统忘记root密码和用户密码问题

1、以管理员身份运行PowerShell 2、在powershell中执行wsl.exe --user root wsl.exe --user root如果出现了上面的报错&#xff0c;则需要运行步骤3、4&#xff0c;然后在执行步骤5改密码&#xff0c;如果没有出错&#xff0c;请直接跳到第5步改密码操作&#xff01;&#xff…...

数据分析——业务指标分析

业务指标分析 前言一、业务指标分析的定义二、业务问题构建问题构建的要求 三、业务问题的识别在识别问题的阶段对于企业内部收益者的补充 四、竞争者分析竞争者分析的内容竞争者分析目的案例 五、市场机会识别好的市场机会必须满足的条件市场机会案例 六、风险控制数据分析师常…...

如何在百度网站收录提交入口/网站推广途径

1、外行人能转行做程序员吗&#xff1f; 这个问题其实从我上面的亲身经历中就已经有了答案。那就是&#xff1a;能。但可能性有多大&#xff1f;英语和数学不好怎么办&#xff1f;如何才能转行成程序员&#xff1f; 先看一个数据&#xff1a;中国目前的程序员总数大概为800万&a…...

网站建设的具体步骤有哪些/百度搜索热度指数

• Spring MVC 通过反射机制对目标处理方法进行解析&#xff0c;将请 求消息绑定到处理方法的入参中。数据绑定的核心部件是 DataBinder&#xff0c;运行机制如下&#xff1a;...

产品网站推广方案/搜索引擎技巧

目录一、 LATEX简介二、LATEX环境配置方案&#xff08;TeXLiveWinedtSumatraPDF&#xff09;2.1 编译工具TeXLive2.2 编辑器WinEdt2.3 轻量级PDF软件SumatraPDF参考资料一、 LATEX简介 LaTeX&#xff08;/ˈlɑːtɛx/&#xff0c;常被读作/ˈlɑːtɛk/或/ˈleɪtɛk/&#x…...

wordpress在线播放avi/最简单的营销方案

会话控制&#xff1a; 因为HTTP协议是无状态的&#xff0c;服务器不知道用户上一次做了什么&#xff0c;这严重阻碍了交互式 web应用程序的实现。HTTP不通过额外的手段&#xff0c;服务器并不知道用户做了什么&#xff0c;为了做 到这一点&#xff0c;就需要使用cookie和sessi…...

如何做seo整站优化/被逆冬seo课程欺骗了

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09;首先说说string和char*: 1、概述 在C语言中&#xff1a; string是字符串&#xff0c;而char*是字符指针。二者不是在什么时候都等价&#xff0c;当字符指针指向的地址保存了一个字符串&#x…...

wordpress后台中文/太原网站推广排名

最新Linux自动化运维系列④ Shell高级脚本自动化编程实战798资源网免责声明&#xff1a;[ 最新Linux自动化运维系列④ Shell高级脚本自动化编程实战 ] 由分享人 一只***57 于 2019-07-08 08:47 上传到百度网盘。此页面由蜘蛛程序自动抓取&#xff0c;以非人工方式自动生成&…...