Flutter应用使用Access Token登录时出现编译错误及认证问题
登录与用户详情功能编译错误:The getter 'response' isn't defined
我正在实现Flutter应用的登录与用户详情获取功能:输入mapVendorNumber和username后合并为formattedUsername,通过tokenUrl提交用户名和密码验证获取access-token,再将该token作为Authorization头调用userDetailsUrl获取用户详情。但每次编译都出现以下错误:
CompilationError: The getter 'response' isn't defined for the class '_LoginPageState'.
'_LoginPageState' is from 'package:frontend/pages/login_page.dart' ('lib/pages/login_page.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'response'.response^^^^^^^^
获取access-token的代码
class _LoginPageState extends State<LoginPage> { final _formKey = GlobalKey<FormState>(); final TextEditingController _mapVendorNumberController = TextEditingController(); final TextEditingController _usernameController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); final String tokenUrl = "https:hidden"; final String userDetailsUrl = "https:hidden"; final String authorizationHeader = "Basic hidden"; @override void initState() { super.initState(); _checkLoginStatus(); } Future<void> _checkLoginStatus() async { final prefs = await SharedPreferences.getInstance(); String? token = prefs.getString('access_token'); if (token != null) { await _fetchUserDetails(token); } } Future<void> _login() async { if (!_formKey.currentState!.validate()) return; String mapVendorNumber = _mapVendorNumberController.text.trim(); String username = _usernameController.text.trim(); String password = _passwordController.text.trim(); String formattedUsername = "$mapVendorNumber#$username"; try { var tokenResponse = await http.post( Uri.parse(tokenUrl), headers: { 'Authorization': authorizationHeader, 'Content-Type': 'application/x-www-form-urlencoded', }, body: { 'username': formattedUsername, 'password': password, 'grant_type': 'password', }, ); if (tokenResponse.statusCode == 200) { var tokenData = json.decode(tokenResponse.body); String accessToken = tokenData['access_token']; final prefs = await SharedPreferences.getInstance(); await prefs.setString('access_token', accessToken); await _fetchUserDetails(accessToken); } else { _showError("Invalid credentials. Please try again."); } } catch (e) { _showError("An error occurred. Please check your connection."); } }
获取用户详情的代码
Future<void> _fetchUserDetails(String token) async { try { var response = await http.get( Uri.parse(userDetailsUrl), headers: { 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', }, ); if (response.statusCode == 200) { var userDetails = json.decode(response.body); Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => CustomerPage(userDetails: userDetails)), ); } else { _showError("Failed to fetch user details."); } } catch (e) { _showError("An error occurred while fetching user details."); } }
我尝试将response改为tokenResponse,但问题仍未解决。预期流程为:验证通过后获取token,用token获取用户详情并跳转页面。
内容的提问来源于stack exchange,提问作者Mark Kipchumba
相关产品推荐
相关产品推荐

