我正在尝试从 API 获取数据,并且正在使用 Stream 构建器,但无法从 API 获取数据。以下是我的代码:
我初始化流控制器
final StreamController<APIModel> _streamController = StreamController();
从API获取数据的方法
Future<APIModel> getdatafromAPI() async {
var url =
"myapi";
var response = await http.get(Uri.parse(url));
var data = jsonDecode(response.body.toString());
if (response.statusCode == 200) {
//sink data for stream builder
_streamController.sink.add(APIModel.fromJson(data));
return MayyatNewsModel.fromJson(data);
} else {
return MayyatNewsModel.fromJson(data);
}
}
在响应== 200中,我使用流控制器将所有响应数据接收到控制器中。
以下是ui部分显示数据但无法加载此数据。问题是什么??或者使用 Streambuilder 的正确方法是什么??
...
StreamBuilder<APIModel>(
stream: _streamController.stream,
builder: (context,AsyncSnapshot<MayyatNewsModel> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
...
如果您想在每个特定持续时间调用
getdatafromAPI
,您需要首先定义新的流变量,如下所示:
late Stream<APIModel> stream = Stream.periodic(Duration(seconds: 5))
.asyncMap((event) async => await getdatafromAPI());
然后像这样使用它:
StreamBuilder<APIModel>(
stream: stream,
builder: ...
),
除了周期流还有其他方式吗?