【问题标题】:Using an observable variable without a controller in Flutter GetX在 Flutter GetX 中使用没有控制器的可观察变量
【发布时间】: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: 泄漏/问题,创建.obs observable 使用流,并且该流通常会被超出范围的包含控制器关闭。在上面的示例中,流的关闭不会自动发生,您必须自己完成。
  • @Baker 好的,感谢您的回答。这为我清除了一切:)
  • 我应该在上面使用“重置”这个词而不是销毁/重新创建,因为这可能会给人留下底层 Observable 流将被删除/清理/释放内存的印象。据我了解,直接在小部件中实例化时不会。这是另一篇文章,详细介绍了 GetxControllers stackoverflow.com/a/65117780/2301224 中发生的 Observables 清理工作

标签: flutter observable reactive state-management flutter-getx


【解决方案1】:

正如@Baker 用他的 cmets 解释的那样,obs 流应该通过 GetXControllers 销毁,并且如果在无状态小部件中独立使用,它们将保留在内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2021-09-19
    • 1970-01-01
    • 2023-01-17
    • 2021-08-09
    • 2017-12-03
    相关资源
    最近更新 更多