Flutter Siderbar不';t使用onTap()更改屏幕
我对侧边栏菜单有问题。在Flutter Siderbar不';t使用onTap()更改屏幕,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我对侧边栏菜单有问题。在菜单项中,onTap不会更改屏幕。出了什么问题,我该如何解决?我认为问题出在NavigationStates get initialState=>HomePage();(在侧边栏布局中),因为它始终是默认设置的主页。我需要initialState,否则create:(context)=>NavigationBloc(initialState),会给出错误,因为它需要一个参数。我怎样才能把它全部修好 这是菜单项 MenuItem( icon: Icons.ho
菜单项中,onTap不会更改屏幕。出了什么问题,我该如何解决?我认为问题出在NavigationStates get initialState=>HomePage();(在侧边栏布局中)
,因为它始终是默认设置的主页。我需要initialState
,否则create:(context)=>NavigationBloc(initialState),
会给出错误,因为它需要一个参数。我怎样才能把它全部修好
这是菜单项
MenuItem(
icon: Icons.home,
title: "HomePage",
onTap: (){
print("test");
onIconPressed();
BlocProvider.of<NavigationBloc> (context).add(NavigationEvents.HomePageClickedEvents);
}
),
MenuItem(
图标:Icons.home,
标题:“主页”,
onTap:(){
打印(“测试”);
onIconPressed();
BlocProvider.of(context).add(NavigationEvents.HomePageClickedEvents);
}
),
这是侧边栏布局
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:solaris/pages/homepage.dart';
import '../bloc.navigation_bloc/navigation_bloc.dart';
import 'sidebar.dart';
class SideBarLayout extends StatelessWidget {
NavigationStates get initialState => HomePage();
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocProvider<NavigationBloc>(
create: (context) => NavigationBloc(initialState),
child: Stack(
children: <Widget>[
BlocBuilder<NavigationBloc, NavigationStates>(
builder: (context, navigationState) {
return navigationState as Widget;
},
),
SideBar(),
],
),
),
);
}
}
导入“包装:颤振/材料.省道”;
进口“包装:颤振团/颤振团.飞镖”;
导入“包:solaris/pages/homepage.dart”;
导入“../bloc.navigation\u bloc/navigation\u bloc.dart”;
导入“侧边栏.省道”;
类SideBarLayout扩展了无状态小部件{
NavigationStates获取initialState=>HomePage();
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:BlocProvider(
创建:(上下文)=>NavigationBloc(初始状态),
子:堆栈(
儿童:[
BlocBuilder(
生成器:(上下文,导航状态){
返回navigationState作为小部件;
},
),
边栏(),
],
),
),
);
}
}
这是导航组
import 'package:bloc/bloc.dart';
import '../pages/homepage.dart';
import '../pages/secondpage.dart';
import '../pages/thirdpage.dart';
enum NavigationEvents {
HomePageClickedEvents,
SecondPageClickedEvents,
ThirdPageClickedEvents,
}
abstract class NavigationStates{}
class NavigationBloc extends Bloc<NavigationEvents, NavigationStates>{
NavigationBloc(NavigationStates initialState) : super(initialState);
@override
NavigationStates get initialState => HomePage();
@override
Stream<NavigationStates> mapEventToState(NavigationEvents event) async*{
switch(event){
case NavigationEvents.HomePageClickedEvents:
yield HomePage();
break;
case NavigationEvents.SecondPageClickedEvents:
yield SecondPage();
break;
case NavigationEvents.ThirdPageClickedEvents:
yield ThirdPage();
break;
}
}
}
import'包:bloc/bloc.dart';
导入“../pages/homepage.dart”;
导入“../pages/secondpage.dart”;
导入“../pages/thirdpage.dart”;
枚举导航事件{
主页单击事件,
第二页单击事件,
第三页单击事件,
}
抽象类导航状态{}
类NavigationBloc扩展了Bloc{
NavigationBloc(NavigationStates初始状态):超级(初始状态);
@凌驾
NavigationStates获取initialState=>HomePage();
@凌驾
流mapEventToState(NavigationEvents事件)异步*{
开关(事件){
案例导航事件。主页单击事件:
收益率();
打破
案例导航事件。第二页单击事件:
产生第二页();
打破
案例导航事件。第三页单击事件:
产生第三页();
打破
}
}
}
您需要删除@override NavigationStates get initialState=>HomePage()代码>因为它已弃用且
然后在SidebarLayout中,您需要像这样添加到NavigationBloc构造函数
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocProvider<NavigationBloc>(
create: (context) => NavigationBloc(Home()),
child: Stack(
children: [
BlocBuilder<NavigationBloc, NavigationStates>(
builder: (context, navigationStates) {
return navigationStates as Widget;
}),
SideBar(),
],
),
),
);
}
@覆盖
小部件构建(构建上下文){
返回脚手架(
正文:BlocProvider(
create:(context)=>NavigationBloc(Home()),
子:堆栈(
儿童:[
BlocBuilder(
生成器:(上下文、导航状态){
返回导航状态作为小部件;
}),
边栏(),
],
),
),
);
}
检查我的Github,它将帮助您。
如果有用,给我“有用”