如何在 flutter 中启用/禁用登录页面

How to enable /disable login page in flutter

请高手帮帮我.. 我有一个应用程序,它具有使用密码的安全登录功能。每次用户打开应用程序时,用户都会从 MainPage 重定向到 LoginPage 以输入密码。

我想为用户选择启用或禁用设置页面上的安全登录。如果用户激活安全登录,则每次他打开应用程序时,用户都会从 MainPage 重定向到 LoginPage。如果用户禁用安全登录,用户会立即从 MainPage 重定向到 HomePage

例子

如果启用安全登录:

主页 -> 登录页面 -> 主页

如果禁用安全登录:

主页 -> 主页

主页代码

// MainPage
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MainPage',
      home: LoginPage(),
    );
  }
}

登录页面代码

// LoginPage
class LoginPage extends StatefulWidget {
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

首页代码

// HomePage
class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
          child: InkWell(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Settings',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
          ],
        ),
        onTap: () {
          Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => SettingsPage()));
        },
      )),
    );
  }
}

设置页面代码

// SettingsPage
class SettingsPage extends StatefulWidget {
  @override
  _SettingsPageState createState() => _SettingsPageState();
}

class _SettingsPageState extends State<SettingsPage> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: Container(
          child: InkWell(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Secure Login enabled/disabled',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
          ],
        ),
        onTap: () {},
      )),
    );
  }
}

您可以使用 Shared Preferences 并执行此操作。

// Button function to enabled/disable
SharedPreferences prefs = await SharedPreferences.getInstance();

//  Check if it was disabled previously
final bool disabled = await prefs.getBool('yourKey');

// Set flag depending if it was enable/disabled
prefs.setBool('yourKey', disabled == null? true : !disabled );  

在您导航到登录页面之前,您应该检查他是否禁用了它。

SharedPreferences prefs = await SharedPreferences.getInstance();
final bool disabled = await prefs.getBool('yourKey');

这样做的想法是使用 Shared Preferences 包,如下例所示:

  1. 初始化共享首选项

    SharedPreferences prefs = await SharedPreferences.getInstance();

  2. 根据您的需要从设置页面中根据用户的选择存储一个布尔值,例如:CheckBox

    await prefs.setBool('CUSTOM_KEY_HERE', user's_bool_value_here);

  3. 每次用户按如下方式输入 MainPage() 时检索该值

    bool isSecureMode = prefs.getBool('CUSTOM_KEY_HERE'); // make sure it is the same key
    if (isSecureMode) {
    // go to HomePage
    } else {
    // go to LoginPage
    }