Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Function 如何将按钮单击传递给另一页上的函数?_Function_Flutter_Arguments_Pass By Reference - Fatal编程技术网

Function 如何将按钮单击传递给另一页上的函数?

Function 如何将按钮单击传递给另一页上的函数?,function,flutter,arguments,pass-by-reference,Function,Flutter,Arguments,Pass By Reference,我试着在另一节课上通过一个简单的按键来完成一些动作。关键是使用一个页面来实现几个不同的功能,而不是每个功能都有一个页面 现在,textDeclaration页面的导航工作正常,但我无法使用正确的函数来完成它的工作 如果我按下第一个按钮,来自FirstButton小部件的信息应该显示在textDeclaration页面上,如果我按下第二个按钮,来自SecondButton小部件的信息应该在displayText页面上弹出 主要内容: 主页: import 'package:flutter/mate

我试着在另一节课上通过一个简单的按键来完成一些动作。关键是使用一个页面来实现几个不同的功能,而不是每个功能都有一个页面

现在,textDeclaration页面的导航工作正常,但我无法使用正确的函数来完成它的工作

如果我按下第一个按钮,来自FirstButton小部件的信息应该显示在textDeclaration页面上,如果我按下第二个按钮,来自SecondButton小部件的信息应该在displayText页面上弹出

主要内容:

主页:

import 'package:flutter/material.dart';
import 'textDeclaration.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Function buttonChoice;

  Widget outlineButton(String buttonName) {
    return SizedBox(
      height: 60.0,
      width: 225.0,
      child: OutlineButton(
          highlightedBorderColor: Colors.lightBlueAccent,
          child: Text(buttonName,
              style: TextStyle(fontSize: 17.0, fontWeight: 
FontWeight.bold)),
          borderSide: BorderSide(
            color: Colors.blue,
            width: 2.0,
          ),
          onPressed: () {
            navigate(buttonName, buttonChoice);
          }),
    );
  }

  void navigate(String buttonName, Function buttonChoice) {
    setState(() {
      Navigator.of(context).popUntil(ModalRoute.withName('/'));
      Navigator.of(context).push(MaterialPageRoute(
          builder: (context) => TextDeclaration(
                buttonName: buttonName,
                buttonChoice: buttonChoice,
              )));
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('HOME PAGE')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            outlineButton('First Button'),
            outlineButton('Second Button'),
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“textDeclaration.dart”;
类主页扩展了StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
功能钮扣;
小部件大纲按钮(字符串按钮名称){
返回大小框(
身高:60.0,
宽度:225.0,
孩子:大纲按钮(
highlightedBorderColor:Colors.lightBlueAccent,
子:文本(按钮名称,
样式:TextStyle(fontSize:17.0,fontWeight:
FontWeight.bold),
边界边(
颜色:颜色,蓝色,
宽度:2.0,
),
已按下:(){
导航(按钮名称、按钮提示);
}),
);
}
无效导航(字符串按钮名称、函数按钮名称){
设置状态(){
Navigator.of(context.popintil)(ModalRoute.withName('/');
导航器.of(上下文).push(MaterialPageRoute(
生成器:(上下文)=>TextDeclaration(
buttonName:buttonName,
钮扣颜色:钮扣颜色,
)));
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“主页”),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
大纲按钮(“第一个按钮”),
大纲按钮(“第二个按钮”),
],
),
),
);
}
}
文本声明页面:

import 'package:flutter/material.dart';

class TextDeclaration extends StatefulWidget {
  final String buttonName;
  final Function buttonChoice;

  TextDeclaration({this.buttonName, this.buttonChoice});

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

class _TextDeclarationState extends State<TextDeclaration> {
  String buttonName = "";

  buttonChoice(String buttonName) {
    if (buttonName == 'First Button') {
      firstButton(buttonName);
    } else if (buttonName == 'Second Button') {
      secondButton(buttonName);
    }
  }

