扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
看你上传到哪里把,群文件和钉盘随便上传都可以,只要是正规的。如果第三方加入的功能的话,可以先入住。
东台ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
1,开放平台注册申请权限。
2,选择钉钉应用类型,创建应用,获取AppKey,AppSecret,CORP_ID。
3,准备开发环境 静态页面、JS,CSS放在ngnix,本地接口用tomcat。(这个我在想flutter 如何能够放到里面不是太理解)。
4,调试:钉钉的H5微应用调试只能“真机”调试,所以建议调试的时候使用内网穿透工具。
5,JSAPI免登授权码 获取当前钉钉登录用户的账号信息,需要通过免登授权码换取 (这个需要后端api进行辅助 前端和后端才能进行通信。
1、进入设置,找到更多设置,然后设置权限,禁用第三方优化软件,情景模式、省电软件等,这些可能使声音禁止使用。
2、重刷固件,并且清除数据。就可解决flutter播放网易mp3没声音的问题。
[img]Flutter支持稳定的桌面设备开发已经一段时间了,不得不说,Flutter多平台支持的特性真的很香。我本人并没有任何桌面开发的经验,但仍然使用Flutter开发出了一个桌面版小程序,功能很简单,就是对输入的json做格式化处理和转模型。
话不多说,先来看看实际效果。 项目源码地址
开发环境如下:
Flutter : 2.8.1
Dart : 2.15.1
IDE : VSCode
JSON作为我们日常开发工作中经常要打交道的一种数据格式,它共有6种数据类型: null , num , string , object , array , bool 。我们势必对它又爱又恨。爱他因为他作为数据处理的一种格式确实非常方便简洁。但是在我们做Flutter开发中,又需要接触到json解析时,就会感觉非常棘手,因为flutter没有反射,导致json转模型这块需要手写那繁杂的映射关系。就像下面这样子。
数据量少还能接受,一旦量大,那么光手写这个解析方法都能让你怀疑人生。更何况手写还有出错的可能。好在官方有个工具**json_serializable**可以自动生成这块转换代码,也解决了flutter界json转模型的空缺。当然,业界也有专门解析json的网站,可以自动生成dart代码,使用者在生成后复制进项目中即可,也是非常方便的。
本项目以json解析为切入点,和大家一起来看下flutter是如何开发桌面应用的。
要让我们的flutter项目支持桌面设备。我们首先需要修改下flutter的设置。如下,让我们的项目支持 windows 和 macos 系统。
接下来使用 flutter create 命令创建我们的模版工程。
创建完项目后,我们就可以 run 起来了。
先来看下整体界面,界面四块,分别为功能模块、文件选择模块、输入模块、输出模块。
我们在新建一个桌面应用时,默认的模版又一个Appbar,此时应用可以用鼠标拖拽移动,放大缩小,还可以缩到很小。但是,我们一旦去掉这个导航栏,那么窗口就不能用鼠标拖动了,并且我们往往不希望用户将我们的窗口缩放的很小,这会导致页面异常,一些重要信息都展示不全。因此这里需要借助第三方组件 bitsdojo_window 。通过 bitsdojo_window ,我们可以实现窗口的定制化,拖动,最小尺寸,最大尺寸,窗口边框,窗口顶部放大、缩小、关闭的按钮等。
通过 InkWell 组件,可以捕捉到手势、鼠标、触控笔的移动和停留位置
这个功能是鼠标移动后的UI交互界面。要在窗口上显示一个提示框,可以使用 Overlay 。需要注意的是,由于在 Overlay 上的 text 的根结点不是 Material 风格的组件,因此会出现黄色的下划线。因此一定要用 Material 包一下 text 。并且你必须给创建的 OverlayEntry 一个位置,否则它将全屏显示。
读取说表拖拽的文件一开始想尝试使用 InkWell 组件,但是这个组件无法识别拖拽中的鼠标,并且也无法从中拿到文件信息。因此放弃。后来从文章《Flutter-2天写个桌面端APP》中发现一个可读取拖拽文件的组件 desktop_drop ,能满足要求。
使用开源组件 file_picker ,选完图片后的操作和拖拽选择图片后的操作一致。
Textfield 如果要显示富文本,那么需要自定义 TextEditingController 。并重写 buildTextSpan 方法。
在做导出功能时遇到下列报错,保存提示为没有权限访问对应目录下的文件。
通过Apple的开发文档找到有关权限问题的说明。其中有个授权私钥的key为 com.apple.security.files.downloads.read-write ,表示 对用户的下载文件夹的读/写访问权限 。那么,使用Xcode打开Flutter项目中的mac应用,修改工程目录下的 DebugProfile.entitlements 文件,向 entitlements 文件中添加 com.apple.security.files.downloads.read-write ,并将值设置为YES,保存后重启Flutter项目。发现已经可以向下载目录中读写文件了。
当然,这是正常操作。还有个骚操作就是关闭系统的沙盒机制。将 entitlements 文件的 App Sandbox 设置为NO。这样我们就可以访问任意路径了。当然关闭应用的沙盒也就相当于关闭了应用的防护机制,因此这个选项慎用。
原文地址:
成功后示例
开发前准备:
1,开放平台注册申请权限
2,选择钉钉应用类型,创建应用,获取AppKey,AppSecret,CORP_ID
3,准备开发环境 静态页面、JS,CSS放在ngnix,本地接口用tomcat。(这个我在想flutter 如何能够放到里面不是太理解)
4,调试:钉钉的H5微应用调试只能“真机”调试,所以 建议 调试的时候使用 内网穿透工具 ;
5,JSAPI免登授权码 获取当前钉钉登录用户的账号信息,需要通过免登授权码换取 (这个需要后端api进行辅助 前端和后端才能进行通信)
在开发者后台添加完大概就这样了, 其他信息:如 回调URL(在服务端搭好之后填写), 首页地址等, 后续可以修改.
1. 相关配置参数可参照上面 应用基础信息 那张图来一 一对应 .
2. 所有的关键信息 是存储在服务端的, 如我们的suiteKey/suiteSecret/suiteTicket/aesKey/token;
3. 所以和钉钉相关的数据交互都是在服务端,后台完成的, 除了获取免登授权码;
4. 我们的前端和我们的服务端交互过程中, corpId 由前端获取 , 传递给我们;
5. 服务端和钉钉交互所使用的accessToken , 可以每次都去钉钉重新获取, 但是更建议在有效期内, 后端获取一次, 然后存储在前端, 每次的数据交互将token 传递给后端;
6. 钉钉向我们服务器发送请求, 也就是钉钉应用里面的回调地址;
7. 钉钉的所有消息都是通过回调通知我们的, 而且消息的结构是一致的;
根据上面的相关说明将服务端放置在自己的公网服务器也好,或者使用相关的 内网穿透工具 也好 (自行解决)
总之, 现在要有一个可以 访问我们 服务端项目的 公网地址
确保你自己的服务器可以使用公网地址访问到,并且成功返回数据;
同时确保:
必须有回调地址借口用来接收钉钉发送的消息; (本文示例地址:/ding/callback)
必须有一个接收免登授权码和企业corpId 来返回用户信息的接口; (本文示例地址:/ding/login )
公网可以访问的服务端地址, 接收钉钉发给我们的消息(回调地址)如:,我们自己的登录地址,如:
在钉钉开发者平台创建配置好的一个H5微应用;
确保服务端的参数和微应用的基础信息一致;
完成上述步骤,在客户端依旧是没有应用入口的,如:
下面需要在开发者平台进行授权
最后能在钉钉上使用了 基本就是这样一个流程 如果感觉不太详细 点击下面链接看就可以
以上文章通过读
没有引用极光推送包 之前得权限:
-访问网络
-修改/删除SDK卡中的内容
-拍照
-控制震动器
-查看网络状态
-查看WLANK状态
-读取手机状态和身份【去掉 tx_device_id 包 该权限没有 】
极光推送包引入后 手机权限多了以下这些:
-修改全局系统设置
-装载和卸载文件系统
-显示系统及警报
-大概位置
-更改WLAN状态
-精准的(GPS)位置
-访问额外的位置信息提供程序命令
-更改网络连接性
-检索当前运行的应用程序
仓库地址:
pub 地址:
修改 MainActivity.kt 让 MainActivity 继承 qiuxiang.android_window.AndroidWindowActivity :
创建 MainApplication.kt :
修改 AndroidManifest.xml 的 application 新增属性 android:name=".MainApplication" :
main.dart:
我们需要用 @pragma('vm:entry-point') 声明一个入口函数,默认函数名是 androidWindow ,当然你可以随意指定一个,只是调用 open 的时候需要同时指定参数 entryPoint: 。
android_window.dart:
浮窗 app 的写法就和我们平时写的 app 没什么区别了,如果需要支持窗口拖拽移动,则要在最外层使用 AndroidWindow 。
最终效果:
更完整的示例请参考:
主应用和浮窗都有 post 和 setHandler 方法用于发送消息以及设置监听处理函数。用法举例:
主应用发送消息到浮窗:
浮窗监听并处理主应用消息:
反过来同理。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流