Flutter 建筑商:来自FutureBuilder&x27;t工作

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)

在这种情况下,当我尝试使用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();
    }
  },
);
}
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的原因。我这样做了,但仍然存在相同的问题。