जब मैं इस मामले में फ्यूचरबिल्डर का उपयोग करने का प्रयास करता हूं तो केवल भविष्य बनाता है: लेकिन निर्माता के पास नहीं जाता है: किसी भी कारण से मुझे नहीं मिल रहा है। मैं जांच नहीं कर सकता कि इसमें डेटा है या नहीं। मैं आपको यहां कोड देता हूं।

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
Antonio Perez 16 मार्च 2020, 12:15
क्या इसने कोई मूल्य प्रिंट किया?
 – 
John Joe
16 मार्च 2020, 12:28
FutureBuilder विजेट है और विजेट के रेंडर होने पर बिल्डर को कॉल किया जाएगा. यदि आप किसी भिन्न स्क्रीन पर जाना चाहते हैं, तो आप नेविगेटर का उपयोग कर सकते हैं .
 – 
Vineet
16 मार्च 2020, 14:15

3 जवाब

FutureBuilder एक Widget है। आपको इसका उपयोग compruebaDatos() में नहीं करना चाहिए।

onPressed के अंदर आपको सीधे DatabaseProvider.db.getAllUsers() को कॉल करना चाहिए और उसके जवाब को प्रोसेस करना चाहिए और दूसरे पेज पर जाने के लिए Navigator.of(context).push(...) को कॉल करना चाहिए।

0
Sebastian 16 मार्च 2020, 17:57
ठीक है, धन्यवाद, लेकिन मैं कैसे जांच सकता हूं कि सूची में डेटा है या नहीं? इसलिए मैंने FutureBuilder का उपयोग करने का प्रयास किया।
 – 
Antonio Perez
17 मार्च 2020, 16:47
मैंने किया लेकिन अभी भी वही समस्या है।
 – 
Antonio Perez
17 मार्च 2020, 21:50

मैंने इसे ऑनप्रेस्ड में बदल दिया लेकिन फिर भी वही समस्या है। फ्यूचरबिल्ड के बिना मुझे कैसे पता चलेगा कि मेरे पास डेटा है?

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
Antonio Perez 17 मार्च 2020, 21:59

हल किया। मैं फ्यूचरबिल्डर को बच्चों के अंदर बदलता हूं और जांचता हूं कि स्नैपशॉट से लंबाई 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
Antonio Perez 18 मार्च 2020, 13:42