flutter-开发问题系列之八   2021-11-27


这是 todoline++ 项目开发过程中遇到的问题系列, 记录下来供大家参考。
本篇记录一些开发中遇到的疑问:

todoline++ 官网请看这里: https://todoline-plus-plus.github.io/

1 flutter state 的声明周期?

state 的生命周期有 3 个阶段:

  1. 初始化
    开始 –> 构造函数 –> initState –> didChangeDepandencies –> build

  2. 状态改变
    update –> diChangeDepanedencies –> build

  3. 结束
    结束 –> deactivate –> dispose –> 结束

来源: jianshu.com/p/ed220761f7b1

2 flutter 有图文按钮吗?

请使用下面的方法来构建图文按钮:

1
TextButton.icon();

3 TextButton 中的 style 如何赋值?

1
TextButton.style.backgroundColor: MaterialStateProperty.all(Colors.green),

来源: stackoverflow.com/questions/66542199/what-is-materialstatepropertycolor

4 TextButton.icon 如何修改他的宽度?

外面套一层 SizedBox, 然后给 SizedBox 设置宽度即可

5 TextButton.icon 如何修改圆角

这个实际上等于 shape 如何使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TextButton.icon(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(AppColor.primaryColor),
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.67) // 圆角
)
),
),
icon: Icon(icon, size: 36, color: AppColor.white),
label: Text(label, style: const TextStyle(fontSize: 30, color: AppColor.white)),
onPressed: (){
// xxx
},
)

6 flutter 项目, 开发 windows 应用, 如何修改标题栏的名称?

一般情况下, flutter 默认开发出来的 windows 应用程序的标题栏的名称就是项目名称, 但有时候我们想要更改标题栏的名称, 怎么办?
文件名: windows/runner/main.cpp
修改的内容:

1
2
3
if (!window.CreateAndShow(L"todoLine++", origin, size)) {
return EXIT_FAILURE;
}

上面的 todoline++, 修改成你自己的名称就可以了!

7 flutter 如何播放音乐?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import 'package:audioplayers/audioplayers.dart';

class Player {
static const defaultSound = "audio/xxx.mp3";
static final AudioCache _cache = AudioCache();
static final AudioPlayer _player = AudioPlayer();

static void play([String fileName = defaultSound]) {
_cache.fixedPlayer = _player;
_cache.loop(fileName);
}

static void stop() {
_player.stop();
}

}

来源: blog.csdn.net/moasad/article/details/119931986

8 flutter Text 组件文字太长怎么办?

A) Text 外面套一个 Expanded 组件
B) 设置 overflow = TextOverflow.ellipsis

来源: blog.csdn.net/weixin_42354735/article/details/109473211

9 flutter 如何弹出文件选择框?

请使用 file_picker 插件, 下面是官方源码:

1
2
3
4
5
6
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
File file = File(result.files.single.path);
} else {
// User canceled the picker
}

10 为什么命名构造器没有生成对象?

下面的两个构造器中, Config.from 无法生成 config 对象

1
2
3
4
5
 Config(this.id, this.tag, this.key, this.val, this.remark);
Config.from(User user, String tag, String key, String val, String remark) {
int id = generateId(user);
Config(id, tag, key, val, remark);
}

正确方法:

1
2
3
4
5
 Config.from(User user, this.tag, this.key, this.val, this.remark) {
int id = generateId(user);
// Config(id, tag, key, val, remark);
this.id = id;
}

注意:

  1. 不在命名构造器调用同名构造器
  2. 在命名构造器的参数中直接写上 this.xxx 表示直接对这个成员变量赋值。

11 flutter 开发使用 sqlite, 如果开发的是 windows 桌面应用程序, 那么 sqlLite 的数据库文件存放在哪里?

老实说, 一开始我也是一头雾水, 不知道该怎么办, 后来我看到这篇文章:
codaffection.com/flutter-article/view-sqlite-db-in-flutter-application/

他说, 数据库文件肯定存在于某个地方, 我灵光一闪: everthing, 果然, 找到了他的地址:
{your-project-folder}.dart_tool\sqflite_common_ffi\databases\xxx.db

12 floor 构建代码的语句太长记不住怎么办?

floor 是 flutter 中用来映射 sqlLite 数据库的 ORM 框架, 当我们写好抽象类了以后, 就需要运行下面的命令, 然后 floor 才会生成我们需要的代码:

1
flutter packages pub run build_runner build

但是这个命令也太长了, 不容易记住, 而且每次都这么敲的话也太麻烦了, 不是吗?
有什么办法可以帮我们记住这个代码呢?

我的办法是, 编写脚本文件, windows 中只需要写好 .bat 文件, 然后就可以执行了, 再然后我们使用效率工具, 比如 utool, wox 来运行该脚本文件即可.
下面是 .bat 脚本文件的内容:

1
cmd /c "cd /d D:\xxx\project_name&&flutter packages pub run build_runner build"

注意:

  1. D:\xxx\project_name 是项目文件夹名称, 请替换成你自己的就行
  2. 项目文件夹名称和 cmd 命令之间请使用 && 来隔开
  3. 效率工具如何运行.bat 文件? 请各自参考相关说明文件, 我使用的是 wox, 安装插件 wox.pulgin.runner 即可配置。

13 构造器中添加 factory 修饰符是什么意思, 他跟不添加有什么区别?

flutter 中的类, 有下面三种:

  1. 同名构造器
    构造器的名称和类名称一样

  2. 命名构造器
    类名.xxx 即为命名构造器, 他的作用跟同名构造器一样, 方便定义多个构造函数

  3. 工厂构造器
    在构造器的前面加一个 factory 即为工厂构造器, 工厂构造器的作用有 3 个:
    A) 方便缓存, 同一个构造器生成一个实例对象
    B) 方便调用子类
    C) 创建单利模式

14 floor 中, 如果表中某个字段需要唯一, 不允许重复怎么办?

1
2
3
4
5
6
 @Entity(tableName:"", indices: [Index(value: ['key'])])
class Config {
...
...
...
}

分享到:


  如果您觉得这篇文章对您的学习很有帮助, 请您也分享它, 让它能再次帮助到更多的需要学习的人. 您的支持将鼓励我继续创作 !
本文基于署名4.0国际许可协议发布,转载请保留本文署名和文章链接。 如您有任何授权方面的协商,请邮件联系我。

Contents

  1. 1 flutter state 的声明周期?
  2. 2 flutter 有图文按钮吗?
  3. 3 TextButton 中的 style 如何赋值?
  4. 4 TextButton.icon 如何修改他的宽度?
  5. 5 TextButton.icon 如何修改圆角
  6. 6 flutter 项目, 开发 windows 应用, 如何修改标题栏的名称?
  7. 7 flutter 如何播放音乐?
  8. 8 flutter Text 组件文字太长怎么办?
  9. 9 flutter 如何弹出文件选择框?
  10. 10 为什么命名构造器没有生成对象?
  11. 11 flutter 开发使用 sqlite, 如果开发的是 windows 桌面应用程序, 那么 sqlLite 的数据库文件存放在哪里?
  12. 12 floor 构建代码的语句太长记不住怎么办?
  13. 13 构造器中添加 factory 修饰符是什么意思, 他跟不添加有什么区别?
  14. 14 floor 中, 如果表中某个字段需要唯一, 不允许重复怎么办?