【问题标题】:Flutter TextFormField enabled sharedpreferencesFlutter TextFormField 启用共享首选项
【发布时间】:2020-05-08 20:50:55
【问题描述】:

我想让 TextFormField 启用属性为 false 或 true。我尝试从 sharedpreferences 中获取虚假或真实的价值。我在应用打开时保存 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 isLoggedFuture&lt;bool&gt;之间有什么问题吗

【问题讨论】:

    标签: flutter boolean


    【解决方案1】:

    这种行为很自然,因为未来完成需要一些时间,所以一开始它是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());
          },
        );
      }
    }
    
    

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 2019-10-01
      • 2020-04-14
      • 2021-03-05
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      相关资源
      最近更新 更多