1

根据 List distinctEmnen 中的条目数,我想显示可变数量的菜单选项。有可能实现这样的目标吗?

CupertinoActionSheet(
              title: Text( tjo),
              actions: [
                  CupertinoActionSheetAction(
                      child: Text( distinctEmnen[0]),
                        Navigator.of(context).pushNamed(distinctEmnen[0]);
                      }),
                  CupertinoActionSheetAction(
                      child: Text( distinctEmnen[1]),
                      onPressed: () { 
                        Navigator.of(context).pushNamed(distinctEmnen[1]);
                      }),

                  CupertinoActionSheetAction(
                      child: Text( distinctEmnen[n...]),
                      onPressed: () { 
                        Navigator.of(context).pushNamed(distinctEmnen[n...]);
                      }),

              ],
              cancelButton: CupertinoActionSheetAction(
                child: Text('Cancel'),
                onPressed: () => Navigator.of(context).pop(),
              ),
            ),

4

1 回答 1

1

您可以在下面复制粘贴运行完整代码
第 1 步:您可以定义一个类Emnen
第 2 步:初始化List<Emnen> distinctEmnen
第 3 步:使用List<Widget>.generate(distinctEmnen.length,

代码片段

class Emnen {
  String title;
  String routeName;

  Emnen({this.title, this.routeName});
}
...
List<Emnen> distinctEmnen = [];
...
  @override
  void initState() {
    distinctEmnen = [
      Emnen(title: "1", routeName: "/1"),
      Emnen(title: "2", routeName: "/2")
    ];
    super.initState();
  }
...  
CupertinoActionSheet(
      title: Text("tjo"),
      actions: List<Widget>.generate(
          distinctEmnen.length,
          (int index) => CupertinoActionSheetAction(
              child: Text(distinctEmnen[index].title),
              onPressed: () => Navigator.of(context)
                  .pushNamed(distinctEmnen[index].routeName))));

工作演示

在此处输入图像描述

完整代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class Emnen {
  String title;
  String routeName;

  Emnen({this.title, this.routeName});
}

class CupertinoActionSheetApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) => CupertinoApp(
        initialRoute: "/",
        routes: {
          '/': (context) => HomePage(),
          '/1': (context) => FirstScreen(),
          '/2': (context) => SecondScreen(),
        },
      );
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List<Emnen> distinctEmnen = [];

  @override
  void initState() {
    distinctEmnen = [
      Emnen(title: "1", routeName: "/1"),
      Emnen(title: "2", routeName: "/2")
    ];
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: CupertinoButton(
          child: Text("show dialog"),
          onPressed: () {
            _showDialog(context);
          }),
    );
  }

  void _showDialog(BuildContext cxt) {
    showCupertinoModalPopup<int>(
        context: cxt,
        builder: (cxt) {
          var dialog = CupertinoActionSheet(
              title: Text("tjo"),
              actions: List<Widget>.generate(
                  distinctEmnen.length,
                  (int index) => CupertinoActionSheetAction(
                      child: Text(distinctEmnen[index].title),
                      onPressed: () => Navigator.of(context)
                          .pushNamed(distinctEmnen[index].routeName))));

          return dialog;
        });
  }
}

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

class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(
        middle: Text("Cupertino App"),
      ),
      child: Center(
        child: Text("First"),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(
        middle: Text("Cupertino App"),
      ),
      child: Center(
        child: Text("Second"),
      ),
    );
  }
}

完整代码

于 2020-07-14T07:59:10.030 回答