代码之家  ›  专栏  ›  技术社区  ›  Filemon Sitanggang

迪奥没有抓住错误长笛,迪奥5.4.3+1

  •  0
  • Filemon Sitanggang  · 技术社区  · 1 年前

    我想使用dioget获取一些数据以列出。在包裹getX控制器的Flutter中。

    这是出现问题的代码。我尝试了很多方法,比如 使用 DioExceptionType 以捕捉特定问题,并使用 DioException.statuscode 。但是,仍然无法捕捉到错误。

    class JemaatController extends GetxController {
      RxList<JemaatJSON> jemaat = RxList();
      RxBool isListViewScrollToTheDown = false.obs;
      RxBool isLoading = true.obs;
      RxBool isInternetConnect = true.obs;
      final deviceStorage = GetStorage();
      var url = "${ConfigBack.apiAdress}/admin/jemaat/";
      var itemController = ItemScrollController();
    
      getJemaat() async {
        var response = await DioService().getMethod(url);
        isLoading.value = true;
    
        try {
          if (response.statusCode == 200) {
            response.data.forEach((element) {
              jemaat.add(JemaatJSON.fromJson(element));
            });
          }
          Future.delayed(const Duration(seconds: 1), () {
            isLoading.value = false;
          });
        } catch (e) {
          isLoading.value = false;
          if (e is DioException) {
            if (e.response?.statusCode == 401) {
              FilemonHelperFunctions.showSnackBar(
                  "Waktu sesi telah berakhir silahkan Re-Log");
              deviceStorage.write('user_login', false);
              deviceStorage.write('IsFirstTime', false);
              print(deviceStorage.read('user_login'));
              print(deviceStorage.read('IsFirstTime'));
              deviceStorage.remove('usertoken');
              deviceStorage.remove('userC');
              NavigationAdmin().toMain();
              if (e.type == DioExceptionType.connectionError) {
                FilemonHelperFunctions.showSnackBar(
                    "Koneksi bermasalah, ini bukan pada perangkat anda");
              }
            }
          }
        }
      }
    
      remJemaat() async {
        jemaat.clear();
      }
    
      scrollListViewDownward() {
        itemController.scrollTo(
            index: jemaat.length - 4,
            duration: const Duration(seconds: 2),
            curve: Curves.fastOutSlowIn);
        isListViewScrollToTheDown.value = true;
      }
    
      /// Scroll ListView To Up
      scrollListViewUpward() {
        itemController.scrollTo(
            index: 0,
            duration: const Duration(seconds: 2),
            curve: Curves.fastOutSlowIn);
        isListViewScrollToTheDown.value = false;
      }
    
      @override
      void onInit() {
        getJemaat();
        super.onInit();
      }
    }
    

    对于我得到的错误,以下是调试控制台中显示的内容:

    E/flutter (12149): #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:509:7)
    E/flutter (12149): <asynchronous suspension>
    E/flutter (12149): #1      DioService.getMethod.<anonymous closure> (package:MobileGKI/data/api_config.dart:102:54)
    E/flutter (12149): <asynchronous suspension>
    E/flutter (12149): #2      DioService.getMethod (package:MobileGKI/data/api_config.dart:102:12)
    E/flutter (12149): <asynchronous suspension>
    E/flutter (12149): #3      JemaatController.getJemaat (package:MobileGKI/data/crud_state/jemaat/jemaatlisting.dart:26:20)
    E/flutter (12149): <asynchronous suspension>
    E/flutter (12149): 
    

    此处使用dioget方法:

    class DioService {
      Future<dynamic> getMethod(String url) async {
        dioUpers.Dio dio = dioUpers.Dio();
        dioUpers.Options options =
            dioUpers.Options(headers: HeadersCode().data(), method: "GET");
        return await dio.get(url, options: options).then((response) {
          return response;
        });
      }`
    

    不要担心DioService上的一个“}”,这不是整个脚本。 对于标头

    class HeadersCode {
      final deviceStorage = GetStorage();
      data() {
        Map<String, dynamic> headers = {
          'Authorization': 'Bearer ${deviceStorage.read("usertoken")}',
          'Content-Type': 'application/json',
          // Add more headers if needed
        };
        return headers;
      }
    }
    

    我怎样才能发现错误?

    1 回复  |  直到 1 年前
        1
  •  0
  •   A-E    1 年前

    你还需要把电话放在 try

    try {
      var response = await DioService().getMethod(url);
      isLoading.value = true;
      if (response.statusCode == 200) {
        response.data.forEach((element) {
          jemaat.add(JemaatJSON.fromJson(element));
        });
      }
    

    如果出现问题 catch 块将被执行。