Flutter:导航到其他页面不起作用

时间:2020-04-18 05:27:57

标签: flutter dart

我在单独的页面上创建了一个AppBar。因此,我可以在需要的地方添加它。 该应用程序栏包含一个弹出菜单。我希望用户从菜单中选择项目,然后它将重定向到该页面。

AppBar.dart

import 'package:flutter/material.dart';
import 'package:fnapp/home_screen.dart';

class Choice {
  const Choice({this.title, this.icon});
  final String title;
  final IconData icon;
}

const List<Choice> choices = const <Choice>[
  const Choice(title: 'Car', icon: Icons.directions_car),
  const Choice(title: 'Bicycle', icon: Icons.directions_bike),
  const Choice(title: 'Boat', icon: Icons.directions_boat),
  const Choice(title: 'Bus', icon: Icons.directions_bus),
  const Choice(title: 'Train', icon: Icons.directions_railway),
  const Choice(title: 'Walk', icon: Icons.directions_walk),
];


class BaseAppBar extends StatelessWidget with PreferredSizeWidget {
  final Color backgroundColor = Colors.red;
   @override
  Widget build(BuildContext context) {

    return AppBar(
      backgroundColor: Colors.transparent,
        elevation: 0.0,
        leading: BackButton(
          color: Colors.black87,
          onPressed: (){//  onPressed: () => Navigator.of(context).pop(),
            print('back pressed');
          },
        ), 
        actions: <Widget>[ 

        PopupMenuButton<Choice>(
              icon: Icon(
                Icons.more_vert,
                color: Colors.black,
              ),
              onSelected: _select,
              itemBuilder: (BuildContext context) {
              return choices.skip(0).map((Choice choice) {
                return PopupMenuItem<Choice>(
                  value: choice,
                  child: Text(choice.title)
                  );
                }).toList();
              },
        ),
        ],

    );

  }

  @override
 // Size get preferredSize => new Size.fromHeight(appBar.preferredSize.height);
  Size get preferredSize => Size.fromHeight(kToolbarHeight);
}
void _select(Choice choice) {
    if(choice.title == 'Bus'){
      print('Bus');
    }else if(choice.title == 'Car'){
     // print('Car');
     _navigateToHome();
    }

  }

_navigateToHome()计划正在使用此功能将其基本上重定向到另一个页面上。

void _navigateToHome(){
    Navigator.of(context).pushReplacement(
      MaterialPageRoute(
        builder: (BuildContext context) => HomeScreen()
      )
    );
  }

HomeScreen()页面已添加到AppBar.dart文件中。

Profile.dart

import 'dart:math';
import 'package:fnapp/appbar.dart';
import 'package:flutter/material.dart';
import 'package:fnapp/util/data.dart';
import 'package:flutter/services.dart';
import 'package:fnapp/home_screen.dart';

class OthersProfile extends StatefulWidget {
  @override
  _ProfileState createState() => _ProfileState();
}

class _ProfileState extends State<OthersProfile> {
  @override
    void _navigateToHome(){
    Navigator.of(context).pushReplacement(
      MaterialPageRoute(
        builder: (BuildContext context) => HomeScreen()
      )
    );
  }
  int currentIndex = 0;
@override
  Widget build(BuildContext context) {

    return Scaffold(

        appBar: BaseAppBar(),

      body:----some long codes here----
),
},
},

我试图甚至在两个文件(AppBar和Profile)中都使用_navigateToHome()函数在Scaffold / Widget构建的内部/外部。 但这给了我下面的错误。

编译器消息:lib / appbar.dart:66:6:错误:找不到方法: '_navigateToHome'。 _navigateToHome();

编译器消息:lib / appbar.dart:88:18:错误:找不到Getter: “上下文”。 Navigator.of(context).pushReplacement(

如何解决此问题?

编辑

在提出建议后,我从功能中删除了下划线。但这仍然给我一个错误。

我从两个文件中都删除了_。我从_Select函数下的AppBar中删除了。但是,给出相同的错误是行不通的。另外,我尝试将Select函数从AppBar移到Profile,但是它也给出了错误。

我认为用户在GitHub上也提出了类似的问题。 https://github.com/flutter/flutter/issues/21728

0 个答案:

没有答案