【问题标题】:Flutter and Getx: How to Pass parameters from UI to Getx controller?Flutter 和 Getx:如何将参数从 UI 传递到 Getx 控制器?
【发布时间】:2021-08-25 08:01:19
【问题描述】:

我有这个 Getx 控制器,用于从数据库中读取帖子的内容:

class ReadSinglePostController extends GetxController {
  var isLoading = true.obs;
  var posts = Post(
          postID: 1,
          userID: 0,
          thumbnail: 'thumbnail',
          imageList: 'imageList',
          title: 'title',
          description: 'description',
          createdTime: DateTime.now())
      .obs; //yes this can be accessed

  var postid = 2.obs; //I want this value to change when I click a post in the UI

  @override
  void onInit() {
    super.onInit();
    readPost(postid);
  }

  updateID(var postID) {
    postid.value = postID;
    print('im print ${postid.value}');
  }//should update postid when a post is clicked in the UI

  Future readPost(var postID) async {
    try {
      isLoading(true);
      var result = await PostsDatabase.instance.readPost(postID);
      posts.value = result;
    } finally {
      isLoading(false);
    }
  }
}

但我现在面临的问题是:要从数据库中读取特定的帖子,我需要 postID 参数。正如你可以想象的那样,当我在 UI 中单击特定的 Post 时,可以记录这个参数,但是我如何将该参数传递给这个 Getx 控制器呢?还是我做错了整件事?

【问题讨论】:

    标签: flutter flutter-getx


    【解决方案1】:

    您可以在 Ui 上使用控制器的实例。

    例如,在您调用控制器的小部件上:

    final ReadSinglePostController _controller = Get.put(ReadSinglePostController());
    
    //and when you need to change you do like this:
    _controller.updateID(newId);
    

    在updateID方法里面可以调用load方法:

    updateID(var postID) {
      postid.value = postID;
      print('im print ${postid.value}');
      readPost(postID);
    }
    

    【讨论】:

    • 感谢您的回答!有用!不过,我还有一个快速的问题,在您的回答中,您使用_controller.update(newId)。我之前在我的小部件树中使用了GetX<ReadSinglePostController>( builder: (controller) {。这两种方法有区别吗?以及如何?
    • 所以Getx上有3种状态管理:Gex、Obx和GetBuilder,你可以选择哪一种更适合你的需要。我一直使用 Obx,因为我认为更简单明了。而且我也更容易听到小部件上的状态变化。您可以在此处阅读有关差异的更多信息:github.com/jonataslaw/getx/blob/master/documentation/en_US/…
    【解决方案2】:

    对于可能正在使用obs的人,您可以这样做:

    在控制器中,可以定义

    var postid = 0.obs
    

    从视图中添加

    controller.postid.value = 20;
    

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 2022-08-19
      • 2021-08-21
      • 2021-12-11
      • 2023-01-17
      • 1970-01-01
      • 2022-08-04
      • 2021-12-17
      • 2022-01-18
      相关资源
      最近更新 更多