Как вызвать extractedUserData внутри виджета

#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 ненужным его мощная функция, которая также приводит ко многим проблемам при ненужном использовании.

и как всегда..
Счастливое Кодирование