Flutter 如何在切换按钮中实现这些功能?Can';我不能让它工作

Flutter 如何在切换按钮中实现这些功能?Can';我不能让它工作,flutter,dart,Flutter,Dart,对不起,我是一个比较新的颤振和有一些麻烦。我想在按下第一个、第二个或第三个按钮时启动功能。这些按钮启动地图标记、多段线等。当使用图标按钮指定On Press时,它们工作正常。。。我想不出如何让他们用切换按钮工作。。。是否必须以某种方式将它们添加到列表中?如果是,怎么做 这是我的三个按钮: Consumer<ProviderMaps>(builder: (context, menu, widget) { return Containe

对不起,我是一个比较新的颤振和有一些麻烦。我想在按下第一个、第二个或第三个按钮时启动功能。这些按钮启动地图标记、多段线等。当使用图标按钮指定On Press时,它们工作正常。。。我想不出如何让他们用切换按钮工作。。。是否必须以某种方式将它们添加到列表中?如果是,怎么做

这是我的三个按钮:

            Consumer<ProviderMaps>(builder: (context, menu, widget) {
              return Container(
                padding: EdgeInsets.zero,
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.transparent, width: 1.0),
                  borderRadius: BorderRadius.all(Radius.circular(5.0)),
                ),
                child: ToggleButtons(
                  selectedColor: Colors.red,
                  color: Colors.white,
                  children: <Widget>[
                    Icon(MdiIcons.vectorPolygon),
                    Icon(MdiIcons.ruler),
                    Icon(MdiIcons.pencil),
                  ],
                  onPressed: (int index) {
                    setState(() {
                      for (int buttonIndex = 0;
                          buttonIndex < _selection.length;
                          buttonIndex++) {
                        if (buttonIndex == index) {
                          _selection[buttonIndex] = !_selection[buttonIndex];
                        } else {
                          _selection[buttonIndex] = false;
                        }
                      }
                    });
                  },
                  isSelected: _selection,
                ),
              );
            }),
这是我通常如何调用这些函数(工作正常):


嗯,
ToggleButtons
onPressed
确实为您提供了所按下按钮的索引。因此,如果按下第一个按钮,索引将为0,如果按下第二个按钮,索引将为1,以此类推

因此,在onPressed中,您可以检查索引,并基于该调用适当的函数(常规if语句也可以正常工作):

或者更好,您可以将函数放置在数组中(确保按正确的顺序放置),并执行以下操作:

var functions = <Function>[function1, function2, function3];
//...
//then, in the onPressed:
onPressed: (int index) {
    //call the function of that index
    functions[index]();
}
var functions=[function1,function2,function3];
//...
//然后,在onPressed中:
onPressed:(int索引){
//调用该索引的函数
函数[索引]();
}

这不太管用。编辑我的帖子,向你展示我所做的。我不知道该如何处理isSelected:_选择,部分。我尝试了数组,但我不能将它放在任何地方,因为我不知道如何在需要使用者时设置数组(在我的情况下,我需要能够调用provmap。情况1是唯一有效的。无论我按哪个按钮。Mmm,你能试着用if语句替换吗?比如
if(index==0){…}
或者使用第二种方法。我可能在switch语句中犯了一个错误……实际上,我的错误:索引从0开始。因此,您的按钮索引是0、1和2。而不是1、2和3。我将编辑答案。
menu.changestatutpolyg();
menu.changestatupolyli();
_initFreeDraw();
        Consumer<ProviderMaps>(builder: (context, menu, widget) {
          return IconButton(
              icon: Icon(MdiIcons.ruler),
              color: Color(0xffFFFFFF),
              onPressed: () {
                menu.changestatupolyli();
              });
        }),
          onPressed: (int index) {
            setState(
              () {
                switch (index) {
                  case 1:
                    {
                      menu.changestatutpolyg();
                    }
                    break;
                  case 2:
                    {
                      menu.changestatupolyli();
                    }
                    break;

                  case 3:
                    {
                      _initFreeDraw();
                    }
                    break;
                }
              },
            );
          },
          isSelected: _selection,
        ),
      );
    }),
onPressed: (int index) {
  switch(index) {
    case 0: {
      callFunction1();
    }
    break;
    case 1: {
      callFunction2();
    }
    break;
    //etc.
  }
},
var functions = <Function>[function1, function2, function3];
//...
//then, in the onPressed:
onPressed: (int index) {
    //call the function of that index
    functions[index]();
}