utils.dart 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:common_pub/common_pub.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:grpc/grpc.dart';
  5. import 'styles/color_schemes.g.dart';
  6. import 'view/login/login_view.dart';
  7. Future<void> tryApi(
  8. Future<void> Function() call, {
  9. String? errTitle,
  10. Future<bool> Function(GrpcError err)? onError,
  11. Future<void> Function()? onSuccess,
  12. VoidCallback? onFinally,
  13. }) async {
  14. Future<bool> handleError(GrpcError err) async {
  15. if (onError != null) {
  16. return onError(err);
  17. }
  18. if (err.code == StatusCode.unauthenticated) {
  19. if (await LoginView.to()) {
  20. try {
  21. await call();
  22. } catch (e) {
  23. Get.snackbar('出错了', '未知错误');
  24. }
  25. }
  26. return true;
  27. }
  28. return false;
  29. }
  30. await tryCatchGrpc(
  31. call,
  32. onError: handleError,
  33. onSuccess: onSuccess,
  34. onFinally: onFinally,
  35. );
  36. }
  37. class Preview extends StatelessWidget {
  38. const Preview({super.key, required this.child});
  39. final Widget child;
  40. @override
  41. Widget build(BuildContext context) {
  42. return child;
  43. }
  44. }
  45. // typedef NetImage = pb.NetImage;
  46. // extension NetImageExt on NetImage {
  47. // String? get md5Hex {
  48. // if (md5.isEmpty) {
  49. // return null;
  50. // } else {
  51. // return md5.toHexString();
  52. // }
  53. // }
  54. //
  55. // Future<Reader> readerBuilder() async {
  56. // final url = Uri.parse(this.url);
  57. // var request = http.Request('GET', url);
  58. // var response = await request.send();
  59. // if (response.statusCode != 200) {
  60. // throw HttpException('state: ${response.statusCode}', uri: url);
  61. // }
  62. // final length = response.contentLength ?? 0;
  63. // return Reader(response.stream, length);
  64. // }
  65. //
  66. // Future<void> preload() async {
  67. // await CacheManager()
  68. // .getCached(id: md5Hex ?? '', readerBuilder: readerBuilder);
  69. // }
  70. // }
  71. void runPreview(Widget child) {
  72. runApp(GetMaterialApp(
  73. theme: ThemeData(useMaterial3: true, colorScheme: lightColorScheme),
  74. home: Preview(child: child)));
  75. }