BasicPage.dart 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import 'package:flutter/material.dart';
  2. import 'package:get/get.dart';
  3. abstract class BasicPage extends StatefulWidget {
  4. // 导航标题
  5. // 用法 naviTitle = xxxx
  6. final _title = Rx<String>("");
  7. set naviTitle(String t) {
  8. _title.value = t;
  9. }
  10. // 允许滚动 - 不是响应式的
  11. bool canScroll;
  12. //
  13. BasicPage({Key? key, this.canScroll = true}) : super(key: key);
  14. @protected
  15. Widget builder(BuildContext context);
  16. // 将要展示
  17. @protected
  18. @mustCallSuper
  19. void beforeShow() {
  20. assert(() {
  21. print("===========beforeShow===========");
  22. return true;
  23. }());
  24. }
  25. @protected
  26. @mustCallSuper
  27. void beforeHide() {
  28. assert(() {
  29. print("===========beforeHide===========");
  30. return true;
  31. }());
  32. }
  33. @protected
  34. @mustCallSuper
  35. void beforeUnmounted() {
  36. assert(() {
  37. print("===========beforeUnmounted===========");
  38. return true;
  39. }());
  40. }
  41. @override
  42. State<BasicPage> createState() => _BasicPageState();
  43. }
  44. class _BasicPageState extends State<BasicPage> {
  45. @override
  46. void initState() {
  47. super.initState();
  48. }
  49. @override
  50. void didChangeDependencies() {
  51. super.didChangeDependencies();
  52. widget.beforeShow();
  53. }
  54. @override
  55. void deactivate() {
  56. super.deactivate();
  57. widget.beforeHide();
  58. }
  59. @override
  60. void dispose() {
  61. super.dispose();
  62. widget.beforeUnmounted();
  63. }
  64. // appBar 的样式请查询 theme 文件
  65. PreferredSizeWidget? _getAppBar() {
  66. return AppBar(title: Obx(() => Text(widget._title.value)));
  67. }
  68. Widget _buildChild(BuildContext context) {
  69. if (widget.canScroll) {
  70. return SingleChildScrollView(
  71. child: widget.builder(context),
  72. );
  73. } else {
  74. return widget.builder(context);
  75. }
  76. }
  77. @override
  78. Widget build(BuildContext context) {
  79. return Scaffold(
  80. appBar: _getAppBar(),
  81. body: SafeArea(
  82. child: _buildChild(context),
  83. ),
  84. );
  85. }
  86. }