如何解决flutter_bloc,bloc_provider无法与底部工作表一起使用
问题
我用以下文件复制了问题。该应用程序有一个菜单。菜单是一个内部带有按钮的modalBottomSheet。该按钮从肘部调用方法,该方法向主屏幕发出状态。在这种情况下,当BlocListener检测到状态时,它将显示一个小吃店。 Bloc在整个应用程序中与BlocProvider共享。
该按钮仅在第一次使用。然后它不再起作用。为什么?我该如何解决?
依赖项
Flutter_bloc: ^6.0.3
equatable: ^0.2.0
Meta: ^1.1.6
main.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: BlocProvider(
create: (_) => TestCubit(),child: MainScreen(),);
}
}
main_screen.dart
class MainScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocListener(
cubit: context.bloc<TestCubit>(),listener: (context,state) {
if (state is TestStateSnackBar) {
final snackBar = SnackBar(content: Text("I only work once"));
Scaffold.of(context).showSnackBar(snackBar);
}
},child: Center(
child: Flutterlogo(),)),bottomNavigationBar: BottomAppBar(
child: Row(
children: [
IconButton(
icon: Icon(Icons.menu),onpressed: () => showModalBottomSheet(
context: context,builder: (_) => BlocProvider(
create: (_) => context.bloc<TestCubit>(),child: Menu(),)
],);
}
}
menu.dart
class Menu extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListTile(
title: FlatButton(
child: Text("Click to show snack bar"),onpressed: () => context.bloc<TestCubit>().showSnackBar(),);
}
test_cubit.dart
class TestCubit extends Cubit<TestState>{
TestCubit() : super(TestStateInitial());
showSnackBar() => emit(TestStateSnackBar());
}
test_state.dart
@immutable
abstract class TestState extends Equatable {
TestState([List props = const []]) : super(props);
}
class TestStateInitial extends TestState {
@override
String toString() => 'Test Initial';
}
class TestStateSnackBar extends TestState {
@override
String toString() => 'Test SnackBar';
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。