【发布时间】:2021-03-15 16:50:25
【问题描述】:
关于 Get 包,我不完全了解的一点是,是否总是需要将可观察变量放入控制器中。例如,这种情况有效:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() => runApp(App());
class App extends StatelessWidget {
final isTrue = true.obs;
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo',
theme: ThemeData(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
body: Center(
child: Obx(
() => FlatButton(
color: isTrue.value ? Colors.blue : Colors.red,
child: Text('Hey'),
onPressed: () => isTrue.value = !isTrue.value,
),
),
),
),
);
}
}
但是是否会因此而出现泄漏/问题,在这种情况下是否需要 GetXController?
【问题讨论】:
-
@Mono_Chrome 严格来说,不需要将 Rx
放在 GetxController 中,但它也不能用于其状态管理目的,即共享状态。要在单个 StatelessWidget 之外共享 true.obs状态,然后将其放入位于 Widget 生命周期之外的控制器中,这将使其有用。否则,可观察对象将与小部件一起被销毁/重新创建。 -
Re: 泄漏/问题,创建
.obsobservable 使用流,并且该流通常会被超出范围的包含控制器关闭。在上面的示例中,流的关闭不会自动发生,您必须自己完成。 -
@Baker 好的,感谢您的回答。这为我清除了一切:)
-
我应该在上面使用“重置”这个词而不是销毁/重新创建,因为这可能会给人留下底层 Observable 流将被删除/清理/释放内存的印象。据我了解,直接在小部件中实例化时不会。这是另一篇文章,详细介绍了 GetxControllers stackoverflow.com/a/65117780/2301224 中发生的 Observables 清理工作
标签: flutter observable reactive state-management flutter-getx