我已经使用flutter实现了android应用程序,并且我创建了一个登录/注册表单,当与API连接时,它可以完美运行,但是问题出在我登录并在单击“确定”后再次返回其他任何页面登录按钮,它再次向我显示登录表单,我想要的是添加检测用户是否登录的功能,有没有办法做到这一点? ps:我在下面尝试了sharedPrefrences,但是它不起作用
class PhotoUploadView(ListCreateAPIView):
"""
This API view handles multiple images upload form
It will also display images for specific hotel
"""
parser_classes = (MultiPartParser, FormParser)
# http_method_names = ['get', 'post', 'head']
def get(self, request):
all_images = Photo.objects.all()
permission_classes = (IsAdminOrOwner,)
serializer_class = PhotoSerializer(all_images, many=True)
return JsonResponse(serializer.data, safe=False)
def post(self, request, *args, **kwargs):
hotel = request.data.get('hotel')
images = dict((request.data).lists())['image']
flag = 1
arr = []
for img_name in images:
modified_data = modify_input_for_multiple_files(hotel, img_name)
file_serializer = PhotoSerializer(data=modified_data)
if file_serializer.is_valid():
file_serializer.save()
arr.append(file_serializer.data)
else:
flag = 0
if flag == 1:
return Response(arr, status=status.HTTP_201_CREATED)
else:
return Response(arr, status=status.HTTP_400_BAD_REQUEST)
这是我的main.dart:
main() async {
// if your flutter > 1.7.8 : ensure flutter activated
WidgetsFlutterBinding.ensureInitialized();
final SharedPreferences prefs = await SharedPreferences.getInstance();
var isLoggedIn = prefs.getBool('isLoggedIn')??false;
await translator.init(
localeDefault: LocalizationDefaultType.device,
languagesList: <String>['en', 'ar'],
assetsDirectory: 'assets/langs/',
apiKeyGoogle: '<Key>', // NOT YET TESTED
);
// WidgetsFlutterBinding.ensureInitialized();
runApp(
LocalizedApp(
child: Notification(isLoggedIn:isLoggedIn),
),
);
}
class Notification extends StatefulWidget {
final bool isLoggedIn;
Notification({this.isLoggedIn});
@override
_NotificationState createState() => _NotificationState();
}
class _NotificationState extends State<Notification> {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
Products_FitnessAndGym()),
ChangeNotifierProvider.value(value: Cart()),
ChangeNotifierProvider.value(value: Wishe()),
ChangeNotifierProvider.value(
value: Orders(),
)
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
home:
widget.isLoggedIn ? MyHomePage(): LogIn(),
localizationsDelegates:
translator.delegates, /
答案 0 :(得分:0)
您可以使用Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => User(), ),);
代替Navigator.push(context, MaterialPageRoute(builder: (context) => User(), ),);
这会将您的login
屏幕替换为User
屏幕
修改
main() async {
// if your flutter > 1.7.8 : ensure flutter activated
WidgetsFlutterBinding.ensureInitialized();
final SharedPreferences prefs = await SharedPreferences.getInstance();
var isLoggedIn = prefs.getBool('isLoggedIn')??false;
...
runApp(
LocalizedApp(
child: Notification(isLoggedIn:isLoggedIn),
),
);
}
class Notification extends StatelessWidget {
final bool isLoggedIn;
Notification({this.isLoggedIn});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(value: Products_FitnessAndGym()),
ChangeNotifierProvider.value(value: Cart()),
ChangeNotifierProvider.value(value: Wishe()),
ChangeNotifierProvider.value(
value: Orders(),
)
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
home:
isLoggedIn ? MyHomePage(): LogIn(),
localizationsDelegates:
translator.delegates, // Android + iOS Delegates
locale: translator.locale, // Active locale
supportedLocales: translator.locals(),
.........
........