-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[firebase_database]: [web] Error: Bad state: Cannot fire new event. Controller is already firing an event. #13490
Labels
Needs Attention
This issue needs maintainer attention.
platform: web
Issues / PRs which are specifically for web.
plugin: database
type: bug
Something isn't working
Comments
deepak786
added
Needs Attention
This issue needs maintainer attention.
type: bug
Something isn't working
labels
Oct 10, 2024
deepak786
changed the title
[firebase_database] [web] Error: Bad state: Cannot fire new event. Controller is already firing an event.
[firebase_database]: [web] Error: Bad state: Cannot fire new event. Controller is already firing an event.
Oct 10, 2024
It is re-added in this commit |
SelaseKay
added
plugin: database
platform: web
Issues / PRs which are specifically for web.
labels
Oct 14, 2024
Hi @deepak786 , thanks for the report. I was able to reproduce this issue. Reproducible code:class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
late DatabaseReference _counterRef;
late DatabaseReference _messagesRef;
late StreamSubscription<DatabaseEvent> _counterSubscription;
late StreamSubscription<DatabaseEvent> _messagesSubscription;
bool _anchorToBottom = false;
String _kTestKey = 'Hello';
String _kTestValue = 'world!';
FirebaseException? _error;
bool initialized = false;
@override
void initState() {
init();
super.initState();
}
Future<void> init() async {
_counterRef = FirebaseDatabase.instance.ref('counter');
final database = FirebaseDatabase.instance;
_messagesRef = database.ref('messages');
_messagesRef.onValue.listen((event) {
final children = event.snapshot.children;
for(final child in children) {
if(child.key == 'test') {
_messagesRef.update({'test': 'test1'});
}
}
});
database.setLoggingEnabled(false);
if (!kIsWeb) {
database.setPersistenceEnabled(true);
database.setPersistenceCacheSizeBytes(10000000);
}
if (!kIsWeb) {
await _counterRef.keepSynced(true);
}
setState(() {
initialized = true;
});
try {
final counterSnapshot = await _counterRef.get();
print(
'Connected to directly configured database and read '
'${counterSnapshot.value}',
);
} catch (err) {
print(err);
}
_counterSubscription = _counterRef.onValue.listen(
(DatabaseEvent event) {
setState(() {
_error = null;
_counter = (event.snapshot.value ?? 0) as int;
});
},
onError: (Object o) {
final error = o as FirebaseException;
setState(() {
_error = error;
});
},
);
final messagesQuery = _messagesRef.limitToLast(10);
_messagesSubscription = messagesQuery.onChildAdded.listen(
(DatabaseEvent event) {
print('Child added: ${event.snapshot.value}');
},
onError: (Object o) {
final error = o as FirebaseException;
print('Error: ${error.code} ${error.message}');
},
);
}
@override
void dispose() {
super.dispose();
_messagesSubscription.cancel();
_counterSubscription.cancel();
}
Future<void> _increment() async {
await _counterRef.set(ServerValue.increment(1));
await _messagesRef
.push()
.set(<String, String>{_kTestKey: '$_kTestValue $_counter'});
}
Future<void> _incrementAsTransaction() async {
try {
final transactionResult = await _counterRef.runTransaction((mutableData) {
return Transaction.success((mutableData as int? ?? 0) + 1);
});
if (transactionResult.committed) {
final newMessageRef = _messagesRef.push();
await newMessageRef.set(<String, String>{
_kTestKey: '$_kTestValue ${transactionResult.snapshot.value}',
});
}
} on FirebaseException catch (e) {
print(e.message);
}
}
Future<void> _deleteMessage(DataSnapshot snapshot) async {
final messageRef = _messagesRef.child(snapshot.key!);
await messageRef.remove();
}
void _setAnchorToBottom(bool? value) {
if (value == null) {
return;
}
setState(() {
_anchorToBottom = value;
});
}
@override
Widget build(BuildContext context) {
if (!initialized) return Container();
return Scaffold(
appBar: AppBar(
title: const Text('Flutter Database Example'),
),
body: Column(
children: [
Flexible(
child: Center(
child: _error == null
? Text(
'Button tapped $_counter time${_counter == 1 ? '' : 's'}.\n\n'
'This includes all devices, ever.',
)
: Text(
'Error retrieving button tap count:\n${_error!.message}',
),
),
),
ElevatedButton(
onPressed: _incrementAsTransaction,
child: const Text('Increment as transaction'),
),
ListTile(
leading: Checkbox(
onChanged: _setAnchorToBottom,
value: _anchorToBottom,
),
title: const Text('Anchor to bottom'),
),
Flexible(
child: FirebaseAnimatedList(
key: ValueKey<bool>(_anchorToBottom),
query: _messagesRef,
reverse: _anchorToBottom,
itemBuilder: (context, snapshot, animation, index) {
return SizeTransition(
sizeFactor: animation,
child: ListTile(
trailing: IconButton(
onPressed: () => _deleteMessage(snapshot),
icon: const Icon(Icons.delete),
),
title: Text('$index: ${snapshot.value}'),
),
);
},
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: _increment,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
|
10 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Needs Attention
This issue needs maintainer attention.
platform: web
Issues / PRs which are specifically for web.
plugin: database
type: bug
Something isn't working
Is there an existing issue for this?
Which plugins are affected?
Database
Which platforms are affected?
Web
Description
The issue was already fixed here by removing the
sync true
.#8420
But it is re-added
flutterfire/packages/firebase_database/firebase_database_web/lib/src/interop/database.dart
Line 485 in a1de14f
Reproducing the issue
See #7244
Firebase Core version
3.3.0
Flutter Version
3.19.6
Relevant Log Output
No response
Flutter dependencies
No response
Additional context and comments
No response
The text was updated successfully, but these errors were encountered: