Я хочу, чтобы эта страница обновлялась, когда я возвращаюсь к ней с другой страницы или добавляю новый продукт,
Я хочу, чтобы эта страница обновлялась, когда пользователь добавлял новый продукт с другой страницы, и каждый раз, когда я повторно посещаю эту страницу
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:inventory/page/add_product.dart';
import '../utils/product_card.dart';
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<String> docIds = [];
final user = FirebaseAuth.instance.currentUser!;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[100],
appBar: AppBar(
centerTitle: false,
actions: [
IconButton(
icon: const Icon(Icons.exit_to_app_rounded), onPressed: SignOut),
],
title: const Text('Manage Products'),
elevation: 10,
backgroundColor: Colors.grey[900],
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
Navigator.of(context, rootNavigator: true).push(
MaterialPageRoute(
builder: (context) => const AddProdcut(),
),
);
},
label: const Text('Add Product'),
icon: const Icon(Icons.add),
),
body: FutureBuilder(
future: getDocid(),
builder: (context, snapshot) {
return GridView.builder(
keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
itemCount: docIds.length,
// Create a grid with 2 columns. If you change the scrollDirection to
gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
maxCrossAxisExtent: 200,
childAspectRatio: 4 / 4,
crossAxisSpacing: 5,
mainAxisSpacing: 10),
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Product_Card(
docIds: docIds,
index: index,
context: context,
),
);
},
);
},
),
);
}
Future getDocid() async {
await FirebaseFirestore.instance.collection('products').get().then(
(snapshot) => snapshot.docs.forEach(
(document) {
docIds.add(document.reference.id);
},
),
);
}
SignOut() async {
await FirebaseAuth.instance.signOut();
}
}
ЗДЕСЬ ВЫВОД
введите описание изображения здесь
Когда я добавляю продукт, вывод остается прежним, я хочу, чтобы он обновлялся и снова показывал все продукты.
1 ответ
Использоватьsnapshot.listen
метод вместоget
.
Метод listen создает потоковое соединение, которое непрерывно прослушивает данные и обновляет их при изменении данных.
Future getDocid() async {
FirebaseFirestore.instance.collection('products').snapshot.listen(
(snapshot) => snapshot.docs.forEach(
(document) {
print(document.data())
},
),
);
}