美文网首页flutter
Flutter GetX框架学习-页面保活

Flutter GetX框架学习-页面保活

作者: _安迪_ | 来源:发表于2021-08-17 17:30 被阅读0次

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 {

}

相关文章

网友评论

    本文标题:Flutter GetX框架学习-页面保活

    本文链接:https://www.haomeiwen.com/subject/uajibltx.html