flutter记录,flutter 简书

Flutter 蓝牙插件 flutter_blue 坑点记录

Android:

成都创新互联公司长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为绥化企业提供专业的网站制作、成都网站建设绥化网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

添加蓝牙/定位权限

文件地址:Flutter项目文件夹/android/app/src/main/java/AndroidManifest.xml

iOS:

添加蓝牙权限

文件地址:Flutter项目文件夹/ios/Runner/Info.plist

运行Flutter 在Android端安装的时候Androidstudio提示这个错误:

原因:出现这个错误的原因是我引入的第三方库最低支持版本高于我的项目的最低支持版本,异常中的信息显示:我的项目的最低支持版本为,而第三方库的最低支持版本为x),所以抛出了这个异常。

解决办法:文件地址:Flutter项目文件夹/android/app/src/main/java/AndroidManifest.xml

中添加

问题出现在Android端,连接蓝牙设备后,匹配特征值的时候

报:set_notification_error,编写描述符时出错。

原因:

我个人的分析,设备是使用标准的Android API用于蓝牙,必须等待回调,该回调表明之前的GATT操作已完成(onDescriptorWrite),直到可以编写下一个描述符以启用特征通知。也就是程序有个通过特征性UUID比较的工作顺序,由于信号不好,或者是信号缓冲之类的原因,造成蓝牙可能流程一步一步走不下来。

解决:

setNotifyValue(true) 添加延时操作

[img]

Flutter项目遇到的问题及解决方法记录

问题原因:版本大小原因

解决方案:点击ios文件夹-点击podfile修改如下(亲测实用已解决)

解决方案:

删除IOS工程中的Podfile.lock文件,重新pod install(继续执行Flutter run操作)即可解决。

问题原因:没有配置safety相关

解决方案:可以直接在命令行中执行:

然后在Additional run args 这行键入一下命令即可。

问题原因:xcode版本更新导致的

解决方案:将爆红处一行隐藏,运行,点击fix即可,会显示正确位置就解决了。

解决方法:

1、找到第一个爆红文件,将311行问号后面的Colors.white删除即可

2、 在相同的文件夹内找到第二个爆红文件,找到106行,删除super.addAllowedPoint这一行即可。

造成原因分析:还不清楚

群友帮助:经常出现,重启电脑多试试

解决方案:暂未找到

(1)Flutter记录之启动页

一年半前玩过flutter,忘光光...现在是时候重新拾取了。~

启动页一般只放图片或者加几行文字。

1、创建好flutter项目之后,在lib文件下面新建launch.dart或xx.dart.

2、在根目录下新建images文件夹,如已有直接放入图片

3、flutter_yijiake.iml中加入注入该图片,并注意空格

4、在根目录下的test/widget_test.dart中更改默认的启动页为当前的启动页路径

5、最后重新设置启动时的页面

6、非常简单的启动页面放logo图片

值得一说的是,flutter框架的UI组件需要已new 组件的形式展开。

win7安装flutter踩的坑记录

之前安装flutter sdk已经安装ok了,但是最近升级了一下flutter版本到1.26,发现崩了,记录一下出的错及解决方法。

提前已经安装好android studio 及 android 环境

1,运行flutter_console,输入flutter doctor 闪退问题

cmd闪退,放到PowerShell中执行,我是发现以下的错误

fix:PowerShell最低要求为5.0,

升级方案:

2:运行flutter doctor 无反应问题

第一种方案-检查环境变量配置

第二种方案-fc

3:android studio创建flutter project时间比较长问题

运行flutter

报错提示上看得执行flutter doctor --android-licenses

到此就可以正常执行了

Flutter - 初次使用FFI的一些记录

最近在研究flutter如何绕过原生端直接调用c++的函数库,在flutter2版本官方提供了比较稳定的FFI(外部功能接口),下面是最基本的用法:

1.创建一个用于flutter调用的c++文件,文件名为cout.c++,文件里面有一个count方法

2.将写好的c++文件放在IOS/Classes文件夹下(至于为什么要放在这里,网上很多博客都是固定放在这个位置,至于能不能放在其他位置,以后再研究)。

3.在android目录下创建CMakeLists.txt文件,把所有需要调用的c++文件通过add_library导入,这里导入刚才写好的cout.c++。

4.在android/app目录下的build.gradle文件里配置CMakelists。

5.经过上面4步所需要调用的c++库已经导入进我们的flutter项目了,接下来就是在flutter端调用c++库里面的函数。

输出结果:

Flutter 开发笔记

下面这种情况下,为 InkWell 设置的 splashColor 不会生效:

需要用 Material 去除背景色,然后将颜色设置在 InkWell 外部:

在 Dialog builder 中使用 WillPopScope 禁用返回键返回:

注意:使用此方法同时也会禁用 iOS 上的手势滑动返回功能,推荐判断平台后再使用。

修改对话框中的复选框状态,最简便的方法是通过 Element 中的 markNeedsBuild 方法:

当然,更推荐的做法是通过 StatefulBuilder ,然后就可以在 Dialog 中调用 setState 方法了,不过在调用 setState 时需要判断 Dialog 是否已经关闭,否则会造成 setState() called after dispose() 的错误,可以通过添加一个标志位来解决,如下:

在 Web 中加载网络图片有时会失败,遇到这样的报错: Exception caught by image resource service... ,造成该错误的原因通常是,图片跨域了(见 跨域资源共享 )。最简单的解决办法是, 使用 HTML 渲染加载 ,而不是默认的 CanvasKit。

Flutter 中所有的 list 默认都是没有 ScrollBar 的,必须使用 ScrollBar 组件。ScrollBar 组件通过监听 ScrollView 的 ScrollNotification 来刷新位置,所以 List 的长度必须是固定的。

当使用 WebView 等高度不定的组件时会出现内容被截断的情况,通常可以使用 NestedScrollView 来解决该问题,需要在 WebView 外部嵌套 SingleChildScrollView。

虽然使用了缓存,而且也是用 builder 加载图片的,但是发现一个现象:滑动屏幕后图片短暂消失并重新加载了。图片高度很高时这种现象更加明显,其原因是超出屏幕范围一定距离的组件被重新渲染了。解决方法是在 ListView 上设置 cacheExtent 参数:

该参数的作用是改变超出屏幕高度后继续渲染的范围(以像素为单位),比如设置成 9999 后意味着超出屏幕 10000 像素以内的内容都会被保留下来。

借助 IntrinsicHeight 组件:

另外,IntrinsicHeight 还可以用于 Dialog 或者 BottomSheet 中,使得其中的元素 显示内在元素的高度 ,从而避免元素因为约束的存在而不显示或者高度太高(比如在使用了 Column 或者 Row 的时候)。

在通过 Uri 的 queryParameters 获取 query 参数时,发现有些链接会抛出下面异常:

造成该异常的原因是 Uri 默认使用 utf-8 解码超链接字符串,如果链接中包含非 utf-8 字符,就会造成上面的错误,相关 issue 见: issue #31621 。目前该 issue 处于 open 的状态,暂时的解决办法是,在所有使用到 queryParameter 的地方用 try..catch 捕捉可能抛出的异常。

Flutter 开发非常依赖各种官方或第三方的插件,而在使用这些插件时多少都会遇到一些问题,大部分问题都可以通过搜索和查找 issue 来解决。这里记录下一些我在使用部分插件时遇到的问题及其解决方法。

目前该库没有图片加载完成的回调(见 issue #545 ),不过我们可以通过在 imageBuilder 中来添加回调:

这是一个应用内更新插件,安卓 10 以上安装时需要在 manifest 中添加以下内容:

目前功能最强大的 WebView 插件,基本能满足绝大部分移动端网页加载的需求,而且可定制化程度高。

一般通过 CookieManager 修改 Cookie,拦截请求并修改请求对象的 Header 不会生效。

InAppWebViewOptions 的 userAgent 只在 iOS 上生效,而 applicationNameForUserAgent 只在 Android 上生效,所以最好的做法是分平台设置 InAppWebViewOptions ,而且需要注意,由于设置 userAgent 后会覆盖默认的 UserAgent,所以如果需要在默认的 UserAgent 上添加其它参数,iOS 上需要通过 InAppWebViewController.getDefaultUserAgent() 获取默认 UserAgent 参数,而 Android 不需要添加。

如果图片源或者请求是 http 的,为了在 Android 上正常加载请求,必须在 AndroidInAppWebViewOptions 中将 mixedContentMode 设置为 AndroidMixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW 。

当我们想要设置全屏图片的时候,由于默认的 Constraint 会将图片居中显示,所以图片四周会留有空隙。为了去除这个限制,我们需要 Xcode 中打开 LaunchScreen.storyboard,然后在 View Controller 的 View 和 LaunchImage 上的 Safe Area 去掉。

具体设置方法:右侧 Inspector 面板 Show the Size inspector 解选 Layout Margins 中的 Safe Area Relative Margins,拖动图片占满全屏,然后根据 View Controller Scene 的 Warning,更新 Constraint 就可以了。

在集成某些三方库之后,在使用命令行运行 iOS 模拟器的时候可能会遇到下面这个报错:

这是因为 iOS 模拟器未来将会兼容 arm64 架构,但是目前还不支持,所以我们需要修改 Build Setting 使得能够在 x86_64 的模拟器上运行,操作步骤见 这里 。


网站标题:flutter记录,flutter 简书
标题链接:http://myzitong.com/article/dsohsjs.html