【发布时间】:2019-12-16 22:22:27
【问题描述】:
当我尝试从子类访问 bloc 时,它给了我一个错误
flutter: ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
flutter: The following assertion was thrown building Builder:
flutter: BlocProvider.of() called with a context that does not contain a Bloc of type
flutter: TopRatedMovieBloc.
flutter: No ancestor could be found starting from the context that was passed to
flutter: BlocProvider.of<TopRatedMovieBloc>().
flutter:
flutter: This can happen if:
flutter: 1. The context you used comes from a widget above the BlocProvider.
flutter: 2. You used MultiBlocProvider and didn't explicity provide the BlocProvider types.
flutter:
flutter: Good: BlocProvider<TopRatedMovieBloc>(builder: (context) => TopRatedMovieBloc())
flutter: Bad: BlocProvider(builder: (context) => TopRatedMovieBloc()).
我的代码如下所示:
**main.dart**
void main() {
final MovieRepository movieRepository = MovieRepository(
movieApiClient: MovieApiClient(
httpClient: http.Client(),
),
);
BlocSupervisor.delegate = SimpleBlocDelegate();
runApp(App(movieRepository: movieRepository),
);
}
class App extends StatelessWidget {
final MovieRepository movieRepository;
App({Key key, @required this.movieRepository})
: assert(movieRepository != null),
super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Infinite Scroll',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue, canvasColor: Colors.transparent),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final MovieRepository movieRepository = MovieRepository(
movieApiClient: MovieApiClient(
httpClient: http.Client(),
),
);
@override
Widget build(BuildContext context) {
return BlocBuilder<ChangeThemeBloc, ChangeThemeState>(
builder: (context, state) {
return Scaffold(body: Container(
color: state.themeData.primaryColor,
child: ListView(
physics: BouncingScrollPhysics(),
children: <Widget>[
DiscoverMovies(
themeData: state.themeData,
),
BlocProvider(
builder: (BuildContext context) =>
TopRatedMovieBloc(movieRepository: movieRepository),
child: ScrollingMovies(
themeData: state.themeData,
title: 'Top Rated',
api: Api.toprated,
),
),
],
),
),
);
},
);
}
}
class ScrollingMovies extends StatefulWidget {
final ThemeData themeData;
final String title;
final Api api;
ScrollingMovies({
this.themeData,
this.api,
this.title,
});
@override
_ScrollingMoviesState createState() => _ScrollingMoviesState();
}
class _ScrollingMoviesState extends State<ScrollingMovies> {
@override
void initState() {
super.initState();
TopRatedMovieBloc _topRatedMovieBloc =
BlocProvider.of<TopRatedMovieBloc>(context);
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[])
}
这行给了我错误:
TopRatedMovieBloc _topRatedMovieBloc = BlocProvider.of<TopRatedMovieBloc>(context);
谁能帮我理解这个问题?
【问题讨论】:
标签: flutter dart flutter-dependencies bloc