Flutter 로그인 종료 기능 고려 사항

4035 단어
로그인 기능 구현
사용자가 로그인 인터페이스를 통해 앱에 로그인한 후에 되돌아오는 키를 눌러도 로그인 인터페이스로 돌아갈 수 없도록 하기 위해서, 우리는 사용자가 로그인한 후에 새로운 루트 창고를 만들어야 한다
직접 코드, 프로그램 입구:
void main() {
  DataUtils.getUserInfo().then((userInfo) {
    runApp(MyApp(userInfo));
  });
}

class MyApp extends StatelessWidget {
  MyApp(this.userModel);

  final UserModel userModel;

  @override
  Widget build(BuildContext context) {
    GlobalKey _formKey = new GlobalKey();
    return MaterialApp(
      title: 'MaterialManagement',
      theme: ThemeData(accentColor: Colors.white, primaryColor: Colors.blue),
      home: userModel == null
          ? LoginPage()
          : HomePage(),
      routes: <String, WidgetBuilder>{
        '/login': (BuildContext context) => LoginPage(),
        '/home': (BuildContext context) => HomePage()
      },
    );
  }
}

현재 우리는 loginButtononPressed 이벤트의 리셋 함수_loginWithAvatarAndPassword를 정의하여 루트 창고를 다시 만드는 작업을 완성해야 한다. 그러면 로그인에 성공한 후에 리턴 키를 누르면 로그인 인터페이스로 돌아가는 문제를 피할 수 있다(로그아웃 동일).
Future<dynamic> _loginWithAvatarAndPassword() async {
        final form = _formKey.currentState;
        if (form.validate()) {
          _formKey.currentState.save();
          LoginUtils.login(user.avatar, user.password, (isAlive, userInfo) {
            if (isAlive) {
              runApp(MyApp(userInfo)); // look here!
            }
          });
        }
    }

더블 클릭으로 응용 프로그램 종료 실현WillPopScope 사용자가 루트에 대한 조작을 사용자 정의할 수 있도록 리셋onWillPop을 등록합니다.
우리의 리셋 함수를 사용자 정의하고,
Future<bool> _doubleExit() {
    int nowTime = new DateTime.now().microsecondsSinceEpoch;
    if (_lastClickTime != 0 && nowTime - _lastClickTime > 1500) {
      return new Future.value(true);
    } else {
      _lastClickTime = new DateTime.now().microsecondsSinceEpoch;
      new Future.delayed(const Duration(milliseconds: 1500), () {
        _lastClickTime = 0;
      });
      return new Future.value(false);
    }
  }

미리 만들어진 하위 노드_getBody()WillPopScope에 끼워넣기
Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: _doubleExit, // look here!
      child: _getBody(),
    );
  }

좋은 웹페이지 즐겨찾기