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