Мое приложение управляет Authentication
статусами, используя Streams
. Основная идея c заключается в том, что я создаю StreamBuilder
, который возвращает определенный виджет при определенном состоянии аутентификации.
Как загрузить эти виджеты с анимацией, подобной, снизу вверх, непрозрачность и т. Д. c. Я знаю, что это может быть достигнуто с помощью Navigator, но я не могу использовать это в этом случае. Так как StreamBuilders требует вернуть виджет. Вот псевдокод:
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
Виджет Home, который загружает другой виджет на основе AuthStatus:
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<AuthStatus>(
stream: Provider.of<AuthService>(context).stream(),
builder: (ctx, snapshot) {
if (!snapshot.hasData) {
return LoadingPage();
}
if (snapshot.data == AuthStatus.authenticated) {
return DashboardPage();
} else if (snapshot.data == AuthStatus.unauthenticated) {
return LoginPage();
} else {
return LoadingPage();
}
},
);
}
}
Я хотел бы загрузить LoginPage (), DashboardPage () с анимация. Но я не уверен, как это сделать.
Я пытался слушать поток и нажимать sh на навигатор в приемнике, но этот виджет постоянно продолжал собираться и переходить к навигатору. Вот псевдо-код:
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
Provider.of<AuthStatus>(context).listen((data) {
switch (data) {
case AuthStatus.authenticated:
Navigator.push(context, MaterialPageRoute(builder: (ctx) => DashboardParge()));
break;
case AuthStatus.unauthenticated:
Navigator.push(context, MaterialPageRoute(builder: (ctx) => LoginPage()));
break;
default:
Navigator.push(context, MaterialPageRoute(builder: (ctx) => LoadingPage()));
break;
}
});
return LoadingPage();
}
}
Это постоянно восстанавливает. Поток rxdart BehaviorSubject()
. Методы build () вызываются многократно, даже если в поток не добавлены данные.