我的Utility类中有以下两个方法:一个用于判断网络连接,另一个用于显示进度对话框.

static Future<bool> isInternet() async
  {
    bool result = await InternetConnectionChecker().hasConnection;
    return result;
  }

  static ShowProgress(BuildContext context) {
    return showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return Center(
            child: SpinKitRotatingCircle(color: const Color(0xff2799fa), size: 60.0, ),
          );
        });
  }

我需要将其应用于以下API调用部分:

class _UserDetailsState extends State<UserDetails> {
  ProfileResponse? profileResponse;
  Future<void> fetchData() async {
    try {
      //Utility.ShowProgress(context);
      final response = await getProfileDetails();
      if (response.statusCode == 200) {
        Map<String, dynamic> parsedData = jsonDecode(response.body);
        setState(() {
          profileResponse = ProfileResponse.fromJson(parsedData);
        });
      } else {
        // setState(() {
        //   _data = 'Error: ${response.statusCode}';
        // });
      }
    } catch (error) {
      // setState(() {
      //   _data = 'Error: $error';
      // });
    }
    //Navigator.of(context).pop();
  }

  @override
  void initState() {
    fetchData();
  }
  
  @override
Widget build(BuildContext context) {
return Container(
     )
}
  
  Future<http.Response> getProfileDetails() async{
    if(await Utility.isInternet()){
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    //reading values from SharedPreferences and calling the API
    final String url = My API Path;
    final response = await http.get(Uri.parse(url));
    return response;
    }
    else{
      //show no network alert
    }
}

我在fetchData()中添加了ProgressDialog,就像代码中的注释代码一样,但在调用API时,它不会显示在UI中.

另外,我已经在getProfileDetails()上添加了网络判断,但它显示以下错误.

正文可能正常完成,从而导致返回""Null"",但返回类型""FutureOr""可能是不可为Null的类型.""try 在结尾处添加一个Return或Throw语句.

我如何解决这两个问题?

推荐答案

无论何时定义具有某种预期输出的方法,代码都应该返回与您定义的类型完全相同的类型,否则将返回错误.

在您的代码中,您声明了如下所示的Future:

 Future<http.Response> getProfileDetails() async{

你应该总是返回Future<http.Response>分. 但是,如果第一个If条件不是True,则不会返回任何内容,从而导致错误.

Flutter相关问答推荐

如何在Flutter的easy_translation包中链接嵌套的链接翻译?

底部导航栏项目在抖动中不更改 colored颜色

TextFormfield无法与自动路由一起正常工作

在Flutter TextField中计算子字符串位置

如何画三角形的圆角?

如何在 Flutter 中设计像 zomato 应用程序一样的搜索字段?

Flutter http 请求获取 null

无法应用插件com.chaquo.python

Flutter 中的区域不匹配

在使用 Android 12+ 的真实 Android 设备上,SingleChildScrollView 中最初位于视口之外的无响应 Web 视图

在Flutter中为容器实现线性渐变背景动画

如何更改 DropDownMenu 的显示方向?

我怎样才能一次只选中一个复选框?

如何防止卡子在底部溢出?

如何制作两个显示相关内容且可编辑的文本字段?

如何使用列Flutter 中文本占用的空间来控制svg宽度

Flutter:滚动一个ListWheelScrollView,无法获取选中项的状态

带有 Dismissible 和 Provider (NotifyListener) 的笨拙动画

在列表视图Flutter 中 Select 下一个单选按钮时单选按钮更改

用于空值 FirebaseFirestore 的空值判断运算符