Flutter - передает данные из переменной Future (sqlite) в виджет - PullRequest
0 голосов
/ 17 апреля 2020

Я очень плохо знаком с Флаттером и Дартом, но я пытаюсь получить данные из метода sqlite и передать их в качестве аргумента новому виджету. Я пытался использовать FutureBuilder, и это не помогло.

Я вызываю метод для загрузки данных, жду данных в .then () и внутри, затем я устанавливаю состояние переменной класса, которая будет позже присвоена виджету, но переменная _records всегда равна нулю, даже после setState.

Below is my code

int initScreen;

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SharedPreferences prefs = await SharedPreferences.getInstance();
  initScreen = await prefs.getInt("initScreen");


  await prefs.setInt("initScreen", 1);

  runApp(MyApp());
}


class MyApp extends StatefulWidget {

  @override
  MyAppState createState() => MyAppState();
}

class MyAppState  extends State{

  List<Quarter> _records;

  @override
  void initState() {
    _getRecords();

    super.initState();


  }
  _getRecords() async {
    await QuarterData().getQuarters().then((list){
      setState((){
        this. _records = list;
      });
    });
    return list;


  }


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'UI',
        debugShowCheckedModeBanner: false,
        home:  initScreen == 0 || initScreen == null
                  ? SpashScreen(this._records)
                  : QuartersHome(this._records)

               );

  }
}

Большое спасибо

1 Ответ

0 голосов
/ 17 апреля 2020

this._records не инициализируется и будет нулевым, пока ваш запрос не будет выполнен.

Вам необходимо проверить, не равен ли он нулю, прежде чем возвращать свои виджеты вместе с ним (как вы делаете с initScreen)

Если после метода setState() ваша переменная все еще равна нулю, возможно, это ваш запрос, который возвращает ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...