반응형
미래의 인스턴스 <String?문자열 데이터 플러터/파이어베이스 대신 >'
파이어베이스에서 데이터를 꺼내는 데 문제가 있었는데, 현재 'Future<String?의 인스턴스가 계속 반환됩니다."환자" 또는 "물리치료사"의 문자열 대신 >' 문제가 무엇인지 알 수 있을까요?
class Wrapper extends StatefulWidget {
@override
_WrapperState createState() => _WrapperState();
}
class _WrapperState extends State<Wrapper> {
Future<String?> getUserType(String uid) async {
try {
DocumentSnapshot _docSnapShot = await FirebaseFirestore.instance.collection('users').doc(uid).get();
var userType = await ( _docSnapShot.data() as dynamic)['userType'];
print(userType);
return await userType;
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
final user = Provider.of<CustomUser?>(context);
//return either Home or Authenticate widget
if ( user == null) {
print("this");
return Authenticate();
} else if (getUserType(user.uid) == "Patient") {
print('this happens');
return PatientHome();
} else {
print(getUserType(user.uid).toString() + "this thing");
return PhysioHome();
}
}
}
의 반환 값이 이므로 콜백의 값에 액세스하거나 비동기 함수에서 값을 기다려야 합니다.
Flatter Widget에서 함수를 사용하기 때문에 빌드 메서드는 동기 함수여야 하므로 함수를 사용할 수 없습니다. 그러나 이 사용 사례에는 를 사용할 수 있습니다.
아래 예제 코드와 같은 Future Builder를 사용하도록 빌드 방법을 업데이트하십시오.
@override
Widget build(BuildContext context) {
final user = Provider.of<CustomUser?>(context);
if (user == null) {
return Authenticate();
} else {
return FutureBuilder(
future: getUserType(user.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
final userType = snapshot.data;
if (userType == 'Patient') {
return PatientHome();
} else {
return PhysioHome();
}
} else {
// A Widget to show while the value loads
return Text('Loading');
}
}
);
}
}
참고 항목:
반응형
'개발하자' 카테고리의 다른 글
Showing line numbers in IPython/Jupyter Notebooks (0) | 2022.11.06 |
---|---|
파이썬에서 잘못된 경로 문자를 제거하는 방법은 무엇입니까? (0) | 2022.11.06 |
오른쪽 유형 스크립트 유형:Svelte에서 핸들러 변경 (0) | 2022.11.03 |
Flater - 데이터가 변경될 때 getx 컨트롤러가 업데이트되지 않음 (0) | 2022.11.03 |
테라폼의 Azure App Service 고정 슬롯 설정 (0) | 2022.11.02 |