visual-studio - 没有从 ListView.Builder 打印到模拟器中,而 initState 显示我的列表有 2 个元素
问题描述
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
void main() {
runApp(MyHomePage());
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> ListSearch = [];
Future getData() async {
var data = await http.get('http://10.0.2.2/DBCON/search.php');
var databody = jsonDecode(data.body);
for (int i = 0; i < databody.length; i++) {
ListSearch.add(databody[i]['NAME']);
}
print(ListSearch);
}
@override
void initState() {
getData();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: Text('ss'),
),
body: ListView.builder(
itemCount: ListSearch.length,
itemBuilder: (context, index) {
return Column(
children: [
Text(ListSearch[index]),
Text(ListSearch.length.toString()),
],
);
},
),
),
);
}
}
我正在尝试从本地主机中获取一些数据并在模拟器中的应用程序中显示它们,但是模拟器什么也没显示,并且 initState 在 ListSearch 列表中给出了 2 个元素的输出,有人能告诉我为什么什么都没有打印以及如何解决吗?
解决方案
您可以在下面复制粘贴运行完整代码
演示代码有3秒延迟来模拟网络延迟
您可以bool isLoading
用来控制何时isLoading
显示CircularProgressIndicator()
,何时加载完成显示ListView
代码片段
bool isLoading = true;
Future getData() async {
...
print(ListSearch);
setState(() {
isLoading = false;
});
...
body: isLoading
? Center(child: CircularProgressIndicator())
: ListView.builder(
工作演示
完整代码
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
void main() {
runApp(MyHomePage());
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> ListSearch = [];
bool isLoading = true;
Future getData() async {
//var data = await http.get('http://10.0.2.2/DBCON/search.php');
await Future.delayed(Duration(seconds: 3), () {});
String jsonString = '''
[
{"NAME": "Samsung A30"},
{"NAME": "Samsung Note20"}
]
''';
http.Response data = http.Response(jsonString, 200);
var databody = jsonDecode(data.body);
for (int i = 0; i < databody.length; i++) {
ListSearch.add(databody[i]['NAME']);
}
print(ListSearch);
setState(() {
isLoading = false;
});
}
@override
void initState() {
getData();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: Text('ss'),
),
body: isLoading
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: ListSearch.length,
itemBuilder: (context, index) {
return Column(
children: [
Text(ListSearch[index]),
Text(ListSearch.length.toString()),
],
);
},
),
),
);
}
}
推荐阅读
- angular - Ng 风格的条件运算符不工作 Angular 6
- c++ - std::memory_order_acquire 和 memory_order_release 可以分开使用吗?
- react-native - 如何在用户输入时建议地点?
- vba - 正则表达式 引号中的文本
- kubernetes - 如何使用由等号 (=) 分隔的键/值的 ConfigMap 中的值?
- html - 如何将 [key: string] 值更改为下拉列表中的数字?
- linux - 在文件夹中运行“N”个 Shell 脚本
- python - 使用 matplotlib 的 2D 映射图问题
- c++ - 什么 Cpp 编译器允许内联汇编代码?
- django - 如何根据用户状态过滤列表视图查询集