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

如何在Flutter中调用Laravel API实现注册、登录功能?

Flutter对接Laravel登录注册API实现方案

Flutter生态中与React的axios定位对标的主流网络请求库是dio,功能覆盖拦截器、全局配置、FormData、错误处理等常用场景,完全可以满足对接Laravel登录注册API的需求,具体实现如下:

1. 基础依赖引入

  • 在项目的pubspec.yaml文件中添加dio依赖:
dependencies:
  flutter:
    sdk: flutter
  dio: ^5.4.0+1
  • 执行命令flutter pub get完成依赖安装。

2. 封装通用请求实例

建议提前封装全局dio实例,统一配置Laravel服务域名、公共请求头、超时时间等参数,避免重复配置:

import 'package:dio/dio.dart';

class ApiService {
  final Dio _dio = Dio(BaseOptions(
    // 替换为你的Laravel服务API根地址
    baseUrl: 'https://your-laravel-app.com/api',
    // 必须加该请求头,Laravel才会返回JSON格式的错误响应
    headers: {'Accept': 'application/json'},
    connectTimeout: const Duration(seconds: 15),
    receiveTimeout: const Duration(seconds: 15),
  ));

  // 单例模式,全局共用同一个实例
  static final ApiService _instance = ApiService._internal();
  factory ApiService() => _instance;
  ApiService._internal();
}

3. 实现注册接口调用

在ApiService类中新增注册方法,适配Laravel默认的注册参数要求:

// 注册方法,userData需包含name、email、password、password_confirmation字段
Future<Response> register(Map<String, dynamic> userData) async {
  try {
    final response = await _dio.post('/register', data: userData);
    return response;
  } on DioException catch (e) {
    // 直接返回Laravel响应的错误内容,供上层处理
    if (e.response != null) return e.response!;
    rethrow;
  }
}

调用示例:

final registerResult = await ApiService().register({
  "name": "测试用户",
  "email": "test@example.com",
  "password": "12345678",
  "password_confirmation": "12345678"
});
// 注册成功后可直接获取返回的token或者用户信息
if (registerResult.statusCode == 200) {
  print(registerResult.data);
}

4. 实现登录接口调用

登录逻辑和注册类似,登录成功后需要把Laravel返回的认证token加到请求头中,供后续需要权限的接口使用:

// 登录方法
Future<Response> login(String email, String password) async {
  try {
    final response = await _dio.post('/login', data: {
      "email": email,
      "password": password
    });
    // 登录成功后存储认证凭证
    if (response.statusCode == 200) {
      String token = response.data['token'];
      // 给后续所有请求默认加Authorization头
      _dio.options.headers['Authorization'] = 'Bearer $token';
      // 如需实现自动登录,可把token持久化存储到本地,推荐使用shared_preferences包
    }
    return response;
  } on DioException catch (e) {
    if (e.response != null) return e.response!;
    rethrow;
  }
}

5. 常见适配说明

  • 如果你的Laravel使用Sanctum的Cookie认证模式,只需额外引入dio_cookie_manager包开启Cookie自动管理即可,无需手动处理token
  • Laravel返回的表单验证错误统一存储在响应的errors字段中,可直接取出展示给用户
  • 敏感凭证不要明文存储到本地文件,优先使用系统提供的安全存储能力

内容的提问来源于stack exchange,提问作者Sara Nekonam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:07