Как использовать setState при вызове openDrawer? - PullRequest
0 голосов
/ 24 ноября 2018

В моем ящике есть два действия, если пользователь вошел в систему, он покажет информацию о пользователе, в противном случае появится всплывающее окно входа в систему, поэтому я хочу вызвать setState при открытии ящика, как показано ниже:

clickLeftMenu: (BuildContext mainContext) {
      LoginInfo.checkLogin(mainContext).then((islogin) {
        print(islogin.toString());
        if (!islogin)
          showLogin(mainContext, true);
        else{
          Scaffold.of(mainContext).openDrawer();
          setState(() {
            //I want to update the user login info for rebuild screen for show
            loginInfo = LoginInfo.getInfo();
          });
        }              
      });
    },

показать информацию о пользователе с объектом loginInfo в ящике:

          ListTile(
            leading: Icon(Icons.account_circle,
                color: Theme.of(context).primaryColor,
                size: setWidth(context, 8.0)),
            title: Text(
              loginInfo.name ?? '',
              //loginInfo. != null ? loginInfo.email : '',
              style: TextStyle(
                fontSize: 20.0,
                color: Theme.of(context).primaryColor,
              ),
            ),
            subtitle: Text(
              loginInfo.email ?? '',
              style: TextStyle(
                fontSize: 10.0,
                //color: this.primaryColor,
              ),
            ),
          ),

, но когда я позвонил, это не удалось, покажите ошибку ниже:

setState() or markNeedsBuild() called when widget tree was locked.
This _ModalScope<dynamic> widget cannot be marked as needing to build because the framework is locked

Я пробовал много способовно все же не удалось, у вас есть какие-либо идеи или другие способы сделать это?

Спасибо !!

1 Ответ

0 голосов
/ 07 декабря 2018
 Builder(
        builder: (BuildContext context) {
          return IconButton(
            icon: const Icon(Icons.menu),
            onPressed: () {
              Scaffold.of(context).openDrawer();
            },
            tooltip: MaterialLocalizations.of(context).openAppDrawerTooltip,
          );
        },
      ), 
...