I want to use the Navigator
, but I get the error: Navigator operation requested with a context that does not include a Navigator
, when I click on the floatingButton
, I decided to make the same button for each note presented in the list, because the buttons that are already there work fine, the floattingButton
for adding an note also works fine there. As I understand it, there is something wrong with the BuildContext
, perhaps due to Future
and async/await
.
main.dart
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'add.dart';
import 'firebase_options.dart';
import 'note.dart';
import 'package:intl/intl.dart';
import 'edit.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
runApp(MainApp());
}
class MainApp extends StatefulWidget {
@override
_MainAppState createState() => _MainAppState();
}
class _MainAppState extends State<MainApp> {
List<Note> listNotes = [
Note(title: '1', content: 'abracadabra', lastEdited: DateTime.parse('2024-08-05')),
Note(title: '2', content: 'abracadabra', lastEdited: DateTime.parse('2024-08-06')),
Note(title: '3', content: 'abracadabra', lastEdited: DateTime.parse('2024-08-07')),
];
final FirebaseManager firebaseManager = FirebaseManager();
late Future<List<Note>> _notesFuture;
void _fetchNotes() {
setState(() {
_notesFuture = firebaseManager.getNotes();
});
}
@override
void initState() {
super.initState();
firebaseManager.addNotes(listNotes);
_fetchNotes();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Notes'),
),
body: FutureBuilder<List<Note>>(
future: _notesFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return Center(child: Text('No notes available'));
} else {
List<Note> notes = snapshot.data!;
return ListView.builder(
itemCount: notes.length,
itemBuilder: (context, index) {
Note note = notes[index];
return ListTile(
title: Text(note.title),
subtitle: Text(note.content),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: Icon(Icons.edit),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditNoteScreen(note: note,firebaseManager: firebaseManager,),
),
).then((value) => {
if (value == true){
_fetchNotes()
}
});
},
),
IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
await firebaseManager.deleteNoteByFieldId(note.id);
_fetchNotes();
},
),
IconButton(
icon: Icon(Icons.add),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddNoteScreen(firebaseManager: firebaseManager),
),
).then((value) => {
if (value == true){
_fetchNotes()
}
});
},
)
],
),
);
},
);
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddNoteScreen(firebaseManager: firebaseManager),
),
).then((value) => {
if (value == true){
_fetchNotes()
}
});
},
child: Icon(Icons.add),
),
),
);
}
}