首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter:删除ChangeNotifier样板` `notifyListeners()`

Flutter:删除ChangeNotifier样板` `notifyListeners()`
EN

Stack Overflow用户
提问于 2021-08-25 10:24:00
回答 1查看 93关注 0票数 1

在创建扩展ChangeNotifier的模型类时,有没有像@annotation这样的东西来删除样板

样板

代码语言:javascript
复制
class MyModel extends ChangeNotifier{
  bool _isLoading = true;

  bool get isLoading => _isLoading;

  set isLoading(bool value) {
    _isLoading = value;
    notifyListeners();
  }
}

使用@annotation之类的东西

代码语言:javascript
复制
class MyModel extends ChangeNotifier{
  @Notify
  bool _isLoading = true;
}
EN

回答 1

Stack Overflow用户

发布于 2021-08-27 10:46:48

您可以尝试使用Get进行状态管理:https://pub.dev/packages/get

使用Get进行反应式编程与使用setState一样简单。

首先,你可以创建一个新的控制器:

代码语言:javascript
复制
import 'package:get/get.dart';

class FormController extends GetxController {
  FormController();

  Rx<bool> _isLoading = false.obs;
  set setLoading(value) => this._isLoading.value = value;
  bool get loading => this._isLoading.value;
}

在UI中,当您想要显示该值并在值发生变化时更新屏幕时,只需执行以下操作:

代码语言:javascript
复制
Obx(
                    () => formController.loading
                        ? Center(
                            child: CircularProgressIndicator(),
                          )
                        : ElevatedButton(
                            onPressed: formController.googleLoading ||
                                    formController.anonymousLoading
                                ? null
                                : () async {
                                    formController.setLoading = true;
                                    if (_formKey.currentState!.validate()) {
                                      await userController
                                          .loginWithEmailAndPassword(
                                              formController.email,
                                              formController.password);
                                    }
                                    formController.setLoading = false;
                                  },
                            child: Text('login'.tr),
                          ),
                  ),

有关状态管理here的更深入说明,请参阅。在那里,您将看到更多示例以及简单状态管理器和反应式状态管理器之间的区别

您将对GetX power有一个很好的了解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68921106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档