parent
0f6eb6d9ee
commit
703051ddca
@ -0,0 +1,30 @@
|
|||||||
|
import 'package:aku_community_manager/ui/home/home_page.dart';
|
||||||
|
import 'package:aku_community_manager/ui/widgets/common/aku_scaffold.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:power_logger/power_logger.dart';
|
||||||
|
|
||||||
|
class SplashPage extends StatefulWidget {
|
||||||
|
SplashPage({Key key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_SplashPageState createState() => _SplashPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SplashPageState extends State<SplashPage> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
Future.delayed(Duration(milliseconds: 300), () {
|
||||||
|
if (mounted) PowerLogger.init(context);
|
||||||
|
});
|
||||||
|
Future.delayed(Duration(milliseconds: 3000), () {
|
||||||
|
Get.to(HomePage());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
class BaseFileModel {
|
||||||
|
String message;
|
||||||
|
String url;
|
||||||
|
bool status;
|
||||||
|
BaseFileModel({
|
||||||
|
this.message,
|
||||||
|
this.url,
|
||||||
|
this.status,
|
||||||
|
});
|
||||||
|
|
||||||
|
BaseFileModel.err(
|
||||||
|
{this.message = '未知错误', this.url = '', this.status = false});
|
||||||
|
|
||||||
|
BaseFileModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
message = json['message'] ?? '';
|
||||||
|
url = json['url'] ?? null;
|
||||||
|
status = json['status'] ?? false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
class BaseListModel {
|
||||||
|
int pageCount;
|
||||||
|
int rowCount;
|
||||||
|
List<dynamic> tableList;
|
||||||
|
BaseListModel({
|
||||||
|
this.pageCount,
|
||||||
|
this.rowCount,
|
||||||
|
this.tableList,
|
||||||
|
});
|
||||||
|
BaseListModel.zero({
|
||||||
|
this.pageCount = 0,
|
||||||
|
this.rowCount = 0,
|
||||||
|
this.tableList = const [],
|
||||||
|
});
|
||||||
|
|
||||||
|
BaseListModel.err({
|
||||||
|
this.pageCount = 0,
|
||||||
|
this.rowCount = 0,
|
||||||
|
this.tableList = const [],
|
||||||
|
});
|
||||||
|
|
||||||
|
BaseListModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
pageCount = json['pageCount'] ?? 0;
|
||||||
|
rowCount = json['rowCount'] ?? 0;
|
||||||
|
tableList = json['tableList'] ?? [];
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
class BaseModel {
|
||||||
|
int code;
|
||||||
|
String message;
|
||||||
|
bool status;
|
||||||
|
dynamic data;
|
||||||
|
BaseModel({
|
||||||
|
this.code,
|
||||||
|
this.message,
|
||||||
|
this.data,
|
||||||
|
this.status,
|
||||||
|
});
|
||||||
|
|
||||||
|
BaseModel.err({this.message = '未知错误', this.status = false});
|
||||||
|
|
||||||
|
BaseModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
message = json['message'] ?? '';
|
||||||
|
data = json['data'] ?? null;
|
||||||
|
status = json['status'] ?? false;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
class LoginModel {
|
||||||
|
String message;
|
||||||
|
String token;
|
||||||
|
bool status;
|
||||||
|
|
||||||
|
LoginModel({this.message, this.token, this.status});
|
||||||
|
|
||||||
|
LoginModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
message = json['message'];
|
||||||
|
token = json['token'];
|
||||||
|
status = json['status'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['message'] = this.message;
|
||||||
|
data['token'] = this.token;
|
||||||
|
data['status'] = this.status;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,168 @@
|
|||||||
|
// Dart imports:
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
// Package imports:
|
||||||
|
import 'package:aku_community_manager/const/api.dart';
|
||||||
|
import 'package:aku_community_manager/utils/network/base_file_model.dart';
|
||||||
|
import 'package:aku_community_manager/utils/network/base_list_model.dart';
|
||||||
|
import 'package:aku_community_manager/utils/network/base_model.dart';
|
||||||
|
import 'package:bot_toast/bot_toast.dart';
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:get/get.dart' hide Response, FormData, MultipartFile;
|
||||||
|
import 'package:power_logger/power_logger.dart';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class NetUtil {
|
||||||
|
Dio _dio;
|
||||||
|
static final NetUtil _netUtil = NetUtil._internal();
|
||||||
|
|
||||||
|
factory NetUtil() => _netUtil;
|
||||||
|
|
||||||
|
Dio get dio => _dio;
|
||||||
|
|
||||||
|
NetUtil._internal() {
|
||||||
|
BaseOptions options = BaseOptions(
|
||||||
|
baseUrl: API.baseURL,
|
||||||
|
connectTimeout: API.networkTimeOut,
|
||||||
|
receiveTimeout: API.networkTimeOut,
|
||||||
|
sendTimeout: API.networkTimeOut,
|
||||||
|
headers: {},
|
||||||
|
);
|
||||||
|
if (_dio == null) _dio = Dio(options);
|
||||||
|
dio.interceptors.add(InterceptorsWrapper(
|
||||||
|
onRequest: (RequestOptions options) async => options,
|
||||||
|
onResponse: (Response response) async {
|
||||||
|
LoggerData.addData(response);
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
onError: (DioError error) async {
|
||||||
|
_parseErr(error);
|
||||||
|
return error;
|
||||||
|
},
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
///call auth after login
|
||||||
|
auth(String token) {
|
||||||
|
_dio.options.headers.putIfAbsent('App-Admin-Token', () => token);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ## alias of Dio().get
|
||||||
|
///
|
||||||
|
/// GET method
|
||||||
|
Future<BaseModel> get(
|
||||||
|
String path, {
|
||||||
|
Map<String, dynamic> params,
|
||||||
|
bool showMessage = false,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
Response res = await _dio.get(path, queryParameters: params);
|
||||||
|
BaseModel baseModel = BaseModel.fromJson(res.data);
|
||||||
|
_parseRequestError(baseModel, showMessage: showMessage);
|
||||||
|
return baseModel;
|
||||||
|
} on DioError catch (e) {
|
||||||
|
_parseErr(e);
|
||||||
|
}
|
||||||
|
return BaseModel.err();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ## alias of Dio().post
|
||||||
|
///
|
||||||
|
/// POST method
|
||||||
|
///
|
||||||
|
/// only work with JSON.
|
||||||
|
Future<BaseModel> post(
|
||||||
|
String path, {
|
||||||
|
Map<String, dynamic> params,
|
||||||
|
bool showMessage = false,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
Response res = await _dio.post(path, data: params);
|
||||||
|
|
||||||
|
BaseModel baseModel = BaseModel.fromJson(res.data);
|
||||||
|
_parseRequestError(baseModel, showMessage: showMessage);
|
||||||
|
|
||||||
|
return baseModel;
|
||||||
|
} on DioError catch (e) {
|
||||||
|
_parseErr(e);
|
||||||
|
}
|
||||||
|
return BaseModel.err();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<BaseListModel> getList(
|
||||||
|
String path, {
|
||||||
|
Map<String, dynamic> params,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
Response res = await _dio.get(path, queryParameters: params);
|
||||||
|
BaseListModel baseListModel = BaseListModel.fromJson(res.data);
|
||||||
|
return baseListModel;
|
||||||
|
} on DioError catch (e) {
|
||||||
|
_parseErr(e);
|
||||||
|
}
|
||||||
|
return BaseListModel.err();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<BaseFileModel> upload(String path, File file) async {
|
||||||
|
try {
|
||||||
|
Response res = await _dio.post(path,
|
||||||
|
data: FormData.fromMap({
|
||||||
|
'file': await MultipartFile.fromFile(file.path),
|
||||||
|
}));
|
||||||
|
BaseFileModel baseListModel = BaseFileModel.fromJson(res.data);
|
||||||
|
return baseListModel;
|
||||||
|
} on DioError catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
return BaseFileModel.err();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<String>> uploadFiles(List<File> files, String api) async {
|
||||||
|
List<String> urls = [];
|
||||||
|
if (files.isEmpty) {
|
||||||
|
return [];
|
||||||
|
} else {
|
||||||
|
for (var item in files) {
|
||||||
|
BaseFileModel model = await NetUtil().upload(api, item);
|
||||||
|
urls.add(model.url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return urls;
|
||||||
|
}
|
||||||
|
|
||||||
|
_parseErr(DioError err) {
|
||||||
|
LoggerData.addData(err);
|
||||||
|
_makeToast(String message) {
|
||||||
|
BotToast.showText(text: '$message\_${err?.response?.statusCode ?? ''}');
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (err.type) {
|
||||||
|
case DioErrorType.CONNECT_TIMEOUT:
|
||||||
|
case DioErrorType.SEND_TIMEOUT:
|
||||||
|
case DioErrorType.RECEIVE_TIMEOUT:
|
||||||
|
_makeToast('连接超时');
|
||||||
|
break;
|
||||||
|
case DioErrorType.RESPONSE:
|
||||||
|
_makeToast('服务器出错');
|
||||||
|
break;
|
||||||
|
case DioErrorType.CANCEL:
|
||||||
|
break;
|
||||||
|
case DioErrorType.DEFAULT:
|
||||||
|
_makeToast('未知错误');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_parseRequestError(BaseModel model, {bool showMessage = false}) {
|
||||||
|
// final userProvider = Provider.of<UserProvider>(Get.context, listen: false);
|
||||||
|
// if (!model.status && model.message == '登录失效,请登录' && userProvider.isLogin) {
|
||||||
|
// userProvider.logout();
|
||||||
|
// Get.offAll(SignInPage());
|
||||||
|
// }
|
||||||
|
if (!model.status || showMessage) {
|
||||||
|
BotToast.showText(text: model.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue