Я хочу, чтобы эта страница обновлялась, когда я возвращаюсь к ней с другой страницы или добавляю новый продукт,

Я хочу, чтобы эта страница обновлялась, когда пользователь добавлял новый продукт с другой страницы, и каждый раз, когда я повторно посещаю эту страницу

      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())
            },
          ),
        );
  }

Другие вопросы по тегам