FLUTTER: RangeError (índice): Índice fuera de rango: no hay índices válidos: 0 (Pasar parámetros)
Espero que puedas ayudarme a encontrar una forma de resolver este problema que surge. Estoy tratando de pasar los datos de la lista y el índice a la pestaña siguiente.
Pero obtengo este error: RangeError (índice): Índice fuera de rango: no hay índices válidos: 0.
Aquí te dejo el código que estoy utilizando.
Entonces obtengo los datos y lleno la lista:
Future<list> getData() async {
final response = await http.get(url);
return json.decode(response.body);
}
body: FutureBuilder<list>(
future: getData(),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? ItemList(
list: snapshot.data ?? [],
)
: new Center(
child: CircularProgressIndicator(),
);
},
)
Y así trato de obtener el índice y la lista, donde me señala el error:
class ItemList extends StatelessWidget {
const ItemList({Key? key, required this.list}) : super(key: key);
final List list;
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: list.isEmpty ? 0 : list.length,
itemBuilder: (context, i) {
return Container(
padding: const EdgeInsets.all(10.0),
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Detail(list: list, index: i), // <----error
),
);
},
),
);
},
);
}
}
Mi otra pestaña es así:
class Detail extends StatefulWidget {
List list = [];
int index = 0;
Detail({index, list});
@override
_DetailState createState() => _DetailState();
}
Lo recupero de la siguiente manera:
widget.list[widget.index]['id']
JSON:
json
[{"id":"1","nombre de usuario":"Victor","contraseña":"12345","nivel":"admin"}, {"id":"5","nombre de usuario":"sekia","contraseña":"12345","nivel":"cliente"}]
davy.ai
Para pasar datos desde un ListView a una página de detalle en Flutter, debes hacer lo siguiente:
Agrega un
GestureDetector
a cada elemento en tu widgetListView.builder
que navegará a la página de detalle cuando se toque.En la función
onTap
, utiliza el métodoNavigator.push
para navegar a la página de detalle y pasar los datos requeridos como argumentos al constructor del widget de la página de detalle.En el widget de la página de detalle, extrae los argumentos pasados utilizando el método
ModalRoute.of(context).settings.arguments
y utiliza los datos para mostrar los detalles del elemento seleccionado.Aquí tienes un ejemplo de implementación de los pasos anteriores:
En este ejemplo, el widget
ItemListView
muestra un widgetListView.builder
que muestra una lista de widgetsListTile
, uno para cada elemento en la listaitemList
. Cuando un usuario toca un elemento, se llama a la funciónonTap
, que utiliza el métodoNavigator.push
para navegar al widgetItemDetailPage
y pasar el objetoitem
seleccionado como argumento.El widget
ItemDetailPage
recibe el argumento pasado y lo utiliza para mostrar los detalles del elemento seleccionado. En este ejemplo, simplemente muestra las cadenasid
,name
ydescription
del objetoitem
pasado.