【发布时间】:2023-02-07 01:14:53
【问题描述】:
我有一个自定义的 AppBar,它有一个应该处理屏幕的 OnBackPressed 的功能,但不幸的是没有被触发并且不知道为什么。
基本上我希望在按下后退按钮时离开当前屏幕。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: ComponentAppBar(
showGoBackButton: true,
onGoBackPressed: () => Get.back(),
),
body: Container(),
);
}
自定义应用栏文件:
import 'package:flutter/material.dart';
class ComponentAppBar extends StatefulWidget implements PreferredSizeWidget {
final bool showGoBackButton;
final Function onGoBackPressed;
const ComponentAppBar({
Key? key,
required this.showGoBackButton,
required this.onGoBackPressed,
}) : super(key: key);
@override
_ComponentAppBarState createState() => _ComponentAppBarState();
@override
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
}
class _ComponentAppBarState extends State<ComponentAppBar> {
@override
Widget build(BuildContext context) {
return AppBar(
title: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
//
],
),
leading: widget.showGoBackButton
? IconButton(
onPressed: () => widget.onGoBackPressed,
icon: const Icon(
Icons.arrow_back,
color: Colors.black,
),
)
: Container(),
automaticallyImplyLeading: false,
leadingWidth: !widget.showGoBackButton ? 0 : 30,
);
}
}
非常简单,但是,当按下后退按钮时没有任何反应。
我调试了什么:
- 使用
Navigator.pop()代替Get.back()——同样的问题 - 添加输出
onGoBackPressed: () => { print('testing') }- 无输出 - 将
onPressed: () => widget.onGoBackPressed更改为onPressed: () => Get.back(),有效 - 将
onPressed: () => widget.onGoBackPressed更改为onPressed: () => { print('test directly in class') },有效
还有,在使用F5调试工具的时候,显示是这样的,很奇怪:
【问题讨论】: