颤动:检查用户是否登录

时间:2020-11-11 22:15:44

标签: flutter

我已经使用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, /

1 个答案:

答案 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(),
          .........
          ........