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 の場合isLoggedin
true
- else If user
isFirst
istrue
-> 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;
}