¿Cómo importar datos de una página a otra en Flutter?

Flutter es el SDK móvil de Google para crear aplicaciones web nativas de iOS y Android, escritorio (Windows, Linux, macOS) a partir de una única base de código. Al crear aplicaciones con Flutter, todo apunta a Widgets: los bloques con los que se crean las aplicaciones de Flutter. Son elementos estructurales que se envían con un montón de funcionalidades específicas de diseño de materiales y también se pueden componer nuevos widgets a partir de los existentes. En este artículo vamos a encontrar la solución al enunciado del problema “Cómo importar/enviar datos de una página a otra en flutter” . Antes de entrar en el tema, hay algunos requisitos previos.

Requisitos previos:

Sumerjámonos en el artículo creando una aplicación simple con dos páginas. Hemos utilizado VS Code IDE para el desarrollo.

Terminologías que vamos a utilizar en esta aplicación:

Implementación paso a paso

Paso 1:

Crear una nueva aplicación de Flutter:

  • Utilice el comando ctrl+shift+p para abrir la Paleta de comandos.
  • Escriba Flutter: New Project en la paleta.

Nota: si está utilizando el IDE de Android Studio , utilice la ruta Archivo-> Nuevo-> Nuevo proyecto de Flutter .

Paso 2:

Agregando Textfield para obtener datos de los usuarios:

  • Cree campos de texto para obtener información del usuario.
  • Cree clases de TextEditingController para el TextField adecuado.

Sintaxis:

TextEditingController object_name = TextEditingController();

Mencione el nombre del objeto del controlador dentro de la clase TextField usando el atributo del controlador . Consulte el siguiente código,

child: TextField(
            // controller attribute. 
               controller: controller_object_name,
               decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: "Enter your Phone Number"
               ),
       ),

Paso 3:

Envío de datos y navegación a la página siguiente:

  • Para navegar a la página siguiente, usamos Navigator con el contexto de main.dart.
  • Para enviar los datos como argumentos mientras se navega a la página siguiente, usamos la clase MaterialPageRoute con el constructor para el constructor de la clase de la página siguiente .
  • Deberíamos crear un botón para realizar las funciones anteriores en la función onPressed:() haciendo clic en él. Para ello, vamos a utilizar la clase ElevatedButton para la creación de botones.
ElevatedButton(
                onPressed: () {
                  // Navigator for next page.
                  Navigator.of(context).push(
                    MaterialPageRoute(
                        // Builder for the nextpage
                        // class's constructor.
                        builder: (context) => nextpage(
                              name: _name.text,
                              email: _email.text,
                              phoneno: _phoneno.text,
                            )),
                          );
                    },
                child: Text("SEND")
                ),

archivo main.dart:

Dart

import 'package:flutter/material.dart';
import 'package:geeksforgeeks/nextpage.dart';
 
void main() {
  runApp(const MyApp());
}
 
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: const MyHomePage(title: 'GeeksForGeeks'),
    );
  }
}
 
class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}
 
class _MyHomePageState extends State<MyHomePage> {
  // To listen to the changes in the textfield.
  TextEditingController _name = TextEditingController();
  TextEditingController _email = TextEditingController();
  TextEditingController _phoneno = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Padding(
              padding: const EdgeInsets.all(25),
              child: TextField(
                // To set the appropriate
                // controller to the text field.
                controller: _name,
                decoration: InputDecoration(
                    border: OutlineInputBorder(), labelText: "Enter your Name"),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(25),
              child: TextField(
                controller: _email,
                decoration: InputDecoration(
                    border: OutlineInputBorder(),
                    labelText: "Enter your Email"),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(25),
              child: TextField(
                controller: _phoneno,
                decoration: InputDecoration(
                    border: OutlineInputBorder(),
                    labelText: "Enter your Phone Number"),
              ),
            ),
            // Button to go to the nextpage.
            ElevatedButton(
                onPressed: () {
                  // Navigator to the next page.
                  Navigator.of(context).push(
                    MaterialPageRoute(
                        // Builder for the nextpage
                          // class's constructor.
                        builder: (context) => nextpage(
                              // Date as arguments to
                                // send to next page.
                              name: _name.text,
                              email: _email.text,
                              phoneno: _phoneno.text,
                            )),
                  );
                },
                child: Text("SEND"))
          ],
        ),
      ),
    );
  }
}

Paso 4:

Cree un nuevo archivo dart:

  • Usando la ruta Archivo-> Nuevo archivo crea un nuevo archivo dart con el nombre nextpage.dart dentro de la carpeta lib.
  • Importa el paquete ‘package:flutter/material.dart’ . Este paquete se utiliza para implementar el diseño material de la aplicación.
  • Crea la clase nextpage() que extiende StatelessWidget .
  • Cree un constructor para que la clase reciba los argumentos de la clase de la página anterior y guarde los argumentos como variables.
String name, email, phoneno;
nextpage({required this.name, required this.email, required this.phoneno});

Cree Textfields y su TextEditingController apropiado y configure los datos de la página anterior en los campos de texto respectivos usando el atributo de texto . Consulte el siguiente código,

TextEditingController object_name = TextEditingController(text: data);

archivo nextpage.dart:

Dart

import 'package:flutter/material.dart';
 
class nextpage extends StatelessWidget {
  String name, email, phoneno;
   
  // Constructor to get the data from the previous page.
  nextpage({required this.name, required this.email, required this.phoneno});
 
  @override
  Widget build(BuildContext context) {
    // To listen to the changes in the textfield.
    TextEditingController _name = TextEditingController(text: name);
    TextEditingController _email = TextEditingController(text: email);
    TextEditingController _phoneno = TextEditingController(text: phoneno);
 
    return Scaffold(
      appBar: AppBar(
        title: Text('Next Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Padding(
              padding: const EdgeInsets.all(25),
              child: TextField(
                // To set the appropriate controller
                // to the text field.
                controller: _name,
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: "Name",
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(25),
              child: TextField(
                controller: _email,
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: "Email",
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(25),
              child: TextField(
                controller: _phoneno,
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: "Number",
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ashwin13602 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *