json - 我收到颤振类型错误“响应”不是“FutureOr”的子类型'
问题描述
我想在颤动中解析一个 json 对象,但我无法让它显示在屏幕上。我收到一条错误消息,提示“响应”类型不是“FutureOr”的子类型。这是源代码
Future<String> loadList() async {
return await Network().getData('data');
}
class _IndexState extends State<Index> {
bool _loading = true;
Future loadList() async {
String jsonString = await loadList();
final response = json.decode(jsonString);
Prospects prospects = new Prospects.fromJson(response);
print(
'${prospects.success} - ${prospects.data[0].id} - ${prospects.data[0].firstname} - ${prospects.data[0].lastname} - ${prospects.data[0].amountSpeculated}');
return prospects;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(_loading ? 'Loading ' : 'JSON ListView in Flutter'),
),
body: Center(
child: FutureBuilder<String>(
future: loadList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return CircularProgressIndicator();
},
),
));
}
}
解决方案
- 你的未来
loadList()
不是_loadList()
:
body: Center(
child: FutureBuilder<String>(
future: loadList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return CircularProgressIndicator();
},
),
)
- 您的 Future 被定义为
Future
(Future<dynamic>
) 而不是Future<String>
:
Future<String> loadList() async {
String jsonString = await _loadList();
final response = json.decode(jsonString);
Prospects prospects = new Prospects.fromJson(response);
return '${prospects.success} - ${prospects.data[0].id} - ${prospects.data[0].firstname} - ${prospects.data[0].lastname} - ${prospects.data[0].amountSpeculated}';
}
完整的源代码
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
void main() {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
home: HomePage(),
),
);
}
class HomePage extends HookWidget {
Future<String> loadList() async {
await Future.delayed(Duration(seconds: 2));
return ('My String');
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FutureBuilder<String>(
future: loadList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default, show a loading spinner.
return CircularProgressIndicator();
},
),
),
);
}
}
推荐阅读
- perl - Mac M1 Homebrew Perl Carton Net::SSLeay 正在以不安全的方式加载 libcrypto
- mysql - SQL:从 2 列数据源创建聚合表
- jsf - Primefaces 10 dataTable p:dataExporter 在迁移后渲染时生成 ArrayIndexOutOfBoundsException
- typescript - 如何具有基于参数的泛型和常量函数返回类型
- c# - Asp.net mvc core在Controller处购买了模板按钮自定义onClick事件
- networking - 来自 docker 容器时的请求源 IP 地址是什么
- java - 如何修复 Wildfly 9 中的 Apache Ghostcat 漏洞
- swift - Swift运行shell命令卡住,但在xcode调试中成功
- javascript - 无法将 csv 文件字符集更改为 windows-1251
- angular - 如何使用 Angular Pipe 减少数组中对象的元素