【发布时间】:2021-10-19 17:18:36
【问题描述】:
如何在颤振中向 listview.builder 添加刷新? 这是我在帖子屏幕上的所有代码,当我在热重启后不实时删除帖子或添加新帖子时它工作了我想向列表视图添加刷新我在 refreshIndecator 中调用了 getPosts 方法但没有工作请有人可以帮助我吗?谢谢。
代码:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:data_connection_checker/data_connection_checker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:social_media_app/models/post.dart';
import 'package:social_media_app/posts/create_post.dart';
import 'package:social_media_app/utils/firebase.dart';
import 'package:social_media_app/widgets/indicators.dart';
import 'package:social_media_app/widgets/posts_view.dart';
class Timeline extends StatefulWidget {
@override
_TimelineState createState() => _TimelineState();
}
class _TimelineState extends State<Timeline> {
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
List<DocumentSnapshot> post = [];
bool isLoading = false;
DocumentSnapshot lastDocument;
ScrollController _scrollController;
getPosts() async {
if (isLoading) {
return CircularProgressIndicator();
}
if (mounted)
setState(() {
isLoading = true;
});
QuerySnapshot querySnapshot;
if (lastDocument == null) {
querySnapshot =
await postRef.orderBy('timestamp', descending: true).get();
} else {
querySnapshot = await postRef
.orderBy('timestamp', descending: true)
.startAfterDocument(lastDocument)
.get();
}
lastDocument = querySnapshot.docs[querySnapshot.docs.length - 1];
post.addAll(querySnapshot.docs);
if (mounted)
setState(() {
isLoading = false;
});
}
@override
void initState() {
super.initState();
getPosts();
_scrollController?.addListener(() {
double maxScroll = _scrollController.position.maxScrollExtent;
double currentScroll = _scrollController.position.pixels;
double delta = MediaQuery.of(context).size.height * 0.25;
if (maxScroll - currentScroll <= delta) {
getPosts();
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: scaffoldKey,
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text(
'Admin App',
style: TextStyle(fontWeight: FontWeight.w900),
),
leading: IconButton(
onPressed: () => Navigator.push(
context, MaterialPageRoute(builder: (_) => CreatePost())),
icon: Icon(Feather.plus)),
centerTitle: true,
),
body: isLoading
? circularProgress(context)
: ListView.builder(
controller: _scrollController,
itemCount: post.length,
itemBuilder: (context, index) {
internetChecker(context);
PostModel posts = PostModel.fromJson(post[index].data());
return Padding(
padding: const EdgeInsets.all(10.0),
child: Posts(post: posts),
);
},
),
);
}
internetChecker(context) async {
bool result = await DataConnectionChecker().hasConnection;
if (result == false) {
showInSnackBar('No Internet Connection', context);
}
}
void showInSnackBar(String value, context) {
ScaffoldMessenger.of(context).removeCurrentSnackBar();
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(value)));
}
}
【问题讨论】:
标签: flutter pull-to-refresh flutter-listview