在这种情况下,当我尝试使用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;
}
谢谢
答案 0 :(得分:0)
FutureBuilder
是Widget
。您不应该在compruebaDatos()
中使用它。
在onPressed
内,您应直接致电DatabaseProvider.db.getAllUsers()
并处理其响应,然后致电Navigator.of(context).push(...)
转到另一页。
答案 1 :(得分:0)
我将其更改为onpressed,但仍然是相同的问题。没有futurebuild,我怎么知道我有数据?
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();
}
},
);
},
答案 2 :(得分:0)
已解决。我在子级中更改FutureBuilder,并检查快照的长度是否大于0
implementation 'com.tinder.scarlet:scarlet:0.1.10'
implementation 'com.github.tinder.scarlet:scarlet-message-adapter-moshi:0.1.10'
implementation 'com.github.tinder.scarlet:scarlet-stream-adapter-rxjava2:0.1.10'
implementation 'com.github.tinder.scarlet:scarlet-websocket-okhttp:0.1.10'