Круговая загрузка перед загрузкой страницы Флаттер - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть список виджетов и функция, которая возвращает Контейнер, говорящий пользователю добавить его в список, если список виджетов пуст:

_isCountEmpty() {
      if (count == 0 || count == null) {
   //if no widgets in list
        return Container(
            color: Colors.black,
            child: Text('Press edit to start adding exercises',
                style: TextStyle(
                  fontSize: 40,
                  color: Colors.white,
                )));
      }
   //if widgets in list

      return ListView(
        children: children,
        scrollDirection: Axis.vertical,
      );
    }

initState, где получено количество:

 void initState() {
getCount().then(updateCount);
super.initState(); }

Значение счетчика получено с другой страницы с использованием общих настроек, которые вызываются в моем initState. До того, как значение счетчика получено в initState, экран думает, что значение счетчика равно нулю, поэтому в течение всего доли секунды Container () возвращается непосредственно перед ListView. Вместо этого я хочу, чтобы циклический индикатор отображался, пока экран получает значение count из initState, а затем возвращал Container или ListView после получения значения для счетчика

Спасибо

1 Ответ

1 голос
/ 11 апреля 2020

Вы можете попробовать следующий код, который будет загружать ваш счетчик из общих настроек, затем вы можете заменить виджет Текст на любой список или контейнер, если counter == 0 || counter == null

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  int counter;
  Future<SharedPreferences> prefs;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
          child: FutureBuilder(
        future: prefs,
        builder: (context, AsyncSnapshot<SharedPreferences> snapshot) {
          if (!snapshot.hasData) {
            return CircularProgressIndicator();
          } else {
            counter = snapshot.data.getInt("counter");
            //Replace with whatever widget you want
            return Text("Loading is done your counter is : $counter");
          }
        },
      )),
    );
  }

  @override
  void initState() {
    super.initState();
    prefs = SharedPreferences.getInstance();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...