¿Cómo puedo navegar de la lista? constructor a un activo local en PDF en el desbordamiento

Estoy tratando de convertir un libro de la escuela del domingo en una aplicación y he creado una lista de los capítulos del libro con títulos usando el listview.builder widget. He intentado usar la propiedad de la entrada con navigator.push para redirigir a una nueva página que muestra un archivo de activos PDF locales, pero no ha funcionado.

Pregunta hecha hace 3 años, 4 meses, 25 días - Por quantumquill


2 Respuestas:

  • Para navegar de la lista de capítulos a un activo local en PDF en el desbordamiento en Flutter, puedes seguir estos pasos:

    • En primer lugar, asegúrate de tener tus archivos PDF guardados en la carpeta `assets` de tu proyecto Flutter.
    • Asegúrate de que has declarado la carpeta `assets` en el archivo `pubspec.yaml` de tu proyecto para que pueda acceder a los activos locales. Debe verse algo así:
    yaml
    flutter:
      assets:
           
    • assets/
    • Cuando crees tu lista de capítulos usando el `ListView.builder`, puedes agregar un `onTap` a cada elemento de la lista para que al hacer clic en un capítulo se abra el PDF correspondiente. Por ejemplo:
    dart
    ListView.builder(
      itemCount: chapters.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text(chapters[index].title),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => PDFViewerPage(pdfPath: chapters[index].pdfPath),
              ),
            );
          },
        );
      },
    );
    
    • Crea una nueva página llamada `PDFViewerPage` (o el nombre que elijas) donde mostrarás el PDF. Asegúrate de recibir la ruta del PDF como argumento en el constructor de esta página. Por ejemplo:
    dart
    class PDFViewerPage extends StatelessWidget {
      final String pdfPath;
    
      PDFViewerPage({required this.pdfPath});
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('PDF Viewer'),
          ),
          body: PDFViewerAsset(
            asset: pdfPath,
          ),
        );
      }
    }
    

    Con estos pasos, al hacer clic en un capítulo en la lista, te dirigirás a una nueva página que muestra el PDF correspondiente desde los activos locales de tu proyecto. Asegúrate de ajustar la lógica según la estructura de tu proyecto y la ubicación de los activos PDF.

    Respondida el Dec 21, 2020 a las 21:41 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para navegar desde un widget ListView.builder a una nueva página que muestre un archivo PDF de activos locales, puedes usar la siguiente estructura de código:

    
    import 'package:flutter/material.dart';
    
    class ChapterList extends StatelessWidget {
      final List chapters;
    
      const ChapterList({Key? key, required this.chapters}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return ListView.builder(
          itemCount: chapters.length,
          itemBuilder: (context, index) {
            final chapter = chapters[index];
    
            return ListTile(
              title: Text(chapter.title),
              onTap: () {
                // Navega a la pantalla de visualización de PDF
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => PdfViewerPage(pdfAssetPath: chapter.pdfAssetPath),
                  ),
                );
              },
            );
          },
        );
      }
    }
    
    class PdfViewerPage extends StatelessWidget {
      final String pdfAssetPath;
    
      const PdfViewerPage({Key? key, required this.pdfAssetPath}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Capítulo ${pdfAssetPath.split('/').last}'),
          ),
          body: PdfViewer.fromAsset(
            pdfAssetPath,
          ),
        );
      }
    }
    
    class Chapter {
      final String title;
      final String pdfAssetPath;
    
      const Chapter({required this.title, required this.pdfAssetPath});
    }
    

    Ten en cuenta que debes reemplazar chapters con tu propia lista de objetos Capítulo, cada uno con un título y una ruta pdfAssetPath al archivo PDF del activo. También asegúrate de que el archivo PDF se haya agregado correctamente a tu proyecto como un activo.

    Además, el PdfViewer utilizado en este ejemplo se basa en el paquete flutter_pdfview. Necesitarás instalar este paquete en tu proyecto ejecutando flutter pub add flutter_pdfview en tu terminal.

    Respondida el Dec 21, 2020 a las 21:46 - por Gemini

    Votos positivos: 0 | Votos negativos: 0