Android 更新ListView上的列表时,颤振页面不会重新加载
请提前道歉,因为问题可能很小 所以我有这个文件Android 更新ListView上的列表时,颤振页面不会重新加载,android,firebase,flutter,listview,dart,Android,Firebase,Flutter,Listview,Dart,请提前道歉,因为问题可能很小 所以我有这个文件 import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import '../utils/authentication.dart'; import '../utils/stated.dart'; import 'us
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import '../utils/authentication.dart';
import '../utils/stated.dart';
import 'user_info_screen.dart';
class CategoryScreen extends StatefulWidget {
const CategoryScreen({Key? key, required User user, required Stated stated, required int intel})
: _user = user, _stated = stated, _intel = intel,
super(key: key);
final User _user;
final Stated _stated;
final int _intel;
@override
_CategoryScreenState createState() => _CategoryScreenState();
}
class _CategoryScreenState extends State<CategoryScreen> {
late User _user;
late Stated _stated;
late int _intel;
bool loaded = false;
List<Widget> rows = [];
int limit = 2;
var temporal = {};
@override
void initState() {
_user = widget._user;
_stated = widget._stated;
_intel = widget._intel;
super.initState();
}
@override
Widget build(BuildContext context) {
//print(_user.photoURL);
if (!loaded) {
print(rows.toString());
setState(() {
// Rows ==============================================================================================================
FirebaseFirestore.instance.collection('listings').where('category', isEqualTo: _stated.CATEGORIES[_intel]).orderBy('views', descending: true).limit(limit).get().then((value) {
rows.add(
Padding(
padding: EdgeInsets.only(top: 16.0, bottom: 16.0, right: 16.0, left: 16.0),
child: Text(
_stated.CATEGORIES[_intel],
style: TextStyle(
fontSize: 30,
color: Colors.white,
letterSpacing: 2,
),
),
)
);
value.docs.forEach((element) {
if (element.data()['reviewed'] == false) {
rows.add(
Container(
height: 30.0,
)
);
rows.add(
OutlineButton(
onPressed: () async {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => DisplayScreen(
user: _user,
stated: _stated,
intel: element.id,
),
),
);
},
child: Column(
children: <Widget> [
Container(
height: 175.0,
width: 200,
child: Image.network(element.data()['image']['0']),
),
Container(
height: 75.0,
width: 200,
child: Padding(
padding: EdgeInsets.only(top: 10.0, bottom: 10.0, right: 16.0, left: 16.0),
child: Center(
child: Text(
element.data()['title'],
style: TextStyle(
fontSize: 15,
color: Colors.white,
letterSpacing: 2,
),
),
),
),
),
],
)
)
);
}
});
}).then((e) {
loaded = true;
print(rows.toString());
if (rows.length == limit) {
rows.add(
Container(
height: 30.0,
)
);
rows.add(
OutlineButton(
onPressed: () async {
},
child: Column(
children: <Widget> [
Container(
height: 250.0,
width: 200,
child: Padding(
padding: EdgeInsets.only(top: 10.0, bottom: 10.0, right: 16.0, left: 16.0),
child: Center(
child: Text(
'Load More',
style: TextStyle(
fontSize: 15,
color: Colors.white,
letterSpacing: 2,
),
),
),
),
),
],
)
)
);
}
});
});
// End of setState =============================================================
}
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.black,
actions: <Widget>[
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.black),
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40),
),
),
),
onPressed: () async {
User? user =
await Authentication.signInWithGoogle(context: context);
if (user != null) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => UserInfoScreen(
user: user,
),
),
);
}
},
child: Padding(
padding: const EdgeInsets.fromLTRB(0, 10, 0, 10),
child: _user.photoURL != null
? ClipOval(
child: Material(
color: Colors.black.withOpacity(0.3),
child: Image.network(
(_user.photoURL!).replaceAll("=s96-c", "=s1000-c"),
height: 50.0,
),
),
)
: ClipOval(
child: Material(
color: Colors.black.withOpacity(0.3),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Icon(
Icons.person,
size: 50,
color: Colors.grey,
),
),
),
),
),
),
],
),
body: Center(
child: ListView(
shrinkWrap: true,
padding: EdgeInsets.all(10.0),
children: rows,
),
)
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“../utils/authentication.dart”;
导入“../utils/stated.dart”;
导入“用户信息屏幕.dart”;
类CategoryScreen扩展StatefulWidget{
常量类别屏幕({Key?Key,必需的用户,必需的声明,必需的int intel})
:_user=user,_stated=stated,_intel=intel,
超级(键:键);
最终用户\u用户;
最终声明(已声明);;
最终INTU英特尔;
@凌驾
_CategoryScreenState createState()=>U CategoryScreenState();
}
类_CategoryScreenState扩展状态{
迟到用户(u用户),;
晚声明(u声明);;
晚国际英特尔;
bool-loaded=false;
列表行=[];
整数极限=2;
var-temporal={};
@凌驾
void initState(){
_用户=小部件。\u用户;
_声明=小部件。\声明;
_英特尔=小部件;
super.initState();
}
@凌驾
小部件构建(构建上下文){
//打印(_user.photoURL);
如果(!已加载){
打印(rows.toString());
设置状态(){
//排==============================================================================================================
FirebaseFirestore.instance.collection('listings')。其中('category',isEqualTo:_stated.CATEGORIES[_intel])。orderBy('views',descending:true)。limit(limit)。get()。然后((值){
行。添加(
填充物(
填充:仅限边设置(顶部:16.0,底部:16.0,右侧:16.0,左侧:16.0),
子:文本(
_声明。类别[_英特尔],
样式:TextStyle(
尺寸:30,
颜色:颜色,白色,
字母间距:2,
),
),
)
);
value.docs.forEach((元素){
if(element.data()['revied']==false){
行。添加(
容器(
身高:30.0,
)
);
行。添加(
大纲按钮(
onPressed:()异步{
导航器.of(上下文).push(
材料路线(
生成器:(上下文)=>DisplayScreen(
用户:_用户,
声明:_声明,
英特尔:element.id,
),
),
);
},
子:列(
儿童:[
容器(
身高:175.0,
宽度:200,
子项:Image.network(element.data()['Image']['0']),
),
容器(
身高:75.0,
宽度:200,
孩子:填充(
填充:仅限边设置(顶部:10.0,底部:10.0,右侧:16.0,左侧:16.0),
儿童:中心(
子:文本(
element.data()['title'],
样式:TextStyle(
尺寸:15,
颜色:颜色,白色,
字母间距:2,
),
),
),
),
),
],
)
)
);
}
});
}).然后((e){
加载=真;
打印(rows.toString());
if(rows.length==限制){
行。添加(
容器(
身高:30.0,
)
);
行。添加(
大纲按钮(
onPressed:()异步{
},
子:列(
儿童:[
容器(
高度:250.0,
宽度:200,
孩子:填充(
填充:仅限边设置(顶部:10.0,底部:10.0,右侧:16.0,左侧:16.0),
儿童:中心(
子:文本(
“加载更多”,
样式:TextStyle(
尺寸:15,
颜色:颜色,白色,
字母间距:2,
),
),
),
),
),
],
)
)
);
}
});
});
//设定状态结束=============================================================
}
返回脚手架(
背景颜色:Colors.black,
appBar:appBar(
海拔:0,
背景颜色:Colors.black,
行动:[
升降按钮(
样式:钮扣样式(
背景颜色:MaterialStateProperty.all(颜色:黑色),
形状:MaterialStateProperty.all(
圆形三角形边框(
边界半径:边界半径。圆形(40),
),
),
),
onPressed:()异步{
用户?用户=
等待身份验证。使用Google登录(上下文:context);