Flutter 不使用AsyncBuilder生成错误

Flutter 不使用AsyncBuilder生成错误,flutter,Flutter,我在跟踪包裹。我正在尝试生成错误方法。由于某些原因,它不起作用,并且在生成器运行时出错 AsyncBuilder( future:fetchData(), 错误:(上下文、错误、堆栈跟踪){ 打印(“错误”); 返回文本(“某些错误”); }, 构建器:(\uux,快照){ 打印(“在生成器中”); print(snapshot);//打印fetchData函数在catch语句中返回的错误 返回容器(); }); Future fetchData()异步{ 试一试{ final respons

我在跟踪包裹。我正在尝试生成错误方法。由于某些原因,它不起作用,并且在生成器运行时出错

AsyncBuilder(
future:fetchData(),
错误:(上下文、错误、堆栈跟踪){
打印(“错误”);
返回文本(“某些错误”);
},
构建器:(\uux,快照){
打印(“在生成器中”);
print(snapshot);//打印fetchData函数在catch语句中返回的错误
返回容器();
});
Future fetchData()异步{
试一试{
final responseJson=wait _provider.get('data');//抛出错误
...
返回Response.success(parsedData);
}捕获(e){
//这叫做
返回Response.error(例如toString());
}
}

我试图在catch语句中抛出一个错误,而不是返回一个错误,但随后应用程序崩溃了

您可以复制下面的粘贴运行完整代码
您可以使用
抛出异常('fetchData${e.toString()}失败)
代码片段

try {
  var response = await http
      .post("not exist", body: {'name': 'doodle', 'color': 'blue'});
  return http.Response("OK", 200);
} catch (e) {
  throw Exception('Failed from fetchData ${e.toString()}');
}

...
AsyncBuilder(
      future: fetchData(),
      error: (context, error, stackTrace) {
        print('in error');
        return Text('some error $error');
      },
成功与错误的工作演示

完整代码

import 'package:async_builder/async_builder.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Future<http.Response> fetchData() async {
    try {
      var response = await http
          .post("not exist", body: {'name': 'doodle', 'color': 'blue'});
      return http.Response("OK", 200);
    } catch (e) {
      throw Exception('Failed from fetchData ${e.toString()}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: AsyncBuilder(
          future: fetchData(),
          error: (context, error, stackTrace) {
            print('in error');
            return Text('some error $error');
          },
          builder: (_, snapshot) {
            print('in builder');
            print(snapshot);
            return Text("success ${(snapshot as http.Response)?.body}");
          }),
    );
  }
}
import'package:async_builder/async_builder.dart';
进口“包装:颤振/材料.省道”;
将“package:http/http.dart”导入为http;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
Future fetchData()异步{
试一试{
var response=wait http
.post(“不存在”,正文:{'name':'doodle','color':'blue'});
返回http.Response(“OK”,200);
}捕获(e){
抛出异常('fetchData${e.toString()}失败);
}
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:AsyncBuilder(
future:fetchData(),
错误:(上下文、错误、堆栈跟踪){
打印(“错误”);
返回文本('some error$error');
},
构建器:(\uux,快照){
打印(“在生成器中”);
打印(快照);
返回文本(“success${(快照为http.Response)?.body}”);
}),
);
}
}

我收到一个
\u异常(异常:找不到:找不到)
应用程序冻结,直到我在调试器中继续