  Widget firstButton(buttonName) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Button'),
      ),
      body: Center(
        child: Container(
          height: 200.0,
          width: 200.0,
          child: Center(child: Text('First Button Text')),
        ),
      ),
    );
  }

  Widget secondButton(buttonName) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Button'),
      ),
      body: Center(
        child: SizedBox(
          height: 200.0,
          width: 200.0,
          child: Center(
            child: Text('Second Button Text'),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Colors.blue),
      child: buttonChoice(buttonName),
    );
  }
}
导入“包装:颤振/材料.省道”;
类TextDeclaration扩展了StatefulWidget{
最终字符串按钮名;
最终功能按钮;
TextDeclaration({this.buttonName,this.buttonChoice});
@凌驾
_TextDeclarationState createState()=>\u TextDeclarationState();
}
类_TextDeclarationState扩展状态{
字符串buttonName=“”;
按钮名称(字符串按钮名称){
如果(buttonName==“第一个按钮”){
第一个按钮(按钮名称);
}否则如果(buttonName==“第二个按钮”){
第二个按钮(按钮名称);
}
}
小部件第一个按钮(按钮名称){
返回脚手架(
appBar:appBar(
标题:文本(“第一个按钮”),
),
正文:中(
子:容器(
高度:200.0,
宽度:200.0,
子:居中(子:文本(“第一个按钮文本”),
),
),
);
}
小部件第二个按钮(按钮名称){
返回脚手架(
appBar:appBar(
标题:文本(“第二个按钮”),
),
正文:中(
孩子:大小盒子(
高度:200.0,
宽度:200.0,
儿童:中心(
子项:文本(“第二个按钮文本”),
),
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回容器(
装饰:盒子装饰(颜色:颜色。蓝色),
孩子:buttonChoice(buttonName),
);
}
}
代码运行,但来自不同按钮的函数无法工作


任何帮助都将是巨大的,因为我已经被困在这个很长一段时间了。谢谢。

尝试传递另一个“FirstButton”参数,我认为您缺少outline函数的另一个参数,您只传递buttonName,buttonFunction Too,因为您非常关注要添加的字符串,如果我没有弄错,请将“function”buttonChoice更改为“String”,当你点击第二页的按钮时,你想在你的主类中调用一个函数吗?我正在尝试Fellipe,但事情是这样的so@nick.tdr. 我提出了我的问题,希望澄清我的问题。谢谢您的时间。尝试传递另一个“FirstButton”参数,我认为您缺少大纲函数的另一个参数,您只传递buttonName,buttonFunction Too,因为您非常关注要添加的字符串,如果我正确,请将“function”buttonChoice更改为“String”,当你点击第二页的按钮时,你想在你的主类中调用一个函数吗?我正在尝试Fellipe,但事情是这样的so@nick.tdr. 我提出了我的问题,希望澄清我的问题。谢谢你抽出时间。
import 'package:flutter/material.dart';

class TextDeclaration extends StatefulWidget {
  final String buttonName;
  final Function buttonChoice;

  TextDeclaration({this.buttonName, this.buttonChoice});

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

class _TextDeclarationState extends State<TextDeclaration> {
  String buttonName = "";

  buttonChoice(String buttonName) {
    if (buttonName == 'First Button') {
      firstButton(buttonName);
    } else if (buttonName == 'Second Button') {
      secondButton(buttonName);
    }
  }

  Widget firstButton(buttonName) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Button'),
      ),
      body: Center(
        child: Container(
          height: 200.0,
          width: 200.0,
          child: Center(child: Text('First Button Text')),
        ),
      ),
    );
  }

  Widget secondButton(buttonName) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Button'),
      ),
      body: Center(
        child: SizedBox(
          height: 200.0,
          width: 200.0,
          child: Center(
            child: Text('Second Button Text'),
          ),
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(color: Colors.blue),
      child: buttonChoice(buttonName),
    );
  }
}