添加链接描述## 一、Exception in thread “main” java.net.ConnectException: Connection timed out: connect
解决方案:下载gradle包到本地
解决方案:重新运行flutter run 加载静态资源
http请求:dio
loading: flutter_easyloading
dialog:adaptive_dialog
状态管理:provider
数据持久化:share_preferences
https://www.jianshu.com/p/897222522abb
https://blog.csdn.net/jiujiaopanduola/article/details/105573123
https://blog.csdn.net/qq_36407748/article/details/109186749
https://blog.csdn.net/weixin_44411857/article/details/88708740
ctrl+shift+r 替换
Shift + Cmd + O 快速查找文件
cmd+n 可快速实现构造方法,get-set等方法,还有父类需要重写的方法等
1、快速从stateless 改变成stateFull
快捷键:Option + Enter
使用Option + Enter可以执行很多其他组件替换,按Option + Enter,就可以查看对该widget进行特定的操作
2、建一个新的Stateless 组件
输入:stless
3、创建一个 Stateful组件
输入:stful
4、快速选择整个小部件 Option + Up(↑)
5、格式化代码 Ctrl+Alt+L
6、其他快捷键
(一)查找/查看
格式化代码 Cmd + Option + L
清除无效包引用 Option + Control + O
删除词 option + Delete
大小写转换 Cmd + Shift + U
快捷生成结构体 Cmd + Option + T
文件方法结构 Cmd + F12
double shift 查找
Cmd + R 替换文件
Cmd +Shift +R 全工程替换
(二)控制操作
cmd + “-”,cmd + “+” :折叠/展开代码块
Cmd + Shift + “-”,Cmd + Shift+ “+” :折叠/展开全部代码块
ctr + tab :切换文件
Option + ctr + O :清除无效包引用
(三)代码重构
Option + cmd + M : 方法重构,方法抽离
抽离为局部变量 Option + cmd + V
抽离为成员变量 Option + cmd + F
代码快速补全:Cmd + Shift + Enter
快速修复存在问题的代码,导入包,自动修正:alt + enter
1、直接使用
2、使用ARGB【可设置透明度】
0x后面是ARGB,A定义FF表示透明度,RGB代表三原色
flutter 的内置图标
Flutter组件ListTile 使用说明
文件头添加 // ignore_for_file: prefer_const_constructors
Flutter应用如何调试
试一试清除浏览器安装的插件
1、安装crypto
2、
1、直接添加
2、添加依赖,然后再添加
【Flutter】Flutter 页面生命周期 ( 初始化期 | createState | initState | 更新期 | build | 销毁期 | dispose)
使用: TitleWidget(
title: ‘工单材料’,
),
1、添加依赖 Fluro
2、Router 静态化
application.dart
2、路由配置
route_handles.dart
3、路由配置
route.dart
4、创建主页面 main.dart
5、路由返回多级
Flutter 一次退回多个页面
作用是一直把路由栈中的路由移除出栈,直到判定条件为true。
5、使用
1、带参数
2、不带参数
3、返回
4、navigateTo方法
在线生成工具:https://www.devio.org/io/tools/json-to-dart/
1、安装依赖
2、打开网站
为了便利使用 json_serializable库
5、终端运行
6、运用
Android-studio=》Preferences=》
plugins=>搜索Flutter Snippets
https://pub.flutter-io.cn/packages/provider/example
1、安装插件image_picker
2、从相册选择文件并判断大小
3、转化文件数据格式
await MultipartFile.fromFile(image.path) 。这里记得要加await,它是一个异步方法,不然服务器会报错:Required request part ‘file’ is not present
4、上传到服务器
5、限制视频录制时长
:How can I limit video capturing via ImagePicker to 1 minutes maximum duration in Flutter?如何在 Flutter 中将通过 ImagePicker 捕获的视频限制为最长 1 分钟?
录制视频时,限制时间有效
但是选择视频时,显示时间无效
需要通过另外的插件进行计算
Flutter调用摄像头录像及获取视频信息
所需插件:image_picker、video_player
注意:一定要传filename ,不然会得到错误:Required request part ‘file’ is not present
1、回调通讯
2、InheritedWidget 数据共享
3、Global Key通信
4、ValueNotifier通信
5、第三方插件event_bus
Flutter 组件之间的通讯
ls -a #显示当前目录下的所有文件及文件夹包括隐藏的.和…等
1.找到项目所在的文件夹
2.打开隐藏目录
3.打开.git
4.修改config文件
原因使用https方式的时候 在git remote add origin 的https url 里面没有用户名和密码
修改为如下:
1、封装dio
2、使用
Flutter BottomNavigationBar切换会刷新当前页面解决方案
关键点:
state 混合with AutomaticKeepAliveClientMixin
@override
bool get wantKeepAlive => true;
super.build(context);
flutter 应用生命周期
Flutter:让你20秒搞懂BuildContext
Flutter获取全局context
使用
执行一次
执行多次
//我实现的难点:如何表单向右靠qi
isExpanded: true,
alignment: AlignmentDirectional(1.0, 0),
//如何选中的文字向右靠齐
alignment: AlignmentDirectional(1.0, 0),
停止程序运行,然后在命令行中执行 flutter clean 即可
The argument type ‘FutureBuilder<List>’ can’t be assigned to the parameter type ‘List<DropdownMenuItem>?’.
是不是 FutureBuilder 要写在widget的位置,不能写在属性上?
修改使用_disposeTimeController去修改值
原因:DropdownButton中value的值和DropdownMenuItem中value的值都不相同,无法显示选中状态
解决:修改DropdownButton中value的值和DropdownMenuItem中value的值有一个相同的值
flutter FutureBuilder的使用以及防止FutureBuilder不必要重绘的两种方法
解决方案 1 :Memoize the future
我们用AsyncMemoizer.runOnce包装我们的函数,;它只运行一次该函数,并在再次调用时返回缓存的Future。
解决方法2 :在构建函数之外调用Future
问题是每次发布重建时都会调用FutureBuilder状态的didUpdateWidget。此函数检查旧的future对象是否与新的对象不同,如果是,则重新启动FutureBuilder。为了解决这个问题,我们可以在构建函数之外的某个地方调用Future。例如,在initState中,将其保存在成员变量中,并将此变量传递给FutureBuilder。
map 深拷贝
实体类深拷贝
注意:1、images 在根目录下
2、只创建一个images图片的文件夹就可以了,不要再images之上再创建一个assets文件夹
Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)
几种Button的使用(OutlinedButton、ElevatedButton)
无色背景,有边框的按钮
style属性里可以通过OutlinedButton.styleFrom来设定边框的样式
有背景色的Button
style属性里可以通过ElevatedButton.styleFrom来设定边框的样式
Flutter主题Theme的详解(创建&使用&获取)
创建主题
主题的获取
构建和发布为 Android 应用
Flutter学习-打包和发布
一、android
2、为APP签名
Android系统在安装APK包的时候,首先会检验APK的签名,如果发现签名不存在或则校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名
2.1 创建一个秘钥库
在 macOS 或者 Linux 系统上,执行下面的代码:
在 Windows 系统上,执行下述代码:
2.2 在app中引用秘钥库
创建一个名为 /android/key.properties 的文件,它包含了密钥库位置的定义:
注意:这个文件一般不要提交到代码仓库
修改.gitignore文件
2.3 在gradle中配置签名
在 android 代码块之前将你 properties 文件的密钥库信息添加进去:
找到 buildTypes 代码块
将其替换为我们的配置内容:
现在我们 app 的发布版本就会被自动签名了。
当你更改 gradle 文件后,也许需要运行一下 flutter clean。这将防止缓存的版本影响签名过程。
启动调试模式命令
运行正式版
3、 打包引用程序
APK文件
AAB文件
Google推出的一种新的上传格式,某些应用市场不支持的
会根据用户打包的aab文件,动态生成用户设备需要的APK文件
六十五、两次连续返回,则退出应用
沉浸式状态栏
六十七:bottomNavigationBar图标白色的解决办法
Cannot run with sound null safety because dependencies don’t support null safety
运行
这样的报错一般是尺寸的问题
Flutter编译卡在Running Gradle task ‘assembleDebug‘
不能同时使用initialValue 和controller
如何去除 Flutter 右上角的 debug 标识
还未实践
Flutter 调用相机/相册,多图选择,图片视频文件压缩上传处理
未测试,是经过询问网友得出的答案,觉得应该可行
1、开个本地wifi限速手机
2、抓包工具上有限速功能
解决:
上下文丢失了 把【context 改为 this.context 正确指代】
1、getX的路由用法
Flutter 全能型选手GetX —— 路由管理
Flutter Getx 视频
Flutter Getx 实例文档
Getx - 如何使用路由管理页面
2、getX的依赖管理和状态管理
AddOwnerPage.dart
DeviceListPage
DeviceController
修改为
Flutter List’ is not a subtype of type 'List<Map<String, dynamic>>
解决方案:
报错原因:
无法直接用子类型去声明父类变量,或者无法直接用子集类型去声明父集类型;代码中 value 反编码后为的变量 list 的类型为 List ,而 Map<String, dynamic> 是 dynamic 的一种情况,即 dynamic 包含 Map<String, dynamic>
1、callback is a top-level or static function
解决办法:回调要用静态方法
2、java.io.IOException: Cleartext HTTP traffic to baoleiji.cq-ct.com not permitted
解决办法
3、java.lang.NullPointerException: httpConn.contentType must not be null
现在版本是1.9.0 我把版本降到1.8.3就可以了
利用flutter_downloader插件在Flutter中实现文件下载
4、Unhandled Exception: ‘package:flutter_downloader/src/downloader.dart’: Failed assertion: line 304 pos 12: ‘_initialized’: plugin flutter_downloader is not initialized
在main.js 中已经初始化,但是提示还是未初始化
解决方案:下载是在后台下载,显示是在前端页面显示,所以显示是需要交互的。没有仔细看文档
UI is rendered on the main isolate, while download events come from the background isolate (in other words, code in callback is run in the background isolate), so you have to handle the communication between two isolates. For example:
form[“变量名”][“变量名”] 赋值 ,但是form[“变量名”][“变量名”] 取值的时候会报错
应该是真机以前安装过此程序,且已经卸载,但是卸载有残留
adb 卸载 提示你不存在的包名
https://flutter.cn/docs/development/tools/sdk/releases?tab=macos
找到 flutter/android/flutter/packages/flutter_tools/gradle/flutter.gradle 修改minSdkVersion为19就好了
一般是项目中使用的第三方依赖库中的AndroidManifest.xml中跟当前App的AndroidManifest.xml中有重复的某些属性时AS会提示这个,按照提示添加就可以解决
Open [project_folder]/app/build.gradle and add following lines.
创建 Future / Promise:
处理 Future / Promise 的结果: