【问题标题】:Flutter: Remove ChangeNotifier Boilerplate `notifyListeners()`Flutter:删除 ChangeNotifier Boilerplate `notifyListeners()`
【发布时间】:2021-08-25 10:24:00
【问题描述】:

在创建扩展 ChangeNotifier 的模型类时,是否有类似 @annotation 的东西来删除样板?

样板

class MyModel extends ChangeNotifier{
  bool _isLoading = true;

  bool get isLoading => _isLoading;

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

使用@annotation 之类的东西

class MyModel extends ChangeNotifier{
  @Notify
  bool _isLoading = true;
}

【问题讨论】:

    标签: flutter annotations boilerplate


    【解决方案1】:

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

    使用 Get 进行响应式编程就像使用 setState 一样简单。

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

    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 中,当您想要显示该值并在值更改时更新屏幕时,只需执行以下操作:

    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 的强大功能。

    【讨论】:

    • 不,我只是想使用Provider进行状态管理
    猜你喜欢
    • 2021-03-22
    • 2020-05-12
    • 2021-12-23
    • 1970-01-01
    • 2021-06-24
    • 2021-11-07
    • 2020-01-10
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多