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);