如何在Flutter中显示自定义错误消息而不是异常

时间:2019-12-19 13:36:09

标签: flutter

我已将Flutter应用程序连接到MYSQL。在我的php文件中,我编写了一个查询以从MYSQL检索数据。如果查询成功执行,则数据将返回并能够在我的列表中显示。但是,如果查询失败(如果所需的列在我的表中不可用),我只想显示“未找到数据”。但是正在收到“错误格式异常”。如何隐藏此错误格式异常。请帮我。

_getUsers() async {
       var data = await http
        .post("http://10.0.2.2/Flutter/count.php", body: {
        "dat": count,

    });
    var jsonData = json.decode(data.body);
    return jsonData;
  }

我的构建是

Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        backgroundColor: Colors.teal,
        ),
      body: Padding(
        padding: const EdgeInsets.all(0.0),
        child: Container(
          color: Colors.teal,

          child: new FutureBuilder(
              future: _getUsers(), 
              builder: (BuildContext context, AsyncSnapshot snapshot) {
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }
                if (snapshot.hasError) {
                  return Center(
                    child: new Text('Error ${snapshot.error}'),
                  );
                }

                else {
                    return Center(
                    child: Padding(
                      padding: const EdgeInsets.fromLTRB(56.0, 8.0, 56.0, 8.0),
                      child: ListView.builder(
                          itemCount: snapshot.data?.length ?? 0,
                          itemBuilder: (BuildContext context, int index) {
                           return ListTile(
                              leading: new Text(
                                '${snapshot.data[index]["branch"]}',
                                 style: TextStyle(
                                  color: Colors.white,
                                  fontSize: 25.0,
                                  ),
                              ),
                              trailing: new Text(
                                '${snapshot.data[index]["count(`branch`)".toString()]}',
                                 style: TextStyle(
                                  color: Colors.white,
                                  fontSize: 25.0,

                                ),
                              ),
                            );

                          }),
                    ),
                  );
                }
              }),
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

在使用以下解决方案之前,请确保您获得了map / json列表作为响应。即结构必须类似于:

[
 {
  'branch': 'abc',
  'count(`branch`)' : n //a number
 },
 {
  'branch': 'xyz',
  'count(`branch`)' : x //a number
 },
]

如果结构与上述结构不同,请同时发布json结构。

答案代码:

 String leadingText = 'No Data Found';
 String trailingText = '';
 try {
  leadingText = '${snapshot.data[index]["branch"]}';
  trailingText = '${snapshot.data[index]["count(`branch`)".toString()]}';
 } catch (e, s) {
  print('Exception while fetching data: $e stacktrace: $s );
 }

将字符串用作Text中的常规字符串数据:

leading: new Text(
 leadingText,
 style: TextStyle(
  color: Colors.white,
  fontSize: 25.0,
 ),
),
trailing: new Text(
 trailingText,
 style: TextStyle(
  color: Colors.white,
  fontSize: 25.0,
 ),
),

这将允许您处理format exception并返回自定义字符串作为响应。但是,如果遇到任何异常,您将得到相同的字符串,因此,我建议您以自己的方式处理它。