Трепетание — извлекает возвращаемое значение MobX @action при загрузке экрана без щелчка

#flutter #dart #flutter-layout #mobx

#флаттер #дротик #флаттер-макет #mobx

Вопрос:

У меня есть MobX @ action, который успешно возвращает значение. Интересно, как получить значение при начальной загрузке экрана без щелчка или касания чего-либо.

 abstract class _ProfileMobx with Store {

  @observable
  User user; 

  @observable
  String name = '';

  @action
  Future getClientName() async {
    SharedPreferences pref = await SharedPreferences.getInstance();

    User user = User.fromJson(json.decode(pref.getString('userPref')));
    name = user.name; //successfully return an username from this action
  }
}
  

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

 final ProfileMobx profileMobx = ProfileMobx();

class ProfileView extends StatelessWidget {
@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Text(profileMobx.name)
        ],
      ),
    );
  }
}
  

Спасибо!!!

Ответ №1:

Вы пробовали @computed ?

В основном computed значения — это значения, которые могут быть получены (вычислены) из существующего состояния или других наблюдаемых / вычисляемых значений.

Я не уверен на 100% насчет Dart, но в Javascript / Typescript это выглядело бы примерно так:

 class Profile {
    @observable
    user :User

    @computed get name() {
        return this.user ? this.user.name : '';
    }

    @action
    getUser = async () => {
      // .. your code to get user
      this.user = await getUser();

      // Don't need this line, just set the user, computed will be automatically recalculated
      // name = user.name;
    }
}
  

Больше информации о computed здесь: https://mobx.js.org/refguide/computed-decorator.html
Или вот, если вы используете дротик, я думаю:https://pub.dev/packages/mobx#computed-observables