Flutter 建筑商:来自FutureBuilder&x27;t工作
在这种情况下,当我尝试使用FutureBuilder时,只会创造未来:但不会走向构建者:因为我找不到的任何原因。我无法检查它是否有数据。我给你这里的代码Flutter 建筑商:来自FutureBuilder&x27;t工作,flutter,builder,sqflite,Flutter,Builder,Sqflite,在这种情况下,当我尝试使用FutureBuilder时,只会创造未来:但不会走向构建者:因为我找不到的任何原因。我无法检查它是否有数据。我给你这里的代码 ConstrainedBox( constraints: BoxConstraints( maxWidth: ajuste.width*0.74, minWidth: ajuste.width*0.74 ), child: CupertinoButton( borderRadius: BorderRadius.circular(5)
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();
}
},
);
}
ConstrainedBox(
约束:BoxConstraints(
maxWidth:ajuste.width*0.74,
最小宽度:半宽度*0.74
),
孩子:丘比特纽顿(
边界半径:边界半径。圆形(5),
填充:边缘集。对称(垂直:ajuste.sp(1.8)),
颜色:Colors.pinkAccent,
已按下:(){
compruebaDatos();
},
子:文本(
AppLocalizations.of(context.translate('entra'),
样式:TextStyle(
fontSize:ajuste.sp(2.4)
),
),
),
),
compruebaDatos(){
未来建设者(
future:DatabaseProvider.db.getAllUsers(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
如果(snapshot.data!=null){
印刷品(“Datos nulos”);
返回主页();
}否则{
打印(“数据记录”);
返回主页();
}
}否则{
印刷品(“无aparece nada”);
返回主页();
}
},
);
}
以及类内连接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;
Future getAllUsers()异步{
最终数据库=等待数据库;
var response=await db.query(“Usuarios”);
List=response.isNotEmpty
?response.map((c)=>Usuario.fromMap(c)).toList()
: [];
退货清单;
}
谢谢
FutureBuilder
是一个小部件
。您不应该在compruebaDatos()
中使用它
在按下
onPressed
的内部,您应该直接调用DatabaseProvider.db.getAllUsers()
,处理它的响应并调用Navigator.of(context)。按(…)
转到另一页。我将其更改为onPressed,但仍然存在相同的问题。没有未来构建,我怎么知道我有数据
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();
}
},
);
onPressed:(){
未来建设者(
future:DatabaseProvider.db.getAllUsers(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
如果(snapshot.data!=null){
印刷品(“Datos nulos”);
返回主页();
}否则{
打印(“数据记录”);
返回主页();
}
}否则{
印刷品(“无aparece nada”);
返回主页();
}
},
);
},已解决。我在子对象中更改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();
},
),
列(
儿童:[
未来建设者(
future:DatabaseProvider.db.getAllUsers(),
生成器:(BuildContext上下文,异步快照){
if(snapshot.hasData){
如果(snapshot.data.length==0){
tieneDatos=假;
}否则{
tieneDatos=真;
Usuario item=snapshot.data[0];
印刷品(usuario项目);
}
}
返回容器();
},
),
它打印出任何值了吗?呈现小部件时将调用widget和builder。如果您想转到其他屏幕,可以使用。好的,谢谢,但我如何检查列表是否有数据?这就是我尝试使用FutureBuilder的原因。我这样做了,但仍然存在相同的问题。