Flutter 颤振-方法'|';在null上调用了。热重新加载后,它开始工作
我是个新手。我不知道在后台发生了什么,因为热加载后它的工作很好。在另一个发生的dart文件中,firebase不会在热重新加载后向我提供初始化数据Flutter 颤振-方法'|';在null上调用了。热重新加载后,它开始工作,flutter,statefulwidget,Flutter,Statefulwidget,我是个新手。我不知道在后台发生了什么,因为热加载后它的工作很好。在另一个发生的dart文件中,firebase不会在热重新加载后向我提供初始化数据 class CityServices { getCites() { return Firestore.instance.collection('cities').getDocuments(); } } class _HomeScreenState extends State<HomeScreen
class CityServices {
getCites() {
return Firestore.instance.collection('cities').getDocuments();
}
}
class _HomeScreenState extends State<HomeScreen> {
bool citiesFlag = false;
var cities;
int citiesCount;
String actualCity;
让我解释一下这个问题及其原因,然后提出一些解决方案 在
initState
内部,您正在调用CityServices().getCites()。然后…
这是一个async
方法。但是,当您的小部件第一次构建时,您期望从Firestore获得的数据还没有准备好,因此您将获得
城市
和城市计数
的null
短期解决方案:确保有空检查,在等待数据时显示指示器
body: Center(
child: (cities == null) ?
CircularProgressIndicator()
: Container(...
此外,您还可以将initState
重构为如下内容
void getCities() async {
var snapshot CityServices().getCites();
setState(() {
citiesFlag = true;
cities = snapshot.documents;
citiesCount = snapshot.documents.length;
});
}
@override
void initState() {
getCities();
super.initState();
}
长期解决方案:使用
BLoC
模式,使数据加载与UI分离。请参阅以了解如何实施它。让我解释一下这个问题及其原因,然后提出一些解决方案 在
initState
内部,您正在调用CityServices().getCites()。然后…
这是一个async
方法。但是,当您的小部件第一次构建时,您期望从Firestore获得的数据还没有准备好,因此您将获得
城市
和城市计数
的null
短期解决方案:确保有空检查,在等待数据时显示指示器
body: Center(
child: (cities == null) ?
CircularProgressIndicator()
: Container(...
此外,您还可以将initState
重构为如下内容
void getCities() async {
var snapshot CityServices().getCites();
setState(() {
citiesFlag = true;
cities = snapshot.documents;
citiesCount = snapshot.documents.length;
});
}
@override
void initState() {
getCities();
super.initState();
}
长期解决方案:使用
BLoC
模式,使数据加载与UI分离。有关如何实现它的信息,请参阅。错误消息已消失。但现在,在应用程序开始时,指示器旋转,旋转,我的应用程序还没有启动。这是我的主.dart文件。void main()=>runApp(JaszEtlap());类JaszEtlap扩展了无状态小部件{final appTitle='A JÁSZSÁGÉTLAPJA';@覆盖小部件构建(BuildContext context){return MaterialApp(initialRoute:HomeScreen.id,routes:{HomeScreen.id:(context)=>HomeScreen()}听起来不错。我刚刚用附加的example.btw更新了我的答案。处理异步数据(即从Firestore加载的数据)的方式需要与UI分离。因此,我建议您使用
flatter\u bloc
,查看答案中共享的链接。请记住,如果答案解决了您的问题,请接受并投票。见指南谢谢你的帮助beerstorm!错误信息已消失。但现在,在应用程序开始时,指示器旋转,旋转,我的应用程序还没有启动。这是我的主.dart文件。void main()=>runApp(JaszEtlap());类JaszEtlap扩展了无状态小部件{final appTitle='A JÁSZSÁGÉTLAPJA';@覆盖小部件构建(BuildContext context){return MaterialApp(initialRoute:HomeScreen.id,routes:{HomeScreen.id:(context)=>HomeScreen()}听起来不错。我刚刚用附加的example.btw更新了我的答案。处理异步数据(即从Firestore加载的数据)的方式需要与UI分离。因此,我建议您使用flatter\u bloc
,查看答案中共享的链接。请记住,如果答案解决了您的问题,请接受并投票。见指南谢谢你的帮助beerstorm!