简单来说就是成功只有一种,失败确有无数种。因为前后端都是我写的,所以约定好了返回内容和格式,实际用起来也还不错,所以分享一下
/*
- 封装了一个场景
if 请求
loading
code 200
成功
code != 200
失败
else
失败
注意:本方法不可以在页面初始化阶段使用
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../models/json_models.dart';
Future<void> performNetworkRequest({
required BuildContext context,
required Future<ApiDataModels<dynamic>> Function() requestFunction,
required Function(ApiDataModels<dynamic> response)onSuccess,
required Function(String message) onFailure,
}) async {
_showLoading(context); // 显示加载
try {
final response = await requestFunction();
_hideLoading(context); // 隐藏加载
if (response.code == 200) {
onSuccess(response);
} else {
_showErrorDialog(context, response.msg ?? 'Unknown error');
onFailure(response.msg ?? 'Unknown error');
print(response.msg ?? 'Unknown error');
}
} catch (e) {
_hideLoading(context); // 隐藏加载
_showErrorDialog(context, e.toString()); // 显示错误弹窗
onFailure(e.toString()); //
print('异常错误$e.toString()');
}
}
void _showLoading(BuildContext context) {
showDialog(
context: context,
barrierDismissible: false,
builder: (_) => Center(child: CircularProgressIndicator()),
);
}
void _hideLoading(BuildContext context) {
Navigator.of(context, rootNavigator: true).pop();
}
void _showErrorDialog(BuildContext context, String message) {
// if (Navigator.canPop(context)) {
//
// }
showDialog(
context: context,
builder: (_) => AlertDialog(
title: Text('错误'),
content: Text(
message,
style: TextStyle(fontSize: 20), // 设置文字大小
),
// content: Text(message),
actions: <Widget>[
TextButton(
child: Text('确定'),
onPressed: () {
Navigator.of(context,rootNavigator: true).pop();
},
),
],
),
);
}
/*测试案例,不懂用法的自己看一下*/
// import 'package:flutter/material.dart';
// import 'package:untitled1/widgets/performNetworkRequest.dart';
// import 'common/Constant/global_config.dart';
// import 'common/Network/network.dart';
// void main() => runApp(MyApp());
//
// class MyApp extends StatelessWidget {
// @override
// Widget build(BuildContext context) {
// return MaterialApp(
// title: 'Network Request Test',
// theme: ThemeData(
// primarySwatch: Colors.blue,
// ),
// home: TestPage(),
// );
// }
// }
//
// class TestPage extends StatefulWidget {
// @override
// _TestPageState createState() => _TestPageState();
// }
//
// class _TestPageState extends State<TestPage> {
// String responseText = "";
//
// void _fetchData() {
// performNetworkRequest(
// context: context,
// requestFunction: () async {
// // 假设这是您的网络服务实例
// var networkService = BaseNetworkService();
// Map<String, dynamic> parameters = {
// 'pageKey': 'index', // 添加您的请求参数
// };
// // 发送网络请求,获取数据
// return await networkService.request(GlobalConfig().createPage, 'get', parameters, (json) => json);
// },
// onSuccess: (data) {
// setState(() {
// responseText = data.toString();
// });
// },
// onFailure: (message) {
// setState(() {
// responseText = message;
// });
// },
// );
// }
//
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(title: Text("Network Request Test")),
// body: Center(
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: <Widget>[
// ElevatedButton(
// onPressed: _fetchData,
// child: Text("Fetch Data"),
// ),
// SizedBox(height: 20),
// Text(responseText),
// ],
// ),
// ),
// );
// }
// }