Skip to content

网络请求封装不显示toast #191

@hstk1993

Description

@hstk1993

版本信息

  • flutter_smart_dialog版本:flutter_smart_dialog: ^4.9.4+5

描述bug/需求

网络请求封装loading和toast, 频繁出现loading关闭不了,toast显示不出来,如果在关闭loading之前显示toast就能显示出来

问题demo

Future<HttpResponseEntity?> request(
String url, {
String? method,
Map<String, dynamic>? params,
Object? data,
bool showLoading = true,
bool showToast = true,
CancelToken? cancelToken,
}) async {
try {
if (showLoading) YDToast.showLoading();
final response = await _dio.request(
url,
options: Options(method: method ?? 'GET'),
queryParameters: params,
data: data,
cancelToken: cancelToken,
);
if (showLoading) await YDToast.dismissLoading();

  final code = response.data?.code;
  if (code != 0 && !([401, 402].contains(code)) && showToast) {
    YDToast.showToast(response.data?.msg ?? 'msg:null');
  }

import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:zhaopin/base/base_build_value.dart';
import 'package:zhaopin/base/base_stateless_widget.dart';

class YDToast {
static Future<T?> showLoading() {
return SmartDialog.showLoading(
maskColor: Colors.transparent,
usePenetrate: false,
clickMaskDismiss: false,
animationTime: const Duration(milliseconds: 200),
);
}

static Future dismissLoading() async {
return await SmartDialog.dismiss(status: SmartStatus.loading);
}

static Future showToast(
String msg, {
bool clickMaskDismiss = false,
}) {
return SmartDialog.showToast(
msg,
usePenetrate: false,
maskColor: Colors.transparent,
clickMaskDismiss: clickMaskDismiss,
alignment: Alignment.center,
animationTime: const Duration(milliseconds: 200),
displayTime: msg.length > 10
? const Duration(milliseconds: 2000)
: const Duration(milliseconds: 1000),
);
}
}

class YDLoadingWidget extends BaseStatelessWidget {
const YDLoadingWidget({super.key});

@OverRide
Widget ydBuild(BuildContext context, BaseBuildValue value) {
return SpinKitRing(
color: value.theme.brand_color_6,
size: 40,
lineWidth: 5,
);
}
}

class YDToastWidget extends StatelessWidget {
final String msg;

const YDToastWidget(this.msg, {super.key});

@OverRide
Widget build(BuildContext context) {
return Align(
alignment: Alignment.center,
child: Container(
constraints:
BoxConstraints(maxWidth: MediaQuery.of(context).size.width - 100),
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),
decoration: BoxDecoration(
color: Colors.black87, borderRadius: BorderRadius.circular(5)),
child: Text(
msg,
style: const TextStyle(fontSize: 15, color: Colors.white),
),
),
);
}
}

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions