Flutter GetX框架学习-页面保活

GetX是一个很强大的框架,主要是三大核心功能:状态管理、路由管理、依赖管理。
除此之外还有很多功能:国际化、Dialog、SnackBar、甚至是网络请求框架等等。

最近在学习过程中,遇到一个常见需求:如下图,主页切换的时候‘首页’和‘我的’需要保活,不要重复build导致页面频繁刷新。


切换Tab

一般这种需求我们使用AutomaticKeepAliveClientMixin就很容易解决,但这只能支持StatefulWidget,GetX的页面是一般是使用GetView,看一下GetView的源码:

abstract class GetView extends StatelessWidget {
  const GetView({Key? key}) : super(key: key);

  final String? tag = null;

  T get controller => GetInstance().find(tag: tag)!;

  @override
  Widget build(BuildContext context);
}

由于GetView是StatelessWidget,因此我们无法直接使用AutomaticKeepAliveClientMixin,会报错。
这里提供一个思路,只需要再处理一层,将GetView当作是StatefulWidget下面的一个View就可以了,如有更好的方法,欢迎留言。

示例代码如下:

/// Page - StatefulWidget
class TestPage extends StatefulWidget {
  TestPage({Key? key}) : super(key: key);

  @override
  _TestPageState createState() => _TestPageState();
}

/// Page - State with AutomaticKeepAliveClientMixin
class _TestPageState extends State
    with AutomaticKeepAliveClientMixin {
  @override
  Widget build(BuildContext context) {
    return TestView();
  }

  @override
  bool get wantKeepAlive => true;
}

/// GetView
class TestView extends GetView {
  @override
  Widget build(BuildContext context) {
    return Scaffold(body: Text('TestPage'));
  }
}

/// Controller
class TestController extends GetxController {

}

你可能感兴趣的:(Flutter GetX框架学习-页面保活)