- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法按给定属性对可观察的 RxList 进行排序。当我使用 BloC 方法时,排序工作正常,使用一个简单的列表。
最近我将状态管理更改为 GetX ( https://github.com/jonataslaw/getx ) 包,因为我看到了几个优点(不需要上下文、页面转换等)。
这里有两种情况,我的不好,之前没有说明,让我放小 cucumber 的
场景 1:
Given user in Posts Screen
When user Pull down to get Newest posts
Then user get the newly fetched posts on top of the previous loaded list
场景 2:
Given user in Posts Screen
When user reaches the end of the list
Then user get more posts at the end of the previous loaded list
post_model.dart
class Post {
final int id;
final String title;
final DateTime date;
final User user;
Post({
@required this.id,
@required this.title,
@required this.date,
this.user});
}
post_controller.dart
import 'dart:async';
import 'package:get/state_manager.dart';
import 'package:blog/models/post.dart';
import 'package:blog/services/posts_api.dart';
class PostsController extends GetxController {
int _page = 0;
---------HERE OBS LIST-----------
RxList posts = [].obs;
@override
void onReady() {
super.onReady();
this.loadPosts();
}
Future<void> loadPosts({isRefreshLoad = false}) async {
int pager;
if (isRefreshLoad) {
pager = 1;
} else {
increment();
pager = this._page;
}
Map<String, String> arguments = {'page': '$pager'};
final List<Post> newPosts =
await PostsApi.instance.getPosts(arguments: arguments);
// remove duplicates
posts.addAll(
newPosts.where(
(newPosts) => posts.every((post) => newPosts.id != post.id),
),
);
//----------HERE'S THE EXCEPTION----------
posts.sort((a, b) => b.id.compareTo(a.id));
update(['posts']);
}
}
错误
flutter: [GETX] PostsController has been initialized
[VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: type 'Post' is not a subtype of type 'List<dynamic>'
#0 RxList.remove
package:get/…/rx/rx_impl.dart:333
PostsScreen.dart
Scaffold(
backgroundColor: Color.fromRGBO(58, 66, 86, 1.0),
appBar: AppBarWidget(
drawerOpen: drawerPosition,
appBarVisible: _isVisible,
drawerVisible: true,
),
body: ColorfulSafeArea(
overflowRules: OverflowRules.only(left: true, bottom: true),
child: GetBuilder<PostsController>(
id: 'posts',
init: PostsController(),
builder: (_postsController) {
_postsControllerGlobal = _postsController;
// Scenario 1 - Triggers when user pull down to get new posts
return RefreshIndicator(
onRefresh: () {
return _postsController.loadPosts(
isRefreshLoad: true);
},
child: StreamBuilderWidget(
stream: _postsController.posts.stream,
// Scenario 2 Triggers when scroll controller reaches end of list
scrollController: _scrollController, isDrawerOpen: _isDrawerOpen,
widgetType: 'PostItemWidget',
),
);
},
),
),
),
----在此处输入代码
------
我需要一种方法,无论触发器是 PullDown 还是到达列表的最后末尾,在它们被添加到流后始终按日期 desc 顺序对获取的帖子列表进行重新排序,以便始终显示项目按发布顺序。
希望有人能帮帮我。
最佳答案
经过几天的努力,我发现它要简单得多,而且由于我缺乏知识。
由于列表是可观察的,只需将其转换为列表就足以完成排序:
普通列表
可观察列表
谢谢!
关于list - 从 getX dart 包中为 Flutter 应用程序排序 RxList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63473890/
我正在学习自己的 Flutter GetX 并坚持了一点。实际上我想知道为什么当我再次访问该页面/对话框时不会调用 GetX Controlled 的 onInit 方法。 假设我有一个简单的Text
当我发现自己多次调用同一个 getter 方法时,这应该被认为是一个问题吗? [总是] 分配给局部变量并只调用一次是否更好? 我确定答案当然是“视情况而定”。 我更关心更简单的情况,其中 getter
我可以使用 GetX 看到导航器堆栈吗?我查看了文档,但找不到有关此主题的任何内容。我通常会关闭例如这样的对话框 Get.until((route) => !Get.isDialogOpen); 但我
我想制作一个密码文本框,其中的内容可见性可以通过后缀图标来控制。 代码可能是这样的: import 'package:flutter/material.dart'; import 'package:g
我想使用 Get 包将多个数据从一个屏幕传递到另一个屏幕。 Get.to(Second(), arguments: ["First data", "Second data"]); 最佳答案 步骤:1
这是getX来自的vector.js var Vector = (function () { function Vector(pX, pY) { this.setX(pX);
让我们假设一个 ImageView,当它被添加到我的布局(相对布局)时,没有缩放(比例为 1)。如果我调用 getX(),它会返回正确的 X 位置。 但是,如果我现在用 2 调用 setScaleX(
我有一个这样的列表: List countries = [ Country(name: 'United States', border: ['Mexico', 'Canada']),
我正在为我的新项目尝试 GetX,并尝试使用受启发的 AnimationController this comment . Tween -> blur & spread & AnimationCont
应用程序一直卡在启动画面上的原因是什么?我使用 getx 状态管理。如果 authToken 不为空,它应该转到主页。但是 Controller 类中的 onInit 没有调用。 void main(
我隔离了一些繁重的计算,然后在接收到结果的列表时运行一个 for 循环以将它们添加到带有 items var items = [].obs;的可观察列表中; 问题是我正在尝试从启动 Controlle
我正在使用 Get.snackbar() 来显示连接到 API 的过程。我不明白如何以编程方式关闭 snackbar ?我有以下代码: @override Future getImportantD
我正在尝试在 ListView 中无限滚动。我正在从 API 获取数据。我正在使用 getx。我的 ListView 总是在滚动结束时重建。我找不到我做错的地方。 This is what i try
我使用 flutter 有一段时间了,最近使用 Get 来实现状态管理。 我在打开加载对话框 1 和消息对话框时遇到问题。然后我想关闭加载对话框,但消息对话框是保持关闭的对话框。 import '
我正在寻找如何在 GetX 的最佳实践中处理表单和验证的示例? 有没有很好的例子,或者有人可以向我展示我们如何最好地做到这一点的例子? 最佳答案 GetX 不是所有问题的解决方案,但它有一些实用方法可
我正在尝试将旧代码转换为新代码语法。我对 RxList 有疑问。 所以我改变了postModel.assign(postDetail); 但是在我的 news_detail 页面中我如何获取值(val
我想在单击图 block 时更改 ListTile 文本的颜色,我该怎么做,而且颜色应该只针对特定的选定图 block 更改。我的方法如下: ListView.builder( ite
在下面的代码中,为什么首先执行 getX() 方法而不是构造函数: public class ConsructorQuestion { int x = getX(); // same thi
我正在尝试将旧代码转换为新代码语法。我对 RxList 有疑问。 所以我改变了postModel.assign(postDetail); 但是在我的 news_detail 页面中我如何获取值(val
我想在单击图 block 时更改 ListTile 文本的颜色,我该怎么做,而且颜色应该只针对特定的选定图 block 更改。我的方法如下: ListView.builder( ite
我是一名优秀的程序员,十分优秀!