Flutter踩坑之旅
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter踩坑之旅相关的知识,希望对你有一定的参考价值。
参考技术A 记录下自己踩过的坑,怕忘了一.TextField:
1.去掉输入数字的计数:decoration中的counterStyle: TextStyle(color: Colors.transparent).
2.去掉获取和失去焦点时边框改变颜色的效果:decoration内border: InputBorder.none,
3.去边框时设置BorderSide的width为0或color: Colors.transparent后依然存在边框时,需要设置为borderSide: BorderSide.none
4.设置背景色需要在decoration内 filled:true, fillColor: Colors.blue同时设置才会显示
二.Uint8List类型和string类型,List<int>的转换
连续两次base64解码时,参数只能使用string类型,但是base64解码后是Uint8List类型,此时需要将Uint8List类型转换为string类型,使用:utf8.decode(Uint8List)即可,需要import 'dart:convert';
List<int>转Uint8List:读取接口时获取的数据是List<int>的图片数据,想显示时需要转成Uint8List,然后使用Image.memory(),使用:Uint8List.fromList(List<int>)即可
三.报错:DioError [DioErrorType.DEFAULT]: FormatException: Unexpected character (at character 1)MGFlMFo0NEZ3RWNMbE5YbGNGOXZGcUlJdUhIS2x2Q3NlckxqWXlEeG5JWndZdXIrSUpLN3ZOczR...
这是因为dio请求返回的数据默认是以json的格式读取的,而返回的数据是密文形式,需要修改dio的Options的responseType为ResponseType.PLAIN,这样返回的数据就以字符串形式处理.
四.去掉点击控件背景出现的水波纹效果,即去掉md的效果:
在main.dart的MaterialApp内的theme加上splashColor: Colors.transparent
五.布局去掉沉浸式效果和布局设置占满全屏却无效的问题
使用Scaffold的body的布局默认是沉浸式的,将状态栏一起包含了,可以通过在body后添加一层SafeArea即可.
布局设置double.infinity占满全屏高度却无效,大部分情况都是因为某一级的父布局的高度已经有了限制,所以设置充满屏幕只会充满父布局,有些widget默认是按内容填充类似wrap_content就会导致写布局的过程中自己没有限制高度但最后的布局不是自己想要的,可以给各个父布局设置不同背景颜色来查看是从哪儿开始被限制了高度来排查问题.
六.占满剩余空间,类似android的match_parent可以使用double.infinity
七.LinearProgressIndicator
1.LinearProgressIndicator设置进度值的颜色为单一颜色:valueColor : new AlwaysStoppedAnimation(Color(JColor.blue))
2.给LinearProgressIndicator设置圆角:ClipRRect(
borderRadius:BorderRadius.circular(60.0),
child:LinearProgressIndicator(value:0.2,backgroundColor:Color(JColor.grayBg),valueColor:new AlwaysStoppedAnimation(Color(JColor.blue)),
)
八.Expanded:
1.若嵌套多层column且内容的高度都不确定需要占满剩余空间,需要每层的column的内容都嵌套一层expanded来申明每层都占满剩余的空间,否则最里面的内容层需要指定高度,不然会报错
九.Container设置最小/大宽度或高度:
constraints:BoxConstraints(minHeight:56),
十.滑动的widget嵌套:
1.解决滑动冲突:内层嵌套的滑动widget设置physics:NeverScrollableScrollPhysics()
2.解决滑动嵌套ui显示不出来或者报错,内层的滑动widget设置shrinkWrap:true
十一.使用multi_image_picker: ^4.3.4安卓运行报错Didn't find class "com.sangcomz.fishbun.FishBunFileProvider"
1.需要android工程支持androidx,需要在android工程的gradle.properties内添加android.enableJetifier=true和android.useAndroidX=true并点击右上角的open for editing in android studio,运行成功后就可以了
十二.使用textfield时的文字ui总是很高
使用了maxlength且只是在textfield的InputDecoration设置counterStyle的颜色为透明使下面的计数文字消失会导致文字ui很高,counter的计数文字只是颜色是透明但依然在布局中占了位置所以导致文字很高,直接使用counterText:""即可
十三.使用ListView报错Vertical viewport was given unbounded height
需要将ListView放入Expanded内部
程序员踩坑之旅:将 75000 行 iOS 原生代码迁移到 Flutter!
人们普遍认为,如果想构建一个良好的移动应用,则必须建立iOS和Android两个版本。与此同时大多数企业想要的是:只实现一次业务逻辑,并快速打包成具有原生体验感的用户界面。
译者 | 弯月,责编 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下为译文:
拥有75,000行Objective C和Swift代码;
亚马逊AWS后端:DynamoDB、Postgres和S3;
每天都有22,000名用户和125万次下载。
通过谷歌应用商店发布Android版本;
直接替换掉苹果的应用商店中原有的iOS原生应用。
代码行数与开发速度
Google Open Beta
架构
后端服务(亚马逊AWS)
性能
原生代码
跨平台设计
风格与方案
总结
后记
有些看似重大的差异其实很容易实现。例如,因为UI全是小部件树的代码,所以你只需去掉底部标签栏上的Android侧滑菜单,换成iOS的“更多”按钮。
有些小差异非常繁琐。例如,利用相同的代码在两个平台上显示原生的对话框,但是最终还是会有非常细微的差别。也许这不是一个小差异?
flutter build --flavor research
我希望复制原生Xcode项目中设置的内容。在Xcode中,你可以利用方案名称区分应用的版本。方案简单易用,在创建时,你只需告诉Xcode希望使用的配置和目标:
这里的配置是一个普通文本文件,其扩展名为.xcconfig。你可以指定当前应用版本所特有的环境变量。例如,包标识符后缀等。
这里的目标指的是所有构建的设置(可能有几百个)以及构建中包含的类、资源和自定义脚本的列表。每个新的Xcode项目都有一个目标,在Flutter中,它被称为“Runner”。
你不需要Xcode来管理它们。它们是纯文本,这意味着可以通过源代码控制系统管理他们,而且还可以使用任意编辑器进行修改。
你可以使用它们来设置捆绑包的标识符、应用图标集(供Google服务信息文件使用)等。
它的底层平台有点像metal游戏引擎。
它的小部件树结构支持“热重载”,允许你快速灵活地构建用户界面。
它为Android和iOS提供了一整套原生风格的小部件,可以根据平台在小部件树中轻松替换。
你可以利用它的开源代码库,根据需要调试问题并调整或增强小部件,或者只是尝试各种功能。
更好地支持非Google云服务。就我的情况而言,需要支持亚马逊AWS。
感觉GitHub上有一些关于Flutter的问题更适合放在Stack Overflow上。也许人们认为,那些创造了bug的开发人员(包括我在内)能够更好地回答问题?虽然我不知道如何改善这种情况,但也许这称不上问题?
用更简单、更明确的指令,更顺畅地部署到iOS和Android。创建用户界面的工作很有意思。与Cocoapods和Gradle结合使用,就可以部署到特定平台,也不是特别难。开发人员的专业知识往往会偏向某个平台(比如我更熟悉iOS),因此部署到其他平台可能很困难。所以越简单越好。
更高效的图像显示。iOS原生应用使用的SDWebImage库效果很好。Flutter的cached_network_image库则不太理想。
在使用了多年的TestFlight后,我非常喜欢Google应用商店的Open Betas,我们利用它来让公众测试不断完善的应用。
学习Flutter很有趣。Emily Fortuna在这个视频中解释了Flutter的关键功能(https://www.youtube.com/watch?v=kn0EOS-ZiIc)。
Flutter团队非常平易近人,他们在努力打造一个友好而多样化的开源社区。
上周,Ray Wenderlich(一个对我学习iOS不可或缺的网站)推出了Flutter部分!Flutter一定会得到推广。
至于面向Web的Flutter,虽然我很欣赏Flutter和Dart在这方面的独特优势,但我希望Flutter团队不要太过于分散精力,并且可以继续专注于改善Flutter的移动跨平台功能。
【END】
如何少走弯路,利用不同区块链的数据结构实现项目上链?
数据架构是区块链的重要组成部分,了解数据架构,可以让我们对于自身业务是否适合上链做出明智的判断。
9月19日,【dfuse小聚:区块链数据应用讨论会】将在上海举行,dfuse CTO&联合创始人、EOS加拿大联合创始人 Alex Bourget;慢雾科技合伙人兼安全产品负责人启富(Keywolf);MYKET联合创始人/EOS Cannon联合创始人Ricky胖哥,与你一起深度探索区块链应用搭建以及区块链数据结构的奥秘,让你明白到底你的业务该如何上链!
热 文 推 荐
点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。
以上是关于Flutter踩坑之旅的主要内容,如果未能解决你的问题,请参考以下文章
程序员踩坑之旅:将 75000 行 iOS 原生代码迁移到 Flutter!