Passage of parameter through the modular

Asked

Viewed 385 times

-1

I am not knowing how to pass the file parameter home_page to the archive produtos_module when the user clicks.

home_page.Dart file

Observer(
       builder: (_) {
         List<CategoriaModel> categoria = controller.categoria.data;
         return Container(
           height: 160,
           width: larguraTela,
           margin: EdgeInsets.symmetric(
             vertical: 20,
           ),
           child: ListView.builder(
             itemCount: categoria.length,
             scrollDirection: Axis.horizontal,
             itemBuilder: (_, index) {
               var model = categoria[index];
               return CategoriaWidget(
                 nameCategoria: model.titulo,
                 icon: "assets/images/icons/${model.icon}.svg",
                onTap: () {
                   Modular.to.pushNamed(
                     RoutersConst.produtos,
                     arguments: CategoriaModel(
                       titulo: model.titulo,
                     ),
                   );
                 },
               );
             },
           ),
         );
       },
     ),

archive products_module.Dart

   class ProdutosModule extends ChildModule {
   @override
   List<Bind> get binds => [
         Bind((i) => ProdutosController(i.get())),
         Bind<IProdutoRepository>(
          (i) => ProdutoRepository(Firestore.instance, "Beer"), // pegar a categoria quando o usuario clicar 
         ),
       ];
 
   @override
   List<Router> get routers => [
         Router(
           RoutersConst.produtos,
           child: (_, args) => ProdutosPage(),
         ),
       ];
 
   static Inject get to => Inject<ProdutosModule>.of();
 }

product file_repository.Dart

   class ProdutoRepository implements IProdutoRepository {
  final Firestore firestore;
  final String categoria;

  ProdutoRepository(this.firestore, this.categoria);

  @override
  Stream<List<ProdutoModel>> getProdutos() => firestore
      .collection("produtos")
      .snapshots()
      .map((query) => query.documents
          .map((doc) => ProdutoModel.fromDocument(doc))
          .toList());
  @override
  Stream<List<ProdutoModel>> getProdutoCategoria() => firestore
      .collection("produtos")
      .where("categoria", isEqualTo: categoria)
      .snapshots()
      .map((query) => query.documents
          .map((doc) => ProdutoModel.fromDocument(doc))
          .toList());
}

1 answer

0


At the click of the home_page item you are doing it right. But you will not pass the parameter to the ChildModule but for the class linked to routers.

Do the implementation correctly in the Module and in the class that will be called, it should look like this:

   class ProdutosModule extends ChildModule {
   @override
   List<Bind> get binds => [
         Bind((i) => ProdutosController(i.get())),
         Bind<IProdutoRepository>(
          (i) => ProdutoRepository(Firestore.instance, "Beer"), // pegar a categoria quando o usuario clicar 
         ),
       ];
 
   @override
   List<Router> get routers => [
         Router(
           RoutersConst.produtos,
           child: (_, args) => ProdutosPage(dados: args.data),
         ),
       ];
 
   static Inject get to => Inject<ProdutosModule>.of();
 }

And in your class ProdutosPage settings it to receive the parameter

class ProdutosPage extends StatelessWidget {

    ProdutosPage({this.dados});
    
    CategoriaModel dados;

}

TIP

Reading the package documentation doesn’t kill anyone flutter_modular.

  • Thanks <3, sorry for the inconvenience

Browser other questions tagged

You are not signed in. Login or sign up in order to post.