【发布时间】:2019-01-20 14:21:30
【问题描述】:
我是一名编程初学者,并尝试在 Flutter 中编写应用程序。我将数据从 algolia 加载到 StreamBuilder(通过将 algolia 库与 as.Stream() 结合使用 - 否则它不起作用)。该代码运行良好,但它不会自动刷新数据 - 我必须在应用程序中加载新屏幕或热重新加载,然后数据更新。看起来 StatefulWidget 的行为类似于 StatelessWidget。你有什么想法 - 可能在某处包含 setState (我认为 StreamBuilder 不需要)?感谢您的帮助;-)。
import 'package:first_app/group_detail.dart';
import 'package:flutter/material.dart';
import 'package:algolia/algolia.dart';
class First extends StatefulWidget {
@override
FirstState createState() {
return new FirstState();
}
}
class FirstState extends State<First> {
static Algolia algolia = Algolia.init(
applicationId: 'xxx',
apiKey: 'xxx',
);
queryFunc() {
AlgoliaQuery query = algolia.instance.index('places).setAroundLatLng('51.5078845,7.4702625');
Future<AlgoliaQuerySnapshot> snap = query.getObjects();
return snap;
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return StreamBuilder(
stream: queryFunc().asStream(),
builder:
(BuildContext context, AsyncSnapshot<AlgoliaQuerySnapshot> snapshot) {
if (!snapshot.hasData) return new Text('Loading...');
final int documentsLength = snapshot.data.hits.length;
return new ListView.builder(
itemCount: documentsLength,
itemBuilder: (context, int index) {
final AlgoliaObjectSnapshot document = snapshot.data.hits[index];
return new ListTile(
leading: CircleAvatar(
child: Text(document.data['name'].substring(0, 1))),
title: new Text(document.data['name']),
subtitle: new Text(document.data['text]),
);
});
},
);
}
}
【问题讨论】:
-
看这个文档api.dartlang.org/stable/2.1.0/dart-async/Future/asStream.html它说asStream会产生包含这个future完成结果的单个数据或错误事件,然后它会以一个done事件关闭。据我所知,您的流只会产生一次数据。
-
@pblead26 你有办法解决这个问题吗?
标签: flutter algolia stream-builder