flutter - 从 Flutter 中的不同文件创建 TextButton
问题描述
我目前正在 Flutter (dart) 中开发一个应用程序并在这里遇到一些问题。
我正在尝试从单个文件中创建一个按钮,因此我不必在每次需要创建按钮时复制和粘贴代码(相反,我只需要调用我创建的文件并将一些参数传递给它) .
这是我创建的按钮文件:
class RevisedButton extends StatelessWidget {
final String descButton;
final Function press;
final Color color, textColor;
const RevisedButton({
Key key,
this.descButton,
this.press,
this.color,
this.textColor,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Container(
padding: EdgeInsets.all(5),
width: size.width * 0.88,
margin: EdgeInsets.symmetric(vertical: 5),
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(10),
),
child: TextButton(
onPressed: () {
var press;
press = press;
},
child: Text(
descButton,
style: TextStyle(
color: textColor,
fontWeight: FontWeight.bold,
),
),
),
);
}
}
我这样称呼它
RevisedButton(
descButton: 'Login',
color: Color.fromARGB(255, 108, 110, 127),
textColor: Colors.white,
),
我的问题是我不能通过功能按钮来做某事。例如:
RevisedButton(
descButton: 'Login',
color: Color.fromARGB(255, 108, 110, 127),
textColor: Colors.white,
press: {Navigator.push(
context,
MaterialPageRoute(
builder: (context) => WelcomePage(),
),
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Logged In'),
),
);}
),
但是,当我使用原始代码制作按钮本身(不调用文件)时,我可以做到这一点(像这样:
class RevisedButton extends StatelessWidget {
final String descButton;
final Function press;
final Color color, textColor;
const RevisedButton({
Key key,
this.descButton,
this.press,
this.color,
this.textColor,
}) : super(key: key);
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Container(
padding: EdgeInsets.all(5),
width: size.width * 0.88,
margin: EdgeInsets.symmetric(vertical: 5),
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(10),
),
child: TextButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => WelcomePage(),
),
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Logged In'),
),
);
},
child: Text(
descButton,
style: TextStyle(
color: textColor,
fontWeight: FontWeight.bold,
),
),
),
);
}
}
任何人都可以帮助我吗?提前致谢!:)
(如果有帮助,我正在使用 VSCode)
解决方案
进行此更改
...
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(10),
),
child: TextButton(
// Change to this..
onPressed: press,
child: Text(
descButton,
style: TextStyle(
...
当调用它时
RevisedButton(
descButton: 'Login',
color: Color.fromARGB(255, 108, 110, 127),
textColor: Colors.white,
//Add a closed bracket
press: () {Navigator.push(
context,
MaterialPageRoute(
builder: (context) => WelcomePage(),
),
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Logged In'),
),
);}
),
推荐阅读
- html - HTML“升级不安全请求”中的错误
- vue.js - Axios API 调用未能将完整的数组响应保存到变量中
- android - 当条件多个布局应用于单个活动时管理单个数据绑定对象
- javascript - 自动播放带有 cookie 状态的音频播放器。快完成了,需要代码帮助来完成
- android - 当我的应用程序处于调试状态时,一个好的做法是否有一个不检查安全问题的参数?
- sql - SQL json_array_get - 搜索对象而不是位置
- bash - 当我重新安装 postgresql helm 图表时,我的数据库不断被删除
- symfony5 - 创建一个服务只是为了帮助您的测试?
- php - Monolog : 大文件加载问题
- installation - 你如何构建所有的 LLVM?