标签: flutter

flutter关于发请求和响应的编码问题,为什么会出现乱码

我们一般发请求,会使用一个很流行的第三方包http来发请求。
如果我们没有在请求头中设置utf-8的编码,它默认也是用UTF-8的编码格式向服务器发请求的。

另外,如果服务器响应的时候,响应头没有指定响应类型的编码,而它发过来的即便确实是个UTF-8的编码格式,根据dart的默认习惯,未检测到响应类型编码,会默认以latin-1的编码形式来解码,这就会大概率导致乱码。

flutter desktop(也就是windows端)使用第三方包sqflite_common_ffi打包/构建的程序不显示窗口

我用flutter写了一个windows端的应用程序,这个程序因为要使用到数据库,所以引入了第三方包sqflite_common_ffi
我使用这样的命令引入的import 'package:sqflite_common_ffi/sqflite_ffi.dart';
但是当我最终使用flutter build windows命令打包了一个exe的可执行程序之后,发现运行的时候压根儿弹不出窗口,只在后台进程显示相应的进程,因为此时我已经用的是比较新的flutter版本(3.16)了,所以跟网上流传的那个不弹出窗口的BUG其实并不一样。这里之所以不弹出来,估计是构建程序没有把数据库的动态链接库文件(使用这个sqflite_common_ffi其实用的是流传很广的那个sqlite3的功能,所以需要SQLite3.dll这个文件)打包进来,导致只有一个孤零零的flutter_windows.dll文件。只需要网上搜索这个同名的文件,下载后,把该dll文件放到exe所在的同级目录即可。

……

flutter使用 flutter doctor -v命令,提示cmdline-tools component is missing

先要到安卓studio官网下载sdkmanager的zip文件。就是那个仅限命令行工具下的一百多兆的文件。
解压之后会得到一个文件夹,里面有些bin和lib之类的文件夹,还有一两个文本文件。

先找到安装AndroidSDK的目录,如果里面没有cmdline-tools这个文件夹,就手动建立一个,cmdline-tools里面还需要建立一个latest文件夹,再把刚才这几个又是bin和lib,又是文本文件的内容复制到latest下面。

flutter在vscode中怎么定位出错的组件(也就是抛异常的时候怎么确定是哪里出了错)

当运行程序出现异常的时候,虽然会定位到具体的代码,但是却指向的是flutter自带的代码,这种大段代码看起来就比较费时间。

一个有效的做法是,当出现异常后,点击vscode上方的调试错误的那个横条工具栏。里面一般在左边有一个一步一步往下运行的按钮,点击它,直到在调试控制台出现异常报错信息。

这个时候调试控制台就会很贴心地给出出错的代码是在哪个组件的哪行代码处出的问题。

flutter调试器查看不了副页面(非主页面/子页面)

刚接触flutter,写了两个页面,通过按钮,可以从主页面跳转到副页面,副页面我自己写的一个独立的dart文件,在主页面的代码中导入使用。但是当我运行代码后,点击跳转的时候,却发现查看不到对应的副页面的widget tree结构。原来需要把右侧的Widget Inspector上方那个选择按钮打开

接着在运行后的界面(是那个实际运行起来的程序界面,而非调试器下这些东西)上,点击副页面上任意元素,即可自动打开副页面的组件树(widget tree)了。