Вызов метода setState () класса нажатием кнопки другого класса во Flutter - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть ящик на главной странице, который меняет тело каркаса в соответствии с выбранным элементом ящика, теперь мне нужно изменить тело, нажав кнопку во фрагменте и вызвать метод основного класса setState () спараметр для обновления экрана.Как я могу это сделать?
это мое тело скаффолда:

body: _getDrawerItemWidget(_selectedDrawerIndex));

, и когда выбирается элемент ящика, вызывается setState () и тело заполняется в соответствии с этим кодом:

_getDrawerItemWidget(int pos) {
    switch (pos) {
      case 0:
        return new MainFragment();
      case 1:
        return new CardMgmt();
.........
}
}

но теперь мне нужно сделать это с помощью кнопки в классе CardMgmt.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы можете сделать это с помощью функции обратного вызова.

В родительском виджете вы создаете дочерний виджет и передаете обратный вызов в качестве параметра:

...
@override
Widget build(BuildContext context) {
  return LoginPage(onSignedIn: _signedIn);
}

void _signedIn() {
  setState(() {
  });
}

В дочернем виджете вы вызываете этот обратный вызов, когда вам нужноэто:

...    
class LoginPage extends StatefulWidget {
  LoginPage({this.onSignedIn});
  final VoidCallback onSignedIn;

  State<StatefulWidget> createState() => new _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
...
void callCallbackFunction() {
  widget.onSignedIn();
}
...

Надеюсь, это поможет.Удачи!

0 голосов
/ 10 февраля 2019

позвольте мне дать очень простой подход, который я использую всякий раз, когда я хочу изменить состояние другого класса / виджета:

определить глобальную переменную, а затем использовать эту переменную в классе State виджета, который выхочу поменять позже.Затем вы можете изменить значение этой переменной из любого метода внутри вашего кода, и состояние вашего первого класса изменится автоматически без какого-либо прямого вызова метода класса setState().

вот пример:

int counter = 0 ;

class _AppState extends State<App> {

var numberOfItems = counter ;

return new MaterialApp(
  title: 'Ads App',
  home: new Text(counter),
 );
}

если вы измените значение счетчика из своего кода, содержимое виджета Text изменится автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...