76ab19ea47
- 蓝色顶栏(#1565C0)+ 深蓝侧边栏(#0D47A1),含折叠/展开 - 底部状态栏:门店编号、登录用户、登录时间、实时时钟、版本号 - 登录页:居中卡片,支持密码显示/隐藏 - 入库单列表:筛选/搜索/日期选择/分页,三个 Tab(入库单/查询/审核) - 新建入库单:基本信息 + 商品明细动态增删,实时计算合计金额 - 出库单列表:同入库单风格 - 库存查询:4 张统计卡片 + 颜色高亮缺货/预警行,库存预警 Tab - 往来单位、财务、商品、系统设置(用户/仓库/编号规则/系统参数) - 使用 Riverpod 状态管理 + go_router 路由 + Dio HTTP Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
36 lines
1.0 KiB
Dart
36 lines
1.0 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import '../auth/auth_state.dart';
|
|
|
|
final apiClientProvider = Provider<ApiClient>((ref) {
|
|
final authState = ref.watch(authStateProvider);
|
|
return ApiClient(token: authState.user?.token);
|
|
});
|
|
|
|
class ApiClient {
|
|
late final Dio _dio;
|
|
|
|
ApiClient({String? token}) {
|
|
_dio = Dio(BaseOptions(
|
|
baseUrl: 'http://localhost:8080/api/v1',
|
|
connectTimeout: const Duration(seconds: 10),
|
|
receiveTimeout: const Duration(seconds: 30),
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
if (token != null) 'Authorization': 'Bearer $token',
|
|
},
|
|
));
|
|
}
|
|
|
|
Future<Response> get(String path, {Map<String, dynamic>? params}) =>
|
|
_dio.get(path, queryParameters: params);
|
|
|
|
Future<Response> post(String path, {dynamic data}) =>
|
|
_dio.post(path, data: data);
|
|
|
|
Future<Response> put(String path, {dynamic data}) =>
|
|
_dio.put(path, data: data);
|
|
|
|
Future<Response> delete(String path) => _dio.delete(path);
|
|
}
|