#flutter #dart #flutter-layout #flutter-dependencies #flutter-test
Вопрос:
Я работаю над страницей входа в систему и использую ShardPreferences, которые перенесли мои данные на домашнюю страницу. теперь мне нужны эти данные внутри него в виджете. Я хочу вызвать extractedUserData внутри виджета, который является сохраненным значением json.decode.
class _HomeScreenState extends State<HomeScreen> {
@override
void initState() {
super.initState();
sf_extractedUserData();
}
Future<void> sf_extractedUserData() async {
final pref = await SharedPreferences.getInstance();
final extractedUserData = json.decode(pref.getString('userData') as String);
print('HomeScreen :extractedUserData2' extractedUserData.toString());
print('extractedUserData uid: ' extractedUserData['uid']);
print('extractedUserData user_name: ' extractedUserData['user_name']);
print('extractedUserData user_email: ' extractedUserData['user_email']);
print('extractedUserData : ' extractedUserData);
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Home"),
),
body: Column(
children: [
Center(
child: RaisedButton(
onPressed: () {
Navigator.of(context).pushReplacementNamed('/');
Provider.of<Auth>(context, listen: false).logout();
},
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
child: Text('logout'),
color: Colors.green,
)
),
],
),
);
}
}
Комментарии:
1. Пожалуйста, проверьте FutureBuilder. api.flutter.dev/flutter/widgets/FutureBuilder-class.html
Ответ №1:
Сначала сделайте так, чтобы ваша будущая функция возвращала строку «extractedUserData», а затем используйте для этого Futurebuilder flutter.
Конструктор будущего принимает аргумент будущего и создает виджет, как только поступают данные.
Вот пример:-
return FutureBuilder(
future: sf_extractedUserData(),
builder: (context, response){
return response.hasData ? Container(
//Layout when data is returned by sf_extractedUserData
):
Conatiner(
//Layout when data is not returned yet
);
},
);
Таким образом, вы сможете отображать свои данные внутри виджета.
Также, пожалуйста, перестаньте называть setState ненужным его мощная функция, которая также приводит ко многим проблемам при ненужном использовании.
и как всегда..
Счастливое Кодирование