0

import 'package:flutter/material.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Consumer<AppThemeNotifier>(
      builder: (BuildContext context, AppThemeNotifier value, Widget child) {
        return Provider(
          create: "XXXXXXX",
          dispose: "XXXXXXX",
          child: MaterialApp(
              debugShowCheckedModeBanner: false,
              theme: AppTheme.getThemeFromThemeMode(value.themeMode()),
              home: Base()),
        );
      },
    );
  }
}

class Base extends StatefulWidget {
  @override
  _BaseState createState() => _BaseState();
}

class _BaseState extends State<Base> {

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<SessionAuth>(
      future: Provider.of<AppThemeNotifier>(context, listen: false).validate,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          SessionAuth session = new SessionAuth();
          if (session.userId != null && session.isLoggedIn) {
            return FullApp();
          } else if (isFirst) {
            return OnBoardingScreen();
          }
          return LoginScreen();
        } else {
          return Scaffold(
            body: Center(child: CircularProgressIndicator()),
          );
        }
      },
    );
  }
}

セッション検証に基づいてさまざまな画面をナビゲートしようとしていましたが、プロバイダー パッケージを介して行われました。(ログインフロー管理)

簡単に言えば、セッションの詳細に基づいて画面を置き換えたい

壊す

  • nullにuserId等しくなく、-> FullApp の場合isLoggedintrue
  • else If user isFirstis true-> OnBoardingScreen
  • そうでなければログイン画面

エラー

  • flutter: メソッド '>=' が null で呼び出されました。
  • フラッター: レシーバー: null
  • flutter: 呼び出してみました: >=(0.0)

セッション認証

class SessionAuth {
  SessionAuth({this.isLoggedIn, this.userId, this.isFirst});
  int userId;
  bool isLoggedIn;
  bool isFirst;
}

検証

Future<SessionAuth> get validate async {
  SharedPreferences prefs = await SharedPreferences.getInstance();

  SessionAuth auth = new SessionAuth();
  auth.userId = prefs.getInt('userId') ?? null;
  auth.isLoggedIn = prefs.getBool('isLoggedIn') ?? false;
  auth.isFirst = prefs.getBool("isFirst") ?? null;

  return auth;
}
4

0 に答える 0