在这种情况下,当我尝试使用FutureBuilder时,只生成future:但不会转到构建器:因为我找不到任何原因。我无法检查它是否有数据。我把代码给你。
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;
}
谢谢
FutureBuilder
是Widget
。你不应该在compruebaDatos()
中使用它。
在onPressed
中,您应该直接调用DatabaseProvider.db.getAllUsers()
并处理它的响应,然后调用Navigator.of(context).push(...)
转到另一个页面。
已解决。我在一个孩子体内更改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();
},
),