You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:17:05