BasicPage.dart 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import 'package:farmer_client/widgets/layout/bottomBar/BottomBar.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'barList.dart';
  5. abstract class BasicPage extends StatefulWidget {
  6. // 导航标题
  7. // 用法 naviTitle = xxxx
  8. final _title = Rx<String>("");
  9. set naviTitle(String t) {
  10. _title.value = t;
  11. }
  12. // 当前活动 tab
  13. // 如果非 tab 页, 则不传
  14. int? tabIndex;
  15. // 允许滚动 - 不是响应式的
  16. bool canScroll;
  17. //
  18. BasicPage({Key? key, this.canScroll = true, this.tabIndex}) : super(key: key);
  19. @protected
  20. Widget builder(BuildContext context);
  21. // 将要展示
  22. @protected
  23. @mustCallSuper
  24. void beforeShow() {
  25. assert(() {
  26. print("===========beforeShow===========");
  27. return true;
  28. }());
  29. }
  30. @protected
  31. @mustCallSuper
  32. void beforeHide() {
  33. assert(() {
  34. print("===========beforeHide===========");
  35. return true;
  36. }());
  37. }
  38. @protected
  39. @mustCallSuper
  40. void beforeUnmounted() {
  41. assert(() {
  42. print("===========beforeUnmounted===========");
  43. return true;
  44. }());
  45. }
  46. @override
  47. State<BasicPage> createState() => _BasicPageState();
  48. }
  49. class _BasicPageState extends State<BasicPage> {
  50. @override
  51. void initState() {
  52. super.initState();
  53. }
  54. @override
  55. void didChangeDependencies() {
  56. super.didChangeDependencies();
  57. widget.beforeShow();
  58. }
  59. @override
  60. void deactivate() {
  61. super.deactivate();
  62. widget.beforeHide();
  63. }
  64. @override
  65. void dispose() {
  66. super.dispose();
  67. widget.beforeUnmounted();
  68. }
  69. // appBar 的样式请查询 theme 文件
  70. PreferredSizeWidget? _getAppBar() {
  71. return AppBar(title: Obx(() => Text(widget._title.value)));
  72. }
  73. Widget _buildChild(BuildContext context) {
  74. if (widget.canScroll) {
  75. return SingleChildScrollView(
  76. child: widget.builder(context),
  77. );
  78. } else {
  79. return widget.builder(context);
  80. }
  81. }
  82. @override
  83. Widget build(BuildContext context) {
  84. return Scaffold(
  85. resizeToAvoidBottomInset: false,
  86. appBar: _getAppBar(),
  87. body: SafeArea(
  88. child: GestureDetector(
  89. behavior: HitTestBehavior.translucent,
  90. onTap: () {
  91. FocusScope.of(context).requestFocus(FocusNode());
  92. },
  93. child: widget.builder(context),
  94. ),
  95. ),
  96. bottomNavigationBar: widget.tabIndex == null
  97. ? null
  98. : BottomBar(list: BarList, current: widget.tabIndex!),
  99. );
  100. }
  101. }