es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El tipo de argumento ‘String?’ no puede ser asignado al tipo de parámetro ‘String’. El método no puede ser invocado de manera incondicional porque el receptor puede ser nulo.

Soy nuevo en Flutter y he estado tratando de usar el paquete contacts_service para poder tener una lista con nombres y números de tus contactos.
A continuación se muestra el código de intento, sin embargo, “title: Text (contact.displayName)” me da el error displayName error y “subtitle: Text(contact.phones.elementAt(0).value me da el error elementAt error.
Por lo que entiendo, esto se debe a la seguridad nula, pero no estoy seguro de dónde o cómo verificar la seguridad nula en mi código. ¿Lo hago dentro del scaffold o antes de construirlo?
Gracias

“`dart
import 'package:contacts_service/contacts_service.dart';
import 'package:flutter/material.dart';

class Contacts extends StatefulWidget {
@override
_Contacts createState() => _Contacts();
}

class _Contacts extends State<contacts>{
List<contact> contacts =[];

@override
void initState() {
super.initState();
getAllContacts();
}

getAllContacts() async{
List<contact> _contacts = (await ContactsService.getContacts(withThumbnails: false)).toList();
setState(() {
contacts = _contacts;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Información de contacto')),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
children: <widget>[
Text('test'),
ListView.builder(
shrinkWrap: true,
itemCount: contacts.length,
itemBuilder: (context, index) {
Contact contact = contacts[index];
return ListTile(
title: Text(contact.displayName),
subtitle: Text(
contact.phones.elementAt(0).value
),
);
},
)
],
),
),
);
}
}
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para manejar los errores de seguridad nulos en este código, debes verificar si es nulo antes de acceder a cualquier propiedad o método que pueda ser nullable.

    En este caso, estás obteniendo errores de seguridad nulos porque estás intentando acceder a displayName o phones.elementAt(0).value sin verificar si estos valores son nulos o no.

    Para solucionar esto, puedes utilizar el operador de “null-aware” ?. para acceder de forma segura a estas propiedades. Por ejemplo, puedes reemplazar:

    title: Text(contact.displayName),
    

    con:

    title: Text(contact.displayName ?? ''),
    

    Esto verificará si contact.displayName es nulo y, si lo es, devolverá una cadena vacía en su lugar.

    De manera similar, puedes reemplazar:

    subtitle: Text(contact.phones.elementAt(0).value),
    

    con:

    subtitle: Text(contact.phones?.elementAt(0)?.value ?? ''),
    

    Esto verificará si contact.phones es nulo o vacío, y si lo es, devolverá una cadena vacía. También verificará si el primer número de teléfono en la lista es nulo, y si lo es, devolverá una cadena vacía en su lugar.

    Puedes agregar estas comprobaciones de nulidad en cualquier lugar donde estés accediendo a propiedades o métodos nulos en tu código.

Comments are closed.