| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import 'package:common_pub/common_pub.dart';
- import 'package:flutter/foundation.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:grpc/grpc.dart';
- import 'styles/color_schemes.g.dart';
- import 'view/login/login_view.dart';
- export 'package:common_pub/utils.dart';
- Future<void> tryApi(
- Future<void> Function() call, {
- String? errTitle,
- Future<bool> Function(GrpcError err)? onError,
- Future<void> Function()? onSuccess,
- VoidCallback? onFinally,
- }) async {
- Future<bool> handleError(GrpcError err) async {
- if (onError != null) {
- return onError(err);
- }
- if (err.code == StatusCode.unauthenticated) {
- if (await LoginView.to()) {
- try {
- await call();
- } catch (e) {
- Get.snackbar('出错了', '未知错误');
- }
- }
- return true;
- }
- return false;
- }
- await tryCatchGrpc(
- call,
- onError: handleError,
- onSuccess: onSuccess,
- onFinally: onFinally,
- );
- }
- extension BuildContextExt on BuildContext {
- void _showSnakeBar(String msg) {
- ScaffoldMessenger.of(this).showSnackBar(SnackBar(content: Text(msg)));
- }
- Future<void> doCall(
- Future<void> Function() call, {
- Future<bool> Function(Error err)? onError,
- Future<bool> Function(GrpcError err)? onGrpcError,
- VoidCallback? onFinally,
- }) async {
- try {
- await call();
- } on GrpcError catch (e) {
- if (onGrpcError != null) {
- if (await onGrpcError(e)) {
- return;
- }
- }
- switch (e.code) {
- case StatusCode.unavailable:
- _showSnakeBar('网络错误,请稍后再试');
- break;
- case StatusCode.unauthenticated:
- if (await LoginView.to()) {
- try {
- await call();
- } catch (e) {
- _showSnakeBar('出错了,未知错误');
- }
- }
- break;
- case StatusCode.unknown:
- _showSnakeBar('出错了,未知错误');
- break;
- default:
- _showSnakeBar('出错了,${e.message ?? ''}');
- }
- } on ArgumentError catch (e) {
- _showSnakeBar('出错了,${kDebugMode ? e.message : '未知错误'}');
- } catch (e) {
- _showSnakeBar('出错了,${kDebugMode ? e.toString() : '未知错误'}');
- } finally {
- onFinally?.call();
- }
- }
- }
- class Preview extends StatelessWidget {
- const Preview({super.key, required this.child});
- final Widget child;
- @override
- Widget build(BuildContext context) {
- return child;
- }
- }
- // typedef NetImage = pb.NetImage;
- // extension NetImageExt on NetImage {
- // String? get md5Hex {
- // if (md5.isEmpty) {
- // return null;
- // } else {
- // return md5.toHexString();
- // }
- // }
- //
- // Future<Reader> readerBuilder() async {
- // final url = Uri.parse(this.url);
- // var request = http.Request('GET', url);
- // var response = await request.send();
- // if (response.statusCode != 200) {
- // throw HttpException('state: ${response.statusCode}', uri: url);
- // }
- // final length = response.contentLength ?? 0;
- // return Reader(response.stream, length);
- // }
- //
- // Future<void> preload() async {
- // await CacheManager()
- // .getCached(id: md5Hex ?? '', readerBuilder: readerBuilder);
- // }
- // }
- void runPreview(Widget child) {
- runApp(GetMaterialApp(
- theme: ThemeData(useMaterial3: true, colorScheme: lightColorScheme),
- home: Preview(child: child)));
- }
|