【发布时间】:2020-06-20 20:37:34
【问题描述】:
我使用Sentry 作为错误监控,捕获并存储我的 Flutter 应用程序中发生的所有错误。当我使用FutureBuilder 小部件时,我处理异步函数中的错误如下:
Widget build(context){
return FutureBuilder(
future: getData() // getting some data from an async function
builder: (context, snap){
if(snap.hasError){
return Text('An error has occurred');
}
/// ...
/// Doing something if there isn't an error
/// ...
}
);
}
这里的问题是getData()中发生的错误没有显示在控制台或Sentry中,因为没有抛出错误。我尝试了以下方法:
Widget build(context){
return FutureBuilder(
future: getData() // getting some data from an async function
builder: (context, snap){
if(snap.hasError){
thrown(snap.error); // this line was added
return Text('An error has occurred');
}
/// ...
/// Doing something if there isn't an error
/// ...
}
);
}
在这种情况下,错误被抛出并且 Sentry 捕获它,但 Text() 小部件没有返回并且应用程序中没有显示任何内容。
我的问题是,是否有办法让 Sentry 捕获错误并返回一个小部件以在应用程序中显示某些内容。
【问题讨论】:
-
TL;DR Exceptions 只能用于特殊情况。在第一个代码块中,您的
.hasError块正在处理错误,因此不会向控制台或 Sentry 报告错误。在第二个代码块中,您手动抛出一个错误(这是我假设您的函数thrown()正在执行的操作),因此控制权在该点返回。如果要显示Text,并向Sentry 报告,我会手动向Sentry 写入非致命错误消息,向控制台写入debugPrint,然后以正常方式继续处理。
标签: flutter