Flutter 导航返回按钮
  nDUQ4LHdRnl1 2023年11月02日 43 0


二级页面的返回按钮

Flutter 版本:​​2.5.1​​ 二级页面的返回按钮,是空的,只能左滑返回。

Flutter 导航返回按钮_html5


自定义一个返回按钮:

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text("文本示例"),
// 返回按钮
leading: BackButton(onPressed: () {
Navigator.pop(context);
})),
body: const TextBody(),
),
);
}

如果页面很多,每个页面都需要自定义,代码也都是重复的。
既然都需要,那就可以抽取出来,封装一下。

在自定义的 Widget 中,返回一个

@override
Widget build(BuildContext context) {
return BackButton(onPressed: () {
Navigator.pop(context);
});
}

当点击 ​​返回​​​ 时,结果界面 ​​全黑​​ 了,一脸问号❓❓❓


疑问

当 ​​Navigator.pop(context);​​​ 放在具体界面时,上下文 ​​context​​​ 与封装的上下文 ​​context​​ 不是同一个。

  • 1.自定义按钮时,打调试断点,查看​​context​
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text("文本示例"),
// 返回按钮
leading: BackButton(onPressed: () {
Navigator.pop(context); // 在这行打了个调试断点,查看 context
})),
body: const TextBody(),
),
);
}

Flutter 导航返回按钮_返回按钮_02

  • 2.封装返回按钮时,打调试断点,查看​​context​
@override
Widget build(BuildContext context) {
return BackButton(onPressed: () {
Navigator.pop(context); // 在这行打了个调试断点,查看 context
});
}

Flutter 导航返回按钮_返回按钮_03


对比发现

外部的 ​​context​​​ 树结构中存在 ​​MaterialApp​​​ 内部的 ​​context​​​ 树结构中 ​​不​​​ 存在 ​​MaterialApp​

  • 3.封装返回按钮时,把外部的​​context​​ 传入,在内部使用

import 'package:flutter/material.dart';

class JHBackButton extends StatelessWidget {
const JHBackButton({Key? key, required BuildContext context})
: _scontext = context,
super(key: key);

final BuildContext _scontext;

@override
Widget build(BuildContext context) {
return BackButton(onPressed: () {
Navigator.pop(_scontext); // 在这行打了个调试断点,查看 context
});
}
}

再次打断点调试,查看 ​​context​

Flutter 导航返回按钮_返回按钮_04


这会跟第一张图上的就​​匹配​​了

搞定!


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  b1UHV4WKBb2S   2023年11月13日   40   0   0 ide抗锯齿
  b1UHV4WKBb2S   2023年11月13日   34   0   0 裁剪ideflutter
  b1UHV4WKBb2S   2023年11月13日   27   0   0 flutterDart
  zSWNgACtCQuP   2023年11月13日   32   0   0 ide
nDUQ4LHdRnl1