'Object?' 类型的值不能分配给 'Tasker?' 类型的变量
A value of type 'Object?' can't be assigned to a variable of type 'Tasker?'
最近将一个现有的和正在运行的 flutter 项目更新为空安全,但我无法使用 firebase 使我的登录逻辑正常工作。它因以下错误而失败
无法将 'Object?' 类型的值赋给 'Tasker?' 类型的变量。
尝试更改变量的类型,或将右侧类型强制转换为 'Tasker?'.
Widget _getScreenId() {
print('screen id');
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Provider.of<UserData>(context, listen: false).currentUserId =
snapshot.data!.uid;
return FutureBuilder(
future: DatabaseService.getUserWithId(snapshot.data!.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
Tasker? user = snapshot.data;
print("home");
return HomeScreen(user: user, currentUserId: '',);
}
return const SizedBox.shrink();
});
} else {
return const LoginScreen();
}
},
);
}
你的快照默认returns一个对象类型尝试快照到AsyncSnapshot快照
Widget _getScreenId() {
print('screen id');
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context,AsyncSnapshot<Tasker> snapshot) {
if (snapshot.hasData) {
Provider.of<UserData>(context, listen: false).currentUserId =
snapshot.data!.uid;
return FutureBuilder(
future: DatabaseService.getUserWithId(snapshot.data!.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
Tasker? user = snapshot.data;
print("home");
return HomeScreen(user: user, currentUserId: '',);
}
return const SizedBox.shrink();
});
} else {
return const LoginScreen();
}
},
);
}
最终得到了这个似乎有效的方法
Widget _getScreenId() {
// print('screen id');
return StreamBuilder<User>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Provider.of<UserData>(context, listen: false).currentUserId =
snapshot.data.uid;
return FutureBuilder(
future: DatabaseService.getUserWithId(snapshot.data.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
Tasker user = snapshot.data;
// print("home");
return HomeScreen(currentUserId: user.id, user: user);
}
return const SizedBox.shrink();
});
} else {
return const LoginScreen();
}
},
);
}
最近将一个现有的和正在运行的 flutter 项目更新为空安全,但我无法使用 firebase 使我的登录逻辑正常工作。它因以下错误而失败
无法将 'Object?' 类型的值赋给 'Tasker?' 类型的变量。 尝试更改变量的类型,或将右侧类型强制转换为 'Tasker?'.
Widget _getScreenId() {
print('screen id');
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Provider.of<UserData>(context, listen: false).currentUserId =
snapshot.data!.uid;
return FutureBuilder(
future: DatabaseService.getUserWithId(snapshot.data!.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
Tasker? user = snapshot.data;
print("home");
return HomeScreen(user: user, currentUserId: '',);
}
return const SizedBox.shrink();
});
} else {
return const LoginScreen();
}
},
);
}
你的快照默认returns一个对象类型尝试快照到AsyncSnapshot快照
Widget _getScreenId() {
print('screen id');
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context,AsyncSnapshot<Tasker> snapshot) {
if (snapshot.hasData) {
Provider.of<UserData>(context, listen: false).currentUserId =
snapshot.data!.uid;
return FutureBuilder(
future: DatabaseService.getUserWithId(snapshot.data!.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
print(snapshot.data);
Tasker? user = snapshot.data;
print("home");
return HomeScreen(user: user, currentUserId: '',);
}
return const SizedBox.shrink();
});
} else {
return const LoginScreen();
}
},
);
}
最终得到了这个似乎有效的方法
Widget _getScreenId() {
// print('screen id');
return StreamBuilder<User>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasData) {
Provider.of<UserData>(context, listen: false).currentUserId =
snapshot.data.uid;
return FutureBuilder(
future: DatabaseService.getUserWithId(snapshot.data.uid),
builder: (context, snapshot) {
if (snapshot.hasData) {
Tasker user = snapshot.data;
// print("home");
return HomeScreen(currentUserId: user.id, user: user);
}
return const SizedBox.shrink();
});
} else {
return const LoginScreen();
}
},
);
}