Flutter:在选择时重定向PopupMenuButton页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter:在选择时重定向PopupMenuButton页面相关的知识,希望对你有一定的参考价值。

我对Flutter非常陌生。我正在学习。也许我的问题听起来很愚蠢。我正在尝试创建一个当前创建的弹出栏。我想根据选择将其重定向到其他页面。我在管理onselected

时遇到了麻烦

我在SO上检查了一些问题,但是没有找到关于它如何工作的任何解释,也检查了一些网站,但并不能正确理解。

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Choice _selectedChoice = choices[0];

  @override
  Widget build(BuildContext context) {
    var title = "AppBar demo";
    return MaterialApp(
      title: title,
      home: Scaffold(
        appBar: AppBar(
          title: Text(title),
          actions: <Widget>[
            IconButton(
              icon: Icon(choices[0].icon),
              onPressed: () {
                _select(choices[0]);
              },
            ),
            IconButton(
              icon: Icon(choices[1].icon),
              onPressed: () {
                _select(choices[1]);
              },
            ),
            PopupMenuButton<Choice>(
              onSelected: _select,
              itemBuilder: (BuildContext context) {
              return choices.skip(2).map((Choice choice) {
                return PopupMenuItem<Choice>(
                  value: choice,
                  child: Text(choice.title)
                  );
                }).toList();
              },
            ),
          ],
        ),
        body: ChoiceCard(choice: _selectedChoice),
      ),
    );
  }

  void _select(Choice choice) {
    setState(() {
      _selectedChoice = choice;
    });
  }
}

class ChoiceCard extends StatelessWidget {
  final Choice choice;

  const ChoiceCard({Key key, this.choice}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    var textStyle = Theme.of(context).textTheme.display1;
    return Padding(
      padding: const EdgeInsets.all(0.0),
      child: Card(
        child: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              Icon(
                choice.icon,
                size: 128.0,
              ),
              Text(choice.title, style: textStyle)
            ],
          ),
        ),
      ),
    );
  }
}

class Choice {
  const Choice({this.title, this.icon});

  final String title;
  final IconData icon;
}

const List<Choice> choices = const <Choice>[
  const Choice(title: 'Car', icon: Icons.directions_car),
  const Choice(title: 'Bicycle', icon: Icons.directions_bike),
  const Choice(title: 'Boat', icon: Icons.directions_boat),
  const Choice(title: 'Bus', icon: Icons.directions_bus),
  const Choice(title: 'Train', icon: Icons.directions_railway),
  const Choice(title: 'Walk', icon: Icons.directions_walk),
];

请告知我需要在哪里定义其他页面/小部件/课程的详细信息。还有在这种情况下onselect的工作方式。

谢谢

我对Flutter非常陌生。我正在学习。也许我的问题听起来很愚蠢。我正在尝试创建一个当前创建的弹出栏。我想根据...

答案

每次选择PopUpMenuItem时,onSelected:无效函数_select都会使用参数value: choice进行调用>

[使用setState()Statefull类_MyAppState更新为新值_selectedChoice

另一答案

我尝试使用下面的代码修复它。

以上是关于Flutter:在选择时重定向PopupMenuButton页面的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Getx Flutter 中获取布尔值

需要帮助在提交时重定向表单

JavaScript 选择下拉项目时重定向到页面

Laravel 在区域设置更改时重定向到路由

javascript 加载的局部视图 MVC 中发生错误时重定向到错误页面

在 ASP.NET Core 中未经授权时重定向到登录