Flutter中的Button OnPressed功能不起作用。

3

我遇到Raised Button点击的问题。OnPressed()方法内部未被调用。理想情况下,在OnPressed()方法中,我希望弹出一个弹窗或者滑块。我创建了一个示例来展示当前面临的问题。

main.dart文件调用Screen2()

import 'package:flutter/material.dart';
//import 'package:flutter_app/main1.dart';
import 'screen2.dart';

void main() => runApp(Lesson1());

class Lesson1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
  home: Screen2(),
);
}
}

在Screen2()中,我只有一个RaisedButton和OnPressed(),它需要调用ButtonPressed()函数。
import 'package:flutter/material.dart';
class Screen2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    backgroundColor: Colors.blue,
    title: Text('Screen 2'),
  ),
  body: Center(
    child: RaisedButton(
      color: Colors.blue,
      child: Text('Go Back To Screen 1'),
      onPressed: () {
        print('centrebutton');
        ButtonPressed();
      },
    ),
  ),
  );
 }
 }
class ButtonPressed extends StatefulWidget {
@override
_ButtonPressedState createState() => _ButtonPressedState();

}

class _ButtonPressedState extends State<ButtonPressed> {
@override
Widget build(BuildContext context) {
print ('inside button press');

return Scaffold(
  appBar: AppBar(
    backgroundColor: Colors.red,
    title: Text('Screen 3'),
  ),
  // create a popup to show some msg. 
 );
 }
 }

当点击Raised按钮时,将打印语句('centerbutton')。
但是ButtonPressed()方法没有被调用。 我无法在控制台中看到打印信息('inside button press')。请让我知道ButtonPressed方法未被调用的原因。附上快照供您参考。

2个回答

3

您正在在RaisedButton的onPressed方法中调用小部件。您的小部件会被调用,但不会在屏幕上呈现。

您应该在tap事件中调用处理数据的函数。但是您正在调用一个小部件或UI视图。

如果您想导航到相应的屏幕,则应使用导航器。

例如:

onPressed: () {
        print('centrebutton');
        Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => ButtonPressed()));
      },

1
是的,Jay,完全正确。 - Rutvik Gumasana
在底部点击后,我需要显示一个弹出窗口或底部滑块。我不打算导航到另一个屏幕。 - shri
实际上,您可以做到这一点,在Flutter中使用警报对话框小部件和底部滑动块的模态。请查阅官方文档。 - Jay Mungara

0
可能的原因是:如果您的按钮有一个资产作为其子项,而该资产不存在,则按钮的onpressed将无法工作。
解决方案:删除该资产。
示例:
return RaisedButton(
      splashColor: Colors.grey,
      onPressed: () {
       
      },
      child: Padding(
        padding: const EdgeInsets.fromLTRB(0, 10, 0, 10),
        child: Row(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
                Image(image: AssetImage("assets/google_logo.png"), height: 35.0), //remove this line
            Padding(
              padding: const EdgeInsets.only(left: 10),
              child: Text(
                'Sign in with Google',
                style: TextStyle(
                  fontSize: 20,
                  color: Colors.grey,
                ),
              ),
            )
          ],
        ),
      ),
    );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接