【发布时间】:2021-07-29 15:46:20
【问题描述】:
我在一个小应用程序中使用了 Flutter 和 flutter_bloc,我使用 MultiBlocProvider 在主页中使用了我需要的多个 BlocProvider,在主页下,有一个 MainWidget,它可以通过以下方式轻松访问给定的 Bloc: BlocProvider.of<OldBloc>(context)
MainWidget 通过以下方式调用 NewWidget 作为对话框:showDialog(context: context, builder: (context) => NewWidget())
问题是,我无法从 NewWidget() 访问 OldBloc,所以我假设 MainWidget 在使用 showDialog 时没有将其上下文传递给 NewWidget?
HomeScreen.dart
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => OldBloc()..add(Initialize()),
),
BlocProvider(
create: (context) => OtherBloc()..add(Initialize()),
),
],
child: Stack(
children: [
MainWidget(),
MenuWidget(),
],
),
));
}
}
MainWidget.dart
import 'package:flutter/material.dart';
class MainWidget extends StatelessWidget {
const MainWidget({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextField(onTap: () => showDialog(context: context, builder: (context) => NewWidget()));
}
}
NewWidget.dart
import 'package:flutter/material.dart';
class NewWidget extends StatelessWidget {
const NewWidget({Key key}) : super(key: key);
@override
Widget build(context) {
return Text(BlocProvider.of<OldBloc>(context).name); // <------- THIS GIVES AN ERROR THAT IT CANT FIND A BLOC OF THE TYPE OldBloc
}
}
【问题讨论】:
标签: flutter flutter-bloc