Flutter StreamProvider не может обновить состояние виджета. Как мне обойти это?
Я использую StreamProvider, чтобы фиксировать изменения, происходящие в Firestore, и отображать их на домашней странице пользователя. Когда пользователь впервые входит в систему или регистрируется, он направляется на эту домашнюю страницу и ожидает увидеть свои данные, для чего я использую StreamProvider.
Помня, что первое полученное значение будет нулевым, я добавил виджет загрузки текста. Однако виджет, похоже, не изменится, если я не обновлю страницу в горячем режиме и виджет с отслеживанием состояния снова не будет перестроен. Похоже, что происходит то, что виджет с отслеживанием состояния, который я использую в качестве своей домашней страницы, «создается» только один раз, из-за чего, даже когда поток заполняется ненулевыми значениями, виджет загрузки не исчезает, потому что его родительский виджет не исчезает. т перестроить.
Это базовый виджет HomeScreen, вокруг которого я оборачиваю свой StreamProvider.
@Override
Widget build(BuildContext context) {
return StreamProvider<UserDataModel>.value(
initialData: null,
value: DatabaseServices(userDetails: _userDetails).userDataDocument,
updateShouldNotify: (previous, current) => true,
child: Scaffold(
backgroundColor: Colors.white,
body: HomeBody(),
)
);
}
Это соответствующий фрагмент из виджета HomeBody.
class HomeBody extends StatefulWidget {
@override
_HomeBodyState createState() => _HomeBodyState();
}
class _HomeBodyState extends State<HomeBody> {
@override
Widget build(BuildContext context) {
final AuthenticationServices _authServices = AuthenticationServices();
final UserDataModel _data = Provider.of<UserDataModel>(context);
print(_data);
print((_data != null) ? _data.name : 'NULL');
/* Some code */
Row(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(25, 0, 0, 5),
child: Text(_data != null ? _data.name : 'LOADING...', style: dashboardName),
),
],
),
Row(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(25, 2, 0, 5),
child: Text(_data != null ? _data.scholarId : 'LOADING...', style: dashboardName),
),
],
),
Я также заметил, что операторы печати, которые я использовал для отладки, выполняются только после печати этих начальных нулевых значений, пока я не обновляю страницу и не показываю ненулевые значения.
Есть ли способ обойти это? Я застрял на пару дней, не добившись каких-либо значительных успехов, и любые рекомендации были бы признательны.