【发布时间】:2021-02-14 13:32:31
【问题描述】:
我有这个错误
I/flutter (12204): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (12204): The following NoSuchMethodError was thrown building FutureBuilder<Map<String, dynamic>>(dirty,
I/flutter (12204): dependencies: [Provider], state: _FutureBuilderState<Map<String, dynamic>>#0ec0c):
I/flutter (12204): Class '_InternalLinkedHashMap<String, dynamic>' has no instance getter 'uid'.
I/flutter (12204): Receiver: _LinkedHashMap len:3
I/flutter (12204): Tried calling: uid
I/flutter (12204):
I/flutter (12204): The relevant error-causing widget was:
I/flutter (12204): FutureBuilder<Map<String, dynamic>> file:///D:/Projects/Davrick/curtain/lib/main.dart:26:15
当我运行我的应用程序时。这是一个社交媒体应用程序,因此我需要在用户登录时获取用户 ID 并将其用于其他事情(例如显示他们的图片和消息等)。 首先,我使用 Firebase 构建了这个应用程序(这很简单))。现在我正在使用 Django REST 框架,我遇到了一些错误。
下面是我的 main.dart 代码:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Provider(
child: MaterialApp(
title: 'Curtain App',
home: FutureBuilder(
future: AuthService.getToken(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Container();
}
if (snapshot.hasData) {
Provider.of<UserData>(context).currentUserId = snapshot.data.uid; //this line is giving error
return HomeScreen();
} else {
return LoginScreen();
}
},
),
routes: {
LoginScreen.id: (context) => LoginScreen(),
SignupScreen.id: (context) => SignupScreen(),
FeedScreen.id: (context) => FeedScreen(),
},
),
);
}
}
这是AuthService类的代码
static Future<dynamic> loginUser(String username, String password) async {
print(username);
print(password);
final result = await http.post('$baseURL/en/users/login/', headers: {
'Accept': 'application/json',
}, body: {
'username': username,
'password': password,
});
return result?.body;
}
static setToken(String token, String refreshToken) async {
_AuthData data = _AuthData(token, refreshToken);
await SESSION.set('tokens', data);
}
static Future<Map<String, dynamic>> getToken() async {
return await SESSION.get('tokens');
}
static removeToken() async {
await SESSION.prefs.clear();
}
这里是 _AuthData 类
class _AuthData {
String token, refreshToken;
_AuthData(this.token, this.refreshToken);
// toJson
// required by Session lib
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = Map<String, dynamic>();
data['token'] = token;
data['refreshToken'] = refreshToken;
return data;
}
}
我还需要提到我的 Provider 类是定制的。 请帮助解决这个问题。 谢谢。
【问题讨论】:
-
可以添加
AuthService类的代码吗? -
我添加了 AuthService 类
-
显示
_AuthData类 -
我添加了。请检查。但我认为错误不存在。错误不是因为Provider类吗??