我试图StreamBuilder在我的初始流的构建器中创建一个新的,虽然我没有收到任何错误,但它似乎也不起作用。这是可能的吗?
基本上,我正在访问 Firebase 中的根集合。这个集合包含两个文档,我需要每个文档的数据,因为我正在构建一个包含来自两个路径的信息的 DataTable。
编辑:嵌套的 StreamBuilder 不起作用,因为 StreamBuilder 必须返回一个小部件,所以至少我知道它为什么不起作用。但我仍然没有决定要做什么。
假设我有一个 API - 例如:https : //jsonplaceholder.typicode.com/posts
现在,我想使用具有 ListTiles 的 ListView 将 StreamBuilder 应用到它。如何配置?如何为其创建流?
我完全理解 firebase 和 firestore 流。我想了解我是否有一个来自 PHP 的 API 并且我想构建一个 StreamBuilder,我该怎么做。
StreamBuilder 总是被调用两次吗?一次用于初始数据,然后一次用于输入流?
初始化以下 StreamBuilder 显示构建方法被调用了两次。第二个调用是在第一个调用之后的 0.4 秒。
流:构建 1566239814897
流:构建 1566239815284
import 'dart:async';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:nocd/utils/bloc_provider.dart';
void main() =>
runApp(BlocProvider<MyAppBloc>(bloc: MyAppBloc(), child: MyApp()));
class MyAppBloc extends BlocBase {
String _page = window.defaultRouteName ?? "";
/// Stream for [getPage].
StreamController<String> pageController = StreamController<String>();
/// Observable navigation route value.
Stream get getPage => pageController.stream;
MyAppBloc() {}
@override
void dispose() {
pageController.close();
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final MyAppBloc myAppBloc = BlocProvider.of<MyAppBloc>(context);
return …Run Code Online (Sandbox Code Playgroud) 在使用firestore查询流从streambuilder呈现数据后,在列表中使用ScrollController滚动到列表底部的最佳方法是什么?
使用 scrollcontroller.jumpto 方法的最佳位置是什么?
// initialisation
ScrollController scrollController=ScrollController();
// inside initstate() and build method with 1000ms delay - not working
scrollController.jumpTo(scrollController.position.maxScrollExtent);
// widget inside build method
Expanded(
child: StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance
.collection('Data')
.document(widget.dataID)
.snapshots(),
builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
print("Called");
if (!snapshot.hasData) {
return Text("Loading");
}
var info= snapshot.data.data;
if (info!= null &&
info["messages"] != null &&
info["messages"].length > 0 &&
userList.length > 0) {
return ListView.builder(
controller: scrollController,
itemCount: info["challengeReplies"].length,
itemBuilder: (BuildContext context, int index) {
return ChallengeReplyListItem(
currentUserID: …Run Code Online (Sandbox Code Playgroud) 在我的 Flutter 应用程序中,我有一个包含所有用户的屏幕。用户列表由 a 生成StreamBuilder,它从 Cloud Firestore 获取数据并在 a 中显示用户ListView。为了改进功能,我希望能够使用Appbar.
我已经尝试过这个答案并且效果很好,但我不知道如何让它StreamBuilder在我的情况下工作。作为一个颤振初学者,我将不胜感激任何帮助!下面我包括了我的用户屏幕和StreamBuilder.
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
class UsersScreen extends StatefulWidget {
static const String id = 'users_screen';
@override
_UsersScreenState createState() => _UsersScreenState();
}
class _UsersScreenState extends State<UsersScreen> {
static Map<String, dynamic> userDetails = {};
static final String environment = userDetails['environment'];
Widget appBarTitle = Text('Manage all users');
Icon actionIcon = Icon(Icons.search);
final TextEditingController _controller = TextEditingController();
String approved …Run Code Online (Sandbox Code Playgroud) 在你说这是一个重复的问题或者我应该使用嵌套流构建器之前,请听我说。
我正在设计一个社交媒体类型的应用程序。我希望用户在他们关注的人在他们的“我的关注者帖子”集合中发布一些内容时收到更新。在应用程序中,应用程序将检查当前用户的关注列表(他关注的人)的 firebase rtdb 并列出他们的 uid。
我计划使用所述列表来创建流列表(当然按时间排序)并将它们合并到一个流中,然后将其输入到私有提要页面上的流构建器中。
在此页面上,用户将能够轻松关注他们感兴趣的人发布的内容。
我认为这样的系统比在“私人订阅源”集合中拥有文档的每个用户更具成本效益,每当有人发布内容时,该应用程序都会读取他们的关注者列表,然后立即在他们的每个人中发布更新私人饲料。因为... 想象一个拥有 200 万粉丝的人。即瞬间写入 200 万次。后来,阅读了 200 万次。我认为对于发帖人来说,将帖子放在他们的“publicFeed”中会更具成本效益,而不同的关注者只需收听该提要并与他们保持联系。
但是.. 这需要实现多个流(超过 2 个)的合并。我该怎么做呢?
我曾尝试阅读 RxDart,但它对我来说完全是希腊文。我是飞镖的初学者。我现在只编码了大约 5 个月。
使用“flutter clean”和“flutter run”将任何 Flutter 应用程序从我的 Linux 计算机运行到我的 Galaxy Tab S6 时,我遇到了“更新持久存储”失败。这是在我向我目前正在开发的应用程序添加更多 StreamBuilders 后才开始发生的事情,即使我注释掉这些流,它也会继续发生。任何有关正在发生的事情的帮助或想法将不胜感激!
F/OIC_SRM_DOXM(14551): UpdatePersistentStorage failed!
Run Code Online (Sandbox Code Playgroud) 每当我在 Firebase 实时数据库中进行任何更改时,我都会尝试使这些滚动开关更改其值。
更具体地说,每当我将 Relay1/Data 的值更改为 0 时,我都希望该开关变为非活动状态。
我已经尝试并四处寻找,但找不到任何解决方案。
bool relay1pressed;
final databaseReferenceTest = FirebaseDatabase.instance.reference();
@override
void initState() {
super.initState();
databaseReferenceTest
.child('MedicalCenter')
.once()
.then((DataSnapshot snapshot) {
String value = snapshot.value['Relay1']['Data'];
print('Value is $value');
if (value == '1') {
relay1pressed = true;
} else
relay1pressed = false;
setState(() {
isLoading = true;
});
});
}
//Widget build
StreamBuilder(
stream: databaseReferenceTest
.child('MedicalCenter')
.child('Relay1')
.onValue,
builder: (BuildContext context, AsyncSnapshot<Event> snapshot) {
databaseReferenceTest
.child('MedicalCenter')
.once()
.then((DataSnapshot snapshot) {
String value = snapshot.value['Relay1']['Data'];
print('Value is …Run Code Online (Sandbox Code Playgroud) real-time firebase firebase-realtime-database flutter stream-builder
我正在尝试使用 Flutter 制作我的第一个社交应用程序,但我陷入了困境。我想从我的 api 获取我的消息(在两个用户之间的对话中)。当我使用 Future 和 Future Builder 时这不是问题,但我希望在发送新消息时更新消息列表!
我发现我们可以用流来实现它,但每次我尝试将我的 Future In Stream 转换时,它仍然有效,但就像它是一个 Future (它永远不会更新新消息)。
这里是我的代码的简化部分:
class Test extends StatelessWidget {
final Conv conv;
final User otherUser;
const Test({Key key, this.conv, this.otherUser}) : super(key: key);
Stream<List<Message>> messageFlow(String convId) {
return Stream.fromFuture(getMessages(convId));
}
Future<List<Message>> getMessages(String convId) async {
var data = await http
.post(MyApiUrl, headers: <String, String>{}, body: <String, String>{
"someParam": "param",
"id": convId,
});
var jsonData = json.decode(data.body);
List<Message> messages = [];
for (var m in jsonData) …Run Code Online (Sandbox Code Playgroud) 目前,我有一个 StreamBuilder 从 Firebase 中为群组消息应用程序提取数据。我有一个 snapshot.hasData 检查以确保在显示消息之前有数据。问题是,当 setState 重建小部件时,它也会重建 StreamBuilder,导致它在再次完成加载数据之前显示静态 snapshot.hasData == false 内容。这看起来真的很糟糕,因为它加载得太快了,以至于每次重建时屏幕看起来都会闪烁一秒钟。
我如何在数据重新加载时保留数据,这样它就不会闪烁?
有没有办法可以防止 StreamBuilder 在特定情况下重建?
谢谢!
编辑添加的当前代码。
var firebaseStream;
@override
void initState() {
super.initState();
firebaseStream = Firestore.instance
.collection('groups')
.document(groupID)
.collection('messages')
.orderBy('date', descending: true)
.limit(15)
.snapshots();
StreamBuilder(
stream: firebaseStream,
builder: (context, snapshot) {
if (!snapshot.hasData)
return Container(
color: Colors.red,);
return ListView.builder(
Run Code Online (Sandbox Code Playgroud)