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 按下“打开”按钮不会运行该功能_Flutter_Dart - Fatal编程技术网

Flutter 按下“打开”按钮不会运行该功能

Flutter 按下“打开”按钮不会运行该功能,flutter,dart,Flutter,Dart,我被困在这部分代码中 我为欢迎页面创建了一个文件,为按钮创建了另一个文件 pageNavigation(page) { Navigator.push( context, MaterialPageRoute(builder: (context) => page), ); } 创建按钮很容易,问题出在按下的部分 我创建了一个函数pageNavigation,并尝试在按钮的onPressed部分调用它 pageNavigation(page) { Navigat

我被困在这部分代码中

我为欢迎页面创建了一个文件,为按钮创建了另一个文件

 pageNavigation(page) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => page),
  );
}
创建按钮很容易,问题出在按下的部分

我创建了一个函数pageNavigation,并尝试在按钮的onPressed部分调用它

 pageNavigation(page) {
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => page),
  );
}
但是按钮和欢迎页面在不同的文件中。欢迎浏览网页类别:

    class WelcomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final height = MediaQuery.of(context).size.height;
    final width = MediaQuery.of(context).size.width;

    return Scaffold(
      body: 
          Column(
            children: [
              Button(
                height: height,
                txt: 'Criar conta agora',
                txtStyle: kWhiteButtonTextStyle,
                buttonColor: Colors.transparent,
                onPressed: pageNavigation(LoginPage());
              ),
              Button(
                height: height,
                txt: 'Entrar',
                txtStyle: kBlackButtonTextStyle,
                buttonColor: kWhiteColor,
                onPressed: pageNavitation(CreateAccountPage());
              ),
            ],
          ),
    );
  }
}
因此,我创建了一个名为onPressed的函数变量,并在onPressed按钮文件中调用它。按钮类别:

    class Button extends StatelessWidget implements WelcomePage {
  const Button({
    Key key,
    @required this.height,
    @required this.txt,
    @required this.txtStyle,
    @required this.buttonColor,
    @required this.onPressed
  }) : super(key: key);

  final double height;
  final String txt;
  final TextStyle txtStyle;
  final Color buttonColor;
  final Function onPressed,

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Text(
            txt,
            style: GoogleFonts.rubik(textStyle: txtStyle),
          ),
        ],
      ),
      color: buttonColor,
      padding: EdgeInsets.only(
        top: height * 0.018,
        bottom: height * 0.018,
      ),
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10),
      ),
      onPressed: onPressed,
    );
  }
}

我认为错误可能在button类中,但我不知道如何解决它。

当我对代码进行一些修改后测试代码时,它运行良好。 这是一个完整的代码应用程序

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: _buildBody(),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }

  Widget _buildBody() {
    return WelcomePage();
  }
}

class WelcomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    pageNavigation() {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => Container()),
      );
    }

    final height = MediaQuery.of(context).size.height;
    final width = MediaQuery.of(context).size.width;

    return Scaffold(
      body: Column(
        children: [
          Button(
              height: height,
              txt: 'Criar conta agora',
              buttonColor: Colors.transparent,
              onPressed: pageNavigation),
          Button(height: height, txt: 'Entrar', onPressed: pageNavigation),
        ],
      ),
    );
  }
}

class Button extends StatelessWidget implements WelcomePage {
  const Button({
    Key key,
    @required this.height,
    @required this.txt,
    @required this.txtStyle,
    @required this.buttonColor,
    @required this.onPressed,
  }) : super(key: key);

  final double height;
  final String txt;
  final TextStyle txtStyle;
  final Color buttonColor;
  final Function onPressed;

  @override
  Widget build(BuildContext context) {
    return FlatButton(
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Text(
            txt,
          ),
        ],
      ),
      color: buttonColor,
      padding: EdgeInsets.only(
        top: height * 0.018,
        bottom: height * 0.018,
      ),
      shape: RoundedRectangleBorder(
        borderRadius: BorderRadius.circular(10),
      ),
      onPressed: onPressed,
    );
  }
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:_buildBody(),
浮动操作按钮:浮动操作按钮(
按下:(){},
工具提示:“增量”,
子:图标(Icons.add),
),
);
}
小部件_buildBody(){
返回WelcomePage();
}
}
类WelcomePage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
页面导航(){
导航器。推(
上下文
MaterialPackageRoute(生成器:(上下文)=>Container()),
);
}
最终高度=MediaQuery.of(context).size.height;
最终宽度=MediaQuery.of(context).size.width;
返回脚手架(
正文:专栏(
儿童:[
钮扣(
高度:高度,,
txt:“Criar conta agora”,
按钮颜色:颜色。透明,
按下:页面导航),
按钮(高度:高度,文本:'Entrar',按下:页面导航),
],
),
);
}
}
类按钮扩展无状态小部件实现WelcomePage{
常数按钮({
关键点,
@需要这个高度,
@需要此.txt,
@需要此.txtStyle,
@需要此按钮颜色,
@需要这个。按下按钮,
}):super(key:key);
最终双倍高度;
最终字符串txt;
最终文本样式txtStyle;
最终颜色按钮颜色;
最终功能已按下;
@凌驾
小部件构建(构建上下文){
返回按钮(
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
txt,
),
],
),
颜色:纽扣颜色,
填充:仅限边缘设置(
顶部:高度*0.018,
底部:高度*0.018,
),
形状:圆形矩形边框(
边界半径:边界半径。圆形(10),
),
onPressed:onPressed,
);
}
}

您按下的按钮应如下所示:

    onPressed: () => pageNavigation(LoginPage()),

如果您忘记了
()=>
应用程序将导航到第一条路径,即此处的登录页面

对不起,我在问题中写错了代码,现在它是对的。是的!当我在Navigator.push()中设置一个默认类时,它就工作了,但是我创建了pageNavigation函数来简化代码,在调用该函数时,我只需要将该类作为参数传递。