Общие настройки с включенным Flutter TextFormField - PullRequest
0 голосов
/ 08 мая 2020

Я хочу, чтобы свойство TextFormField было false или true. Я пытаюсь получить ложное или истинное значение из общих предпочтений. Я сохраняю ifLogged значение « true » во время открытия приложения.

Итак, я использую значение ifLogged на одном из моих экранов. Моя проблема; isLogged параметр первый раз ложь, второй раз истина.

  bool isLogged = false;

  Future<bool> checkLogin() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    isLogged = (prefs.getBool('ifLogged') ?? false);
    return isLogged;
  }

 @override
  void initState() {
    super.initState();
    checkLogin();
  }


TextFormField(enabled: isLogged ? true : false,
...

Есть ли проблема с bool isLogged между Future<bool>

1 Ответ

0 голосов
/ 08 мая 2020

Это естественное поведение, потому что до завершения future требуется некоторое время, поэтому сначала это False, а когда будущее завершается, оно становится True / False (данные сохраняются в ваших предпочтениях).

Вы можете показать пользователю, что данные извлекаются следующим образом:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(Home());
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  Future<bool> checkLogin() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return (prefs.getBool('ifLogged') ?? false);
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<bool>(
      future: checkLogin(),
      builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
        if (snapshot.hasData)
          return Center(
            child: TextFormField(
              enabled: snapshot.data,
            ),
          );

        return Center(child: CircularProgressIndicator());
      },
    );
  }
}

...