Flutter 踩坑集锦

发布时间 2023-08-04 12:00:58作者: 水月神

首先,中文网位置:
Flutter中文网

官网位置
Flutter官网

环境和安装(win10)

  • win10+ 开启虚拟化(这个倒是无所谓)
  • JAVA & PATH中JAVA_HOME的设置
  • 下载flutter或git clone flutter的仓库
  • Android Studio
    SDK下载,并把SDK的路径写入path
  • VisualStudio下载,安装时勾选 C++ 桌面程序
  • VSCODE + Plugin:flutter+dart+...
    这些就自行安装了

执行flutter doctor查看错误
一般有可能有一些错误,下面是不同的解法

  • android license未同意,这个直接到sdk下面找sdkmanager,然后sdkmanager --licenses,同意所有就OK
  • maven仓库的问题(未FQ)
    这个找
    flutter/packages/flutter_tools/gradle/flutter.gradle
    flutter/packages/flutter_tools/lib/src/http_host_validator.dart
    修改maven()和google()为国内的仓库

踩到的坑

Q:不要在createState中放置参数

A:方法有两种

  1. 添加 //ignore ... ,代码提醒中有
  2. 直接使用widget(类似于js中的this),在StatefulWidget中定义参数
class A extends StatefulWidget {
  const A({Key? key, required this.fun}) : super(key:key);
  final Function fun;

  @override
  State<A> createState() => _A();
}

class _A extends State<A> {
  ...

  // 使用时如下
  widget.fun()
}

Q:经常遇到组件要不要使用const的warning问题

A:如果对象中有变量或者函数不要用const,如果是确定的固定的东西就要用const
比如 const BorderRadius.all(Radius.circular(10)) 就要用const,因为里面是不变的。
比如 TextField( controller: controller , ...) 就不能用const。

Q:怎么实现毛玻璃

Container > 
child: ClipRect(矩形) / ClipRRect(圆角) (
  borderRadius: ... // ClipRRect专属
  child: BackdropFilter(
    filter:ImageFilter.blur(sigmaX: double, sigmaY:double)  // 设置毛玻璃的半径
  )
)