метод state и setState доступны только внутри класса, который расширяет класс StatefullWidget, ваш код - это функция (метод), которая возвращает виджет. следовательно, метод setState
недоступен.
одним из решений является создание этого метода внутри statefullwidget, который вы используете
class Example extends StatefullWidet {
@override
createState() => _ExamleState();
}
class _ExampleState extends State<Example> {
PopupMenuButton<String> appBarMenu(BuildContext context, RateMyApp _rateMyApp) {
return PopupMenuButton<String>(
itemBuilder: (BuildContext context) {
return choicesMenuBtn.map((String choice) {
return PopupMenuItem<String>(
child: Text('RateUS'),
);
}).toList();
},
onSelected: (val) {
if (val == rateUsMenuBtn) {
_rateMyApp.showStarRateDialog(
context,
actionsBuilder: (_, count) {
final Widget cancelButton = RateMyAppNoButton(
_rateMyApp,
text: 'CANCEL',
//here is the problem
callback: () => setState(() {}),
);
},
);
}
});
}
// other code inside the widget
}
или
, вы можете ожидать функцию в качестве параметра если вы хотите использовать функцию внутри больше, чем виджеты
PopupMenuButton<String> appBarMenu(BuildContext context, RateMyApp _rateMyApp, Function onPress) {
return PopupMenuButton<String>(
itemBuilder: (BuildContext context) {
return choicesMenuBtn.map((String choice) {
return PopupMenuItem<String>(
child: Text('RateUS'),
);
}).toList();
},
onSelected: (val) {
if (val == rateUsMenuBtn) {
_rateMyApp.showStarRateDialog(
context,
actionsBuilder: (_, count) {
final Widget cancelButton = RateMyAppNoButton(
_rateMyApp,
text: 'CANCEL',
//here is the problem
callback: onPress,
);
},
);
}
});
}
// and whenever you call it you pass the onClick to the method.