Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Siderbar不';t使用onTap()更改屏幕_Flutter_Dart_Flutter Layout - Fatal编程技术网

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,它将帮助您。 如果有用,给我“有用”