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
Flutter 平面按钮。图标';为什么不打电话?_Flutter_Flutter Layout - Fatal编程技术网

Flutter 平面按钮。图标';为什么不打电话?

Flutter 平面按钮。图标';为什么不打电话?,flutter,flutter-layout,Flutter,Flutter Layout,如果我在脚手架的主体下放置一个扁平按钮。图标,那么它的按钮几乎永远不会被调用?是否存在与按下按钮时图标的相关错误 以下是我的代码: // My main.dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) {

如果我在
脚手架的
主体下放置一个
扁平按钮。图标
,那么它的
按钮几乎永远不会被调用?是否存在与按下按钮时图标的相关错误

以下是我的代码:

// My main.dart
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routes: {
        '/': (context) => Loading(),
        '/home': (context) => Home(),
      },
    );
  }
}

class Loading extends StatefulWidget {
  @override
  _LoadingState createState() => _LoadingState();
}

class _LoadingState extends State<Loading> {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Navigator.of(context).pushReplacementNamed('/home');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading screen'),
      ),
    );
  }
}


class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: FlatButton.icon(
          icon: Icon(Icons.arrow_right, size: 60.0),
          label: Text('press', style: TextStyle(fontSize: 40.0)),
          onPressed: () {
            // This almost never gets called. I have to press a lot many times to get the below print statement to execute.
            print('Button pressed to go to location widget');
            Navigator.pushReplacementNamed(context, '/');
          },
        ),
      ),
    );
  }
}
//My main.dart
进口“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
路线:{
“/”:(上下文)=>Loading(),
“/home”:(上下文)=>home(),
},
);
}
}
类加载扩展了StatefulWidget{
@凌驾
_LoadingState createState()=>\u LoadingState();
}
类_LoadingState扩展状态{
@凌驾
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback((){
Navigator.of(context.pushReplacementNamed('/home');
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“加载屏幕”),
),
);
}
}
类Home扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
正文:中(
子:FlatButton.icon(
图标:图标(Icons.arrow_right,大小:60.0),
标签:文本('press',样式:TextStyle(fontSize:40.0)),
已按下:(){
//这几乎从未被调用。我必须多次按下才能执行下面的print语句。
打印(“按下按钮进入位置小部件”);
pushReplacementNamed(上下文“/”);
},
),
),
);
}
}
问题:
问题是,
FlatButton
onPressed
几乎从未在上述代码中调用过。如果我多次按下按钮,它确实会被调用。很奇怪!上面我错了什么?我正在做的事情有没有让我灰心丧气

环境:

// My main.dart
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routes: {
        '/': (context) => Loading(),
        '/home': (context) => Home(),
      },
    );
  }
}

class Loading extends StatefulWidget {
  @override
  _LoadingState createState() => _LoadingState();
}

class _LoadingState extends State<Loading> {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      Navigator.of(context).pushReplacementNamed('/home');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Loading screen'),
      ),
    );
  }
}


class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Center(
        child: FlatButton.icon(
          icon: Icon(Icons.arrow_right, size: 60.0),
          label: Text('press', style: TextStyle(fontSize: 40.0)),
          onPressed: () {
            // This almost never gets called. I have to press a lot many times to get the below print statement to execute.
            print('Button pressed to go to location widget');
            Navigator.pushReplacementNamed(context, '/');
          },
        ),
      ),
    );
  }
}
  • 马科斯大苏尔
  • 运行<代码>颤振-版本<代码>的输出为:
颤振1.26.0-1.0.pre•通道偏差• 框架•修订版63062a6443 (2周前)•2020-12-13 23:19:13+0800发动机•版本4797b06652 工具•Dart 2.12.0(构建2.12.0-141.0.dev)

编辑:

@Alwin Brauns在下面建议说,
FlatButton
已经过时,应该改用
TextButton
。这是一个很好的信息,但是使用
文本按钮也会出现同样的问题。

平面按钮已经过时。改为使用文本按钮。TextButton.icon


扁平按钮已过时。改为使用文本按钮。TextButton.icon

事实上,我曾尝试在一个新项目中运行您的全部代码,它对我来说效果很好

我得到的唯一错误是由于这行
code

    Navigator.pushReplacementNamed(context, '/choose_location');
    Navigator.pushReplacementNamed(context, '/');
由于没有名为
/Choose_location
的路由,因此在这种情况下它必须显示错误

因此,我用这行代码替换了它

    Navigator.pushReplacementNamed(context, '/choose_location');
    Navigator.pushReplacementNamed(context, '/');
它的工作原理如下图所示

事实上,我曾尝试在一个新项目中运行您的全部代码,它对我来说效果很好

我得到的唯一错误是由于这行
code

    Navigator.pushReplacementNamed(context, '/choose_location');
    Navigator.pushReplacementNamed(context, '/');
由于没有名为
/Choose_location
的路由,因此在这种情况下它必须显示错误

因此,我用这行代码替换了它

    Navigator.pushReplacementNamed(context, '/choose_location');
    Navigator.pushReplacementNamed(context, '/');
它的工作原理如下图所示


哦!谢谢你的欢迎!希望它能起作用。是的。啊,弗利特的家伙们应该在这类事情上添加一个不推荐的警告或一些指示。再次非常感谢。对不起。我这边的速度太快了。在代码中使用
TextButton
,也会出现同样的问题。但是,你还是提供了一个很好的信息。我想知道我拥有的这么简单的一段代码有什么问题。试着把它装在墨水瓶里,也许这样行得通。或者手势检测器哦!谢谢你的欢迎!希望它能起作用。是的。啊,弗利特的家伙们应该在这类事情上添加一个不推荐的警告或一些指示。再次非常感谢。对不起。我这边的速度太快了。在代码中使用
TextButton
,也会出现同样的问题。但是,你还是提供了一个很好的信息。我想知道我拥有的这么简单的一段代码有什么问题。试着把它装在墨水瓶里,也许这样行得通。我无法想象这么简单的一段代码有什么问题。你的代码在Dart pad和我的一个新的Flatter项目中工作过。我无法想象这么简单的代码有什么问题。有没有一些bugs Flatter 1.26和macOS Big Sur?你的代码在Dart pad和一个新的Flatter项目中为我工作过。谢谢你的更正Mukul。我的代码在macOS上有些奇怪。谢谢你的更正。我的代码在macOS上有些奇怪。