Closed Zorro-cristal closed 4 years ago
@Zorro-cristal Hi! Did you figure out the way to solve it?
Not, I can't resolve this yet
Not, I can't resolve this yet
Hi, i recommend you to read this article
I've spoted a few problems with your code.
Hope it helps!
class ExcelFunciones {
Future<List<Producto>> getAllProductos() async {
try {
final gsheets = GSheets(_credentials);
final ss = await gsheets.spreadsheet(_spreadsheetId);
final sheet = ss.worksheetByTitle("inventario");
final rows = await sheet.values.allRows(fromRow: 2, length: 3);
return rows
.map<Producto>((row) => Producto(
nombre: row[0],
precio: double.parse(row[1]),
nombre: int.parse(row[2]),
))
.toList();
} catch (e, s) {
print(e);
print(s);
return <Producto>[];
}
}
}
class VerProductos extends StatefulWidget {
@override
_VerProductosState createState() => _VerProductosState();
}
class _VerProductosState extends State {
Future<List<Producto>> productos;
@override
void initState() {
super.initState();
productos = ExcelFunciones().getAllProductos();
}
/// the rest of the widget
}
Thanks, i can resolve that but now i have a strange problem, when i save the date in array them the date is alterate
var aux= Producto();
List<Producto> lista= List<Producto> ();
int fila= 2;
do {
aux.nombre= obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 2)).toString());
if (aux.nombre != "") {
aux.cantidad= int.parse(obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 4)).toString()));
aux.precio= double.parse(obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 3)).toString()));
aux.nombre= aux.nombre.toString();
aux.codigo= int.parse(obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 1)).toString()));
aux.descripcion= obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 5)).toString());
aux.nombreAux= aux.nombre;
print("codigo: ${aux.codigo}, nombre: ${aux.nombre}, cantidad: ${aux.cantidad}, precio: ${aux.precio}, descripcion: ${aux.descripcion}, nombreAux: ${aux.nombreAux}");
lista.add(aux);
}
fila++;
} while (aux.nombre != "");
//print("fin lista de tam= ${list.length} y nombre= ${list[2].nombre}");
for (int i= 0; i < lista.length; i++) {
print("elemento [$i]: ${lista[i].codigo}, ${lista[i].nombre}, ${lista[i].precio}, ${lista[i].cantidad}, ${lista[i].descripcion}, ${lista[i].nombreAux}");
}
return lista;
The output is: I/flutter (20318): codigo: 1, nombre: algo, cantidad: 25, precio: 15000.0, descripcion: algo es algo, nombreAux: algo I/flutter (20318): codigo: 2, nombre: util, cantidad: 12, precio: 8000.0, descripcion: utilidad nula, nombreAux: util I/flutter (20318): codigo: 3, nombre: pruebas, cantidad: 15, precio: 12000.0, descripcion: porque lo que no anda?, nombreAux: pruebas I/flutter (20318): codigo: 4, nombre: funciona, cantidad: 100, precio: 20000.0, descripcion: porque lo que no funciona, nombreAux: funciona I/flutter (20318): elemento [0]: 4, , 20000.0, 100, porque lo que no funciona, funciona I/flutter (20318): elemento [1]: 4, , 20000.0, 100, porque lo que no funciona, funciona I/flutter (20318): elemento [2]: 4, , 20000.0, 100, porque lo que no funciona, funciona I/flutter (20318): elemento [3]: 4, , 20000.0, 100, porque lo que no funciona, funciona
I create a little app what is show me a list with products saved in Google Sheet, and I do with FutureBuilder but never ends loading the widget even when my list is already load
import 'package:flutter/material.dart'; import 'package:gsheets/gsheets.dart'; import 'package:stock3/producto.dart';
const _credentials= { "type": "service_account", "project_id": , "private_key_id": , "private_key": , "client_email": , "client_id": , "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gsheets%40stock-279217.iam.gserviceaccount.com" };
const _spreadsheetId= '';
class ExcelFunciones {
Future<List> getAllProductos() async {
final gsheets= GSheets(_credentials);
final ss= await gsheets.spreadsheet(_spreadsheetId);
final sheet= ss.worksheetByTitle("inventario");
var list= List();
var aux= Producto();
int fila= 2;
do {
aux.nombre= obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 1)).toString());
if (aux.nombre != "") {
aux.cantidad= int.parse(obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 3)).toString()));
aux.precio= double.parse(obtenerDatoExcel((await sheet.cells.cell(row: fila, column: 2)).toString()));
print("nombre: ${aux.nombre}, cantidad: ${aux.cantidad}, precio: ${aux.precio}");
list.add(aux);
}
fila++;
} while (aux.nombre != "");
print("finlista");
return list;
}
obtenerDatoExcel (String frase) { int i; for (i= 1; i < frase.length; i++) { if (frase[i] == "'") { frase= frase.substring(1,i); } } return frase; }
}
import 'package:flutter/material.dart'; import 'package:stock3/navegacion.dart'; import 'package:stock3/funcionesExcel.dart'; import 'package:gsheets/gsheets.dart'; import 'package:stock3/producto.dart';
class VerProductos extends StatefulWidget { @override _VerProductosState createState() => _VerProductosState(); }
class _VerProductosState extends State {
List productos;
Future<List> obtenerProductos (productos) async {
productos= await ExcelFunciones().getAllProductos();
return productos;
}
@override void initState(){ obtenerProductos(productos); super.initState(); }
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("Lista de productos")), drawer: BarNavegacion(), body: SafeArea(child: Container( decoration: BoxDecoration(color: Colors.grey[100]), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch, children:[
FutureBuilder(
builder: (BuildContext context, AsyncSnapshot <List> snapshot){
print("snap: ${snapshot.data}");
if (!snapshot.hasData || snapshot.connectionState == ConnectionState.done) {
print("snap2: ${snapshot.data}");
return Container(
height: 400,
width: 200,
child:
CircularProgressIndicator()
);
} else {
return ListView.builder(
padding: EdgeInsets.all(10),
itemCount: 3,
itemBuilder: (BuildContext context, int index) {
if (index == 0) {
return Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
side: BorderSide(color: Colors.lightGreen[200])
),
color: Colors.lightGreen[400],
elevation: 10,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Padding(
padding: EdgeInsets.all(10),
child: Card(
color: Colors.yellow[300],
elevation: 15,
child: TextField(
style: TextStyle(
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 25,
color: Colors.black45
),
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: "Buscar producto",
labelStyle: TextStyle(color: Colors.black54)
),
onChanged: (text) {
text= text.toLowerCase();
//Aqui se pone la lista en el cual se realizara la busqueda
setState(() {
} }