#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