Flutter GetX框架学习-页面保活

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

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


切换Tab

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

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

  final String? tag = null;

  T get controller => GetInstance().find<T>(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<TestPage>
    with AutomaticKeepAliveClientMixin {
  @override
  Widget build(BuildContext context) {
    return TestView();
  }

  @override
  bool get wantKeepAlive => true;
}

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

/// Controller
class TestController extends GetxController {

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容