【发布时间】:2023-03-19 11:26:01
【问题描述】:
import 'package:flutter/material.dart';
import 'package:myfitnesstrainer/logic/firestore_services.dart';
import 'package:myfitnesstrainer/models/user.dart';
import 'package:myfitnesstrainer/models/user_repository.dart';
import 'package:myfitnesstrainer/screens/loading_screen.dart';
import 'package:provider/provider.dart';
class DistributePage extends StatefulWidget {
// final User currentUser;
const DistributePage();
@override
_DistributePageState createState() => _DistributePageState();
}
class _DistributePageState extends State<DistributePage> {
FirestoreServices _firestoreServices = new FirestoreServices();
bool isLoading=true;
User curUser= new User();
Future<User> getGoogleContent(UserRepository auth) async {
var auth_user = await auth.getUser();
print(auth_user.uid); //This print
curUser.userID = auth_user.uid;
curUser.name = auth_user.displayName;
curUser.email = auth_user.email;
curUser.imageUrl = auth_user.photoUrl;
curUser =await _firestoreServices.saveUser(curUser);
setState(() {
isLoading = false;
});
return curUser;
}
@override
Widget build(BuildContext context) {
UserRepository auth = Provider.of<UserRepository>(context);
getGoogleContent(auth);
void logout() async {
await auth.signOut();
}
return isLoading ? LoadingScreen() : Scaffold(appBar:AppBar(title:Text("Giriş")), body:
IconButton(icon:Icon(Icons.signal_cellular_4_bar),onPressed: logout)
);
}
}
我想要做的是将我的用户数据保存到 firebase 并在执行此操作时显示加载屏幕。它可以工作,但是我的函数中的打印语句不断被无限调用。我知道它与 setState 有关,但我不明白为什么它会不断渲染和调用该函数。如果有人能告诉我为什么我一直在控制台中获取打印的用户 ID,我会很高兴。
【问题讨论】:
-
规则 #1:不要在小部件中包含业务逻辑。
-
setState 每次都会触发 build 方法,所以把你的函数放在 initstate 中。
标签: flutter