flutter通用代码片
Easul Lv4

一些语法积累

?

用于创建可为空的变量,或者对象不为空则调用他的方法

??

如果前边的值为空,就用后边的值替换他

折叠代码块DART 复制代码
1
2
String? name;
String greeting = "Hello, " + name ?? "stranger";

!

如果使用为空的变量时,变量后加叹号表示手动指定该变量不为空

..

可以用于连续调用多个方法,方法需要返回一个对象才能调用

折叠代码块DART 复制代码
1
2
3
4
5
var result = foo()..bar()..baz();
// 等价于
var t1 = foo();
var t2 = t1.bar();
var result = t2.baz();

as

用于将模糊类型转为指定类型

折叠代码块DART 复制代码
1
String firstLink = _tvLinks[0] as String;

数组

折叠代码块DART 复制代码
1
2
// 创建字符串数组
var data = <String>[];

给函数中传入方法

折叠代码块DART 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 这里在A中给B的handleName方法传了一个方法,这样就可以将B中的数据传到A里
// 可以用于父子组件传递数据
class A{
String name = "";
setName(value) {
name = value;
}

getNameFromB() {
B()..handleName(setName);
}
}

class B{
String currentName = "";
handleName(handler) {
handler(currentName);
}
}

常用对象

屏幕相关

折叠代码块DART 复制代码
1
2
// 获取屏幕宽度
window.physicalSize.width

全局key

折叠代码块DART 复制代码
1
2
// 创建的时候可以不加泛型
final GlobalKey _webViewKey = GlobalKey<State<StatefulWidget>>();

context相关

折叠代码块DART 复制代码
1
2
3
4
// 获取某组件的根context,State那里要传入泛型
context.findAncestorStateOfType<State<FijkTvPlayer>>()!.context;
// 通过globalKey来获取Context或者State
globalKey.currentState
折叠代码块DART 复制代码
1
2
3
4
// 进入某个页面
Navigator.pushNamed(context, "tv_player", arguments: arg);
// 退出某个页面,然后可以后边添加返回值,调用方使用 await 接收结果即可
Navigator.pop(context, "二级页面返回值");

Future

折叠代码块DART 复制代码
1
2
3
4
5
6
7
8
9
10
// 返回值为Future的方法可以调用timeout设置超时,时间一到就可以自动触发TimeoutException异常
try {
tvData = await loadTvDataFromNetwork()
.timeout(const Duration(seconds: requestTimeout));
} on TimeoutException {
tvData = await loadTvDataFromLocal();
}

// 延迟两秒钟后执行某方法
Future.delayed(Duration(seconds: 2).then((e){print("11");})

日志

  • 依赖包logger: ^1.3.0
    • 仓库链接
      折叠代码块DART 复制代码
      1
      2
      3
      4
      5
      6
      7
      final Logger logger = Logger(
      level: Level.debug, // 设置日志级别为 debug
      printer: PrettyPrinter(), // 设置日志输出格式为美观模式
      );
      logger.d();
      logger.i();
      logger.w();

功能型代码片

返回键监听

需要放到所有组件顶层

折叠代码块DART 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DateTime? _lastPressedAt;

WillPopScope(
child: Column(),
// 返回false不退出,返回true退出
onWillPop: () async {
if (_lastPressedAt == null ||
DateTime.now().difference(_lastPressedAt!) > Duration(seconds: 1)) {
//两次点击间隔超过1秒则重新计时
_lastPressedAt = DateTime.now();
return false;
}
return true;
}

手机常亮

折叠代码块DART 复制代码
1
2
Wakelock.enable();
Wakelock.disable();
 评论
来发评论吧~
Powered By Valine
v1.5.2