以下是一个不使用FutureBuilder获取数据的解决方法的代码示例:
import 'package:flutter/material.dart';
class MyDataScreen extends StatefulWidget {
@override
_MyDataScreenState createState() => _MyDataScreenState();
}
class _MyDataScreenState extends State {
List data = [];
@override
void initState() {
super.initState();
fetchData();
}
void fetchData() {
// 模拟异步获取数据
Future.delayed(Duration(seconds: 2), () {
setState(() {
data = ['Data 1', 'Data 2', 'Data 3'];
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My Data'),
),
body: data.isEmpty
? Center(
child: CircularProgressIndicator(),
)
: ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(data[index]),
);
},
),
);
}
}
在这个例子中,我们使用一个带有状态的小部件MyDataScreen
来管理数据和界面。在initState
方法中,我们调用fetchData
方法来模拟异步获取数据。在fetchData
方法中,我们使用Future.delayed
来模拟一个异步操作,并在操作完成后调用setState
来更新界面。在build
方法中,我们根据数据是否为空来显示不同的视图。如果数据为空,我们显示一个进度指示器,表示正在加载数据。如果数据不为空,我们使用ListView.builder
来构建一个可滚动的列表视图,并使用数据来生成列表项。