Я использую собственный маршрут для создания эффекта перехода, но у меня возникли проблемы со значением, использующим Provider
.
Ошибка
Another exception was thrown: Error: Could not find the correct Provider<List<FireFavorites>> above this Favorites Widget
home.dart
return MultiProvider(
providers: [
StreamProvider.value(
value: db.streamFavorites(user.uid),
)
],
child: Scaffold(
body: StreamBuilder<NavBarItem>(
stream: _bottomNavBarBloc.itemStream,
initialData: _bottomNavBarBloc.defaultItem,
builder: (BuildContext context, AsyncSnapshot<NavBarItem> snapshot) {
switch (snapshot.data) {
case NavBarItem.SEARCH:
return Search();
case NavBarItem.BROWSE:
return Browse();
case NavBarItem.ICON:
return About();
case NavBarItem.FAVORITES:
return Favorites();
case NavBarItem.SETTINGS:
return Settings();
default:
return null;
}
},
),
bottomNavigationBar: ConvexBottomNav(navBarHandler: _navBarHandler),
),
);
}
класс пользовательского маршрута
class MyCustomPageRoute extends MaterialPageRoute {
final Widget previousPage;
MyCustomPageRoute(
{this.previousPage, WidgetBuilder builder, RouteSettings settings})
: super(builder: builder, settings: settings);
@override
Widget buildTransitions(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation, Widget currentPage) {
Animation<Offset> _slideAnimationPage1 =
Tween<Offset>(begin: Offset(0.0, 0.0), end: Offset(-1.0, 0.0))
.animate(animation);
Animation<Offset> _slideAnimationPage2 =
Tween<Offset>(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0))
.animate(animation);
return Stack(
children: <Widget>[
SlideTransition(position: _slideAnimationPage1, child: previousPage),
SlideTransition(position: _slideAnimationPage2, child: currentPage),
],
);
}
}
с использованием такого класса, который находится в Browse()
. Я просто хочу перейти к документу. Но использование MyCustomPageRoute
вызывает ошибку Provider
.
Navigator.push(
context,
MyCustomPageRoute(
previousPage: this,
builder: (context) => Document(
documentID: docid,
),
),
);
Я хотел бы иметь избранное StreamProvider
в main.dart, но у меня нет доступа к uid
аутентифицированного пользователя там, или я не знаю, как получить к нему доступ после того, как он станет доступен. Ниже показано, как я настроил Provider
в main.dart
. Я могу просто сделать простой запрос в home.dart
, получить избранное и добавить их в Content()
и получить к ним доступ во всем приложении, но я бы хотел иметь поток.
main.dart
return MultiProvider(
providers: [
StreamProvider<FirebaseUser>.value(
value: FirebaseAuth.instance.onAuthStateChanged,
),
ChangeNotifierProvider<Content>.value(
value: Content(),
),
],
child: MaterialApp(
title: '',
theme: ThemeData(
fontFamily: 'OpenSans',
brightness: Brightness.light,
primaryColor: Color(0xff2398C3),
),
home: WelcomePage(),
),
);
Есть идеи, как это исправить?