строитель: от FutureBuilder не работает - PullRequest
0 голосов
/ 16 марта 2020

Когда я пытаюсь использовать FutureBuilder в этом случае только делает будущее: но не идет к строителю: по любой причине, которую я не могу найти. Я не могу проверить, есть ли у него данные или нет. Я даю вам код здесь.

ConstrainedBox(
constraints: BoxConstraints(
  maxWidth: ajuste.width*0.74,
  minWidth: ajuste.width*0.74
),
child: CupertinoButton(
  borderRadius: BorderRadius.circular(5),
  padding: EdgeInsets.symmetric(vertical: ajuste.sp(1.8)),
  color: Colors.pinkAccent,
  onPressed: (){
    compruebaDatos();
  },
  child: Text(
    AppLocalizations.of(context).translate('entrar'),
    style: TextStyle(
      fontSize: ajuste.sp(2.4)
    ),
  ), 
),
),

compruebaDatos() {
FutureBuilder<List<Usuario>>(
  future: DatabaseProvider.db.getAllUsers(),
  builder: (BuildContext context, AsyncSnapshot<List<Usuario>> snapshot){
    if (snapshot.hasData) {
      if (snapshot.data !=null) {
        print('Datos nulos');
        return HomePage();
      }else{
        print('Datos recogidos');
        return HomePage();
      }
    }else{
      print('No aparece nada');
      return HomePage();
    }
  },
);
}

И будущее внутри класса для подключения sqflite

Future<List<Usuario>> getAllUsers() async {
final db = await database;
var response = await db.query("Usuarios");
List<Usuario> list = response.isNotEmpty
  ? response.map((c) => Usuario.fromMap(c)).toList()
  : []; 
return list;

}

Спасибо

Ответы [ 3 ]

0 голосов
/ 17 марта 2020

Я изменил его на нажатую, но все та же проблема. Без будущей сборки, как я могу знать, что у меня есть данные?

onPressed: (){
FutureBuilder<List<Usuario>>(
  future: DatabaseProvider.db.getAllUsers(),
  builder: (BuildContext context, AsyncSnapshot<List<Usuario>> snapshot){
    if (snapshot.hasData) {
      if (snapshot.data !=null) {
        print('Datos nulos');
        return HomePage();
      }else{
        print('Datos recogidos');
        return HomePage();
      }
    }else{
      print('No aparece nada');
      return HomePage();
    }
  },
);

},

0 голосов
/ 18 марта 2020

решаемая. Я изменяю FutureBuilder внутри дочерних элементов и проверяю, больше ли длина из снимка, чем 0

Column(
                        children: <Widget>[
                          FutureBuilder<List<Usuario>>(
                            future: DatabaseProvider.db.getAllUsers(),
                            builder: (BuildContext context, AsyncSnapshot<List<Usuario>> snapshot){
                              if (snapshot.hasData) {
                                if (snapshot.data.length == 0) {
                                  tieneDatos=false;
                                }else{
                                  tieneDatos=true;
                                  Usuario item = snapshot.data[0];
                                  print(item.usuario);
                                }
                              }
                              return Container();
                            },
                          ),
0 голосов
/ 16 марта 2020

FutureBuilder является Widget. Вы не должны использовать его в compruebaDatos().

Внутри onPressed вы должны позвонить DatabaseProvider.db.getAllUsers() напрямую и обработать его ответ и вызвать Navigator.of(context).push(...) на go на другую страницу.

...