凸起的按钮OnPressed()在Flutter中不起作用

时间:2019-12-09 05:58:22

标签: flutter dart

我对“加高”按钮的单击有疑问。 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. 
 );
 }
 }

单击``升高''按钮后,打印语句(``centerbutton'')将被打印。
但是ButtonPressed()方法没有被调用。 我在控制台中看不到打印消息(“按下内部按钮”)。 Pl。让我看看ButtonPressed方法没有被调用的原因可能是什么。随附快照以供参考。

2 个答案:

答案 0 :(得分:2)

您正在RaisedButton的onPressed方法上调用小部件。您的小部件正在被调用,但无法在屏幕上的任何位置呈现。

您应该在点击事件中调用一个函数来处理数据。但是您正在调用小部件或说出UI视图。

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

例如:

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

答案 1 :(得分:0)

这可能是一个原因:如果您有一个资产作为按钮的子级,而该资产不存在,则按下的按钮将无法工作。

解决方案:移除资产。

示例:

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,
                ),
              ),
            )
          ],
        ),
      ),
    );