我正在设计一个在某种程度上类似于Facebook应用程序的应用程序。我要模拟的是他们如何处理首页中帖子的更新。
例如,说我向下滚动到朋友莉萨的帖子,她在一分钟前发布了该帖子。如果我只盯着屏幕看2分钟,它仍然会说它是1分钟前发布的。但是,如果我向下滚动到另一篇文章,然后立即滚动回到她的文章,它将正确地指出它是3分钟前发布的。
我想实现类似的目标,但是我不知道如何实现或搜索它。试想一下,当我滚动到服务器时正在打给服务器,一次只能看到1条完整的帖子。
答案 0 :(得分:0)
我认为您需要每隔1分钟使用Timer.periodic进行设置状态...这样的事情 Flutter Countdown Timer
void startTimer() {
const oneMin = const Duration(Minute: 1);
_timer = new Timer.periodic(
oneMin,
(Timer timer) => setState(() {},), );
}
并在Init状态下调用此方法...此代码仅供参考,可能无法正常工作! ...链接示例更好。
答案 1 :(得分:0)
我不确定您使用的是哪个数据库,我从您的问题中了解的是您想从数据库中读取数据并在listview中始终显示它们。完整的代码here!通过@seanmavley
StreamController _postsController;
int count = 1;
Future fetchPost([howMany = 5]) async {
final response = await http.get(
'https://blog.khophi.co/wp-json/wp/v2/posts/?per_page=$howMany&context=embed');
if (response.statusCode == 200) {
return json.decode(response.body);
} else {
throw Exception('Failed to load post');
}
}
loadPosts() async {
fetchPost().then((res) async {
_postsController.add(res);
return res;
});
}
showSnack() {
return scaffoldKey.currentState.showSnackBar(
SnackBar(
content: Text('New content loaded'),
),
);
}
Future<Null> _handleRefresh() async {
count++;
print(count);
fetchPost(count * 5).then((res) async {
_postsController.add(res);
showSnack();
return null;
});
}
//inside the scaffold
body: StreamBuilder(
stream: _postsController.stream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
print('Has error: ${snapshot.hasError}');
print('Has data: ${snapshot.hasData}');
print('Snapshot Data ${snapshot.data}');
if (snapshot.hasError) {
return Text(snapshot.error);
}
if (snapshot.hasData) {
return Column(
children: <Widget>[
Expanded(
child: Scrollbar(
child: RefreshIndicator(
onRefresh: _handleRefresh,
child: ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
var post = snapshot.data[index];
return ListTile(
title: Text(post['title']['rendered']),
subtitle: Text(post['date']),
);
},
),
),
),
),
],
);
}