在flutter中使用provider时,getter在null上被调用

问题描述 投票:0回答:1

我正在使用提供程序模式制作一个Flutter应用程序。当我启动我的应用程序时,出现空错误。

button_data.dart像这样。

class ButtonData extends ChangeNotifier {
  List<Button> _buttons = [
    Button(
        type: "A",
        numberone: "1",
        numbertwo: "2",
        numberthree: "3",
    ),
    Button(
        key: "B",
        numberone: "A",
        numbertwo: "B",
        numberthree: "C",
    ),
  ];

  Button _selectedButton;

  List<Button> get buttons => _buttons;

  Button get selectedButton => _selectedButton;

  void setSelectedItem(Button s) {
    _selectedButton = s;
    notifyListeners();
  }


 Button getType(String value) {
    return _buttons
        .where((button) => button.type == value).first;
  } // it is no use...
}

而且我希望在切换类型时以不同方式显示这些按钮。

new Row(children: [
  buildButton(Provider.of<ButtonData>(context).getNumberOne(Provider.of<ButtonData>(context).selectedButton.type)),
  buildButton(Provider.of<ButtonData>(context).getNumberTwo(Provider.of<ButtonData>(context).selectedButton.type)),
  buildButton(Provider.of<ButtonData>(context).getNumberThree(Provider.of<ButtonData>(context).selectedButton.type)),
])

但是错误似乎会返回,因为也许我没有设置默认值。它说'getter'type'被调用为null'如果可能,我希望将“类型A”设置为默认值,以便在按钮上显示1、2、3。

因此,要找出空错误,我在下面尝试了initState函数,但是会引发更多错误。

1. There isn't a setter named 'selectedButton' in class 'ButtonData'

2. The expression here has a type of void and therefore can't be used

@override
void initState() {
  Provider.of<ButtonData>(context).selectedButton = Provider.of<ButtonData>(context).setSelectedItem(Provider.of<ButtonData>(context).buttons.first);
  super.initState();
}

我一直在尝试寻找类似的问题,但我找不到确切的问题,所以我问你们。

flutter dart provider flutter-provider
1个回答
0
投票

这里有很多事情你做错了。您需要了解Provider可以公开其下面的所有Widget。此外,这还将帮助其他人更了解FlutterProvider

© www.soinside.com 2019 - 2024. All rights reserved.