From fcc3a982c1465ab7d5cb1d1133fd0d2799f22d9e Mon Sep 17 00:00:00 2001 From: lcy <2503978335@qq.com> Date: Tue, 20 Jun 2023 21:30:47 +0800 Subject: [PATCH] feat:全局缓存bloc --- lib/app/app.dart | 4 +++- lib/common/blocs/cachebloc/cache_bloc.dart | 26 ++++++++++++++++++++++++++ lib/common/blocs/cachebloc/cache_event.dart | 11 +++++++++++ lib/common/blocs/cachebloc/cache_state.dart | 10 ++++++++++ lib/pages/login/loginpage/bloc/login_bloc.dart | 2 ++ lib/pages/login/loginpage/login_page.dart | 2 ++ 6 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 lib/common/blocs/cachebloc/cache_bloc.dart create mode 100644 lib/common/blocs/cachebloc/cache_event.dart create mode 100644 lib/common/blocs/cachebloc/cache_state.dart diff --git a/lib/app/app.dart b/lib/app/app.dart index c55e890..05a87db 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -4,6 +4,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:responsive_framework/breakpoint.dart'; import 'package:responsive_framework/responsive_breakpoints.dart'; +import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; import 'package:wow_english/common/widgets/hide_keyboard_widget.dart'; import 'package:wow_english/pages/tab/blocs/tab_bloc.dart'; import 'package:wow_english/route/route.dart'; @@ -17,7 +18,8 @@ class App extends StatelessWidget { designSize: const Size(667, 375), builder: (_,__) => MultiBlocProvider( providers: [ - BlocProvider(create: (_)=> TabBloc()) + BlocProvider(create: (_)=> TabBloc()), + BlocProvider(create: (_) => CacheBloc()) ], child: HideKeyboard( child: MaterialApp( diff --git a/lib/common/blocs/cachebloc/cache_bloc.dart b/lib/common/blocs/cachebloc/cache_bloc.dart new file mode 100644 index 0000000..a3a8172 --- /dev/null +++ b/lib/common/blocs/cachebloc/cache_bloc.dart @@ -0,0 +1,26 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:wow_english/models/user_entity.dart'; + +part 'cache_event.dart'; +part 'cache_state.dart'; + +class CacheBloc extends Bloc { + UserEntity? _userEntity; + + UserEntity? get userEntity => _userEntity; + + CacheBloc() : super(CacheInitial()) { + on(_userInfoChange); + } + + void _userInfoChange(UserInfoChangeEvent event,Emitter emitter) async { + _userEntity = event.userEntity; + emitter(UserInfoChangeState()); + } + + void _userInfoClear(UserInfoClearEvent event,Emitter emitter) async { + _userEntity = null; + emitter(UserInfoClearState()); + } +} diff --git a/lib/common/blocs/cachebloc/cache_event.dart b/lib/common/blocs/cachebloc/cache_event.dart new file mode 100644 index 0000000..d55cf08 --- /dev/null +++ b/lib/common/blocs/cachebloc/cache_event.dart @@ -0,0 +1,11 @@ +part of 'cache_bloc.dart'; + +@immutable +abstract class CacheEvent {} + +class UserInfoChangeEvent extends CacheEvent{ + UserEntity? userEntity; + UserInfoChangeEvent(this.userEntity); +} + +class UserInfoClearEvent extends CacheEvent {} diff --git a/lib/common/blocs/cachebloc/cache_state.dart b/lib/common/blocs/cachebloc/cache_state.dart new file mode 100644 index 0000000..ead34dd --- /dev/null +++ b/lib/common/blocs/cachebloc/cache_state.dart @@ -0,0 +1,10 @@ +part of 'cache_bloc.dart'; + +@immutable +abstract class CacheState {} + +class CacheInitial extends CacheState {} + +class UserInfoChangeState extends CacheState {} + +class UserInfoClearState extends CacheState {} diff --git a/lib/pages/login/loginpage/bloc/login_bloc.dart b/lib/pages/login/loginpage/bloc/login_bloc.dart index 87bc0fc..4f16abf 100644 --- a/lib/pages/login/loginpage/bloc/login_bloc.dart +++ b/lib/pages/login/loginpage/bloc/login_bloc.dart @@ -1,3 +1,5 @@ +import 'dart:js'; + import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; diff --git a/lib/pages/login/loginpage/login_page.dart b/lib/pages/login/loginpage/login_page.dart index 23c7666..f096e0c 100644 --- a/lib/pages/login/loginpage/login_page.dart +++ b/lib/pages/login/loginpage/login_page.dart @@ -2,6 +2,7 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; import 'package:wow_english/common/extension/string_extension.dart'; import 'package:wow_english/common/widgets/textfield_customer_widget.dart'; import 'package:wow_english/pages/login/loginpage/time_widget.dart'; @@ -29,6 +30,7 @@ class _LoginPageView extends StatelessWidget { if (state is LoginResultChangeState) { Navigator.of(context).pushNamed(AppRouteName.home); } + context.read().add(UserInfoChangeEvent(null)); }, child: _buildLoginViewWidget(), ); -- libgit2 0.22.2