import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../locator.dart'; AppSharedPreferences sharedPref = AppSharedPreferences(); class BaseView extends StatefulWidget { final Widget Function(BuildContext context, T model, Widget child) builder; final Function(T) onModelReady; final bool allowAny; BaseView({ this.builder, this.onModelReady, this.allowAny = false, }); @override _BaseViewState createState() => _BaseViewState(); } class _BaseViewState extends State> { T model = locator(); AuthenticatedUserObject authenticatedUserObject = locator(); bool isLogin = false; @override void initState() { if(widget.allowAny && widget.onModelReady != null){ widget.onModelReady(model); } else if (widget.onModelReady != null && Provider.of(context, listen: false).isLogin) { widget.onModelReady(model); } super.initState(); } getUser() async { var userData = await sharedPref.getObject(USER_PROFILE); this.isLogin = userData != null; } @override Widget build(BuildContext context) { return ChangeNotifierProvider( create: (BuildContext context) => model, child: Consumer(builder: widget.builder), ); } @override void dispose() { if (model != null) { model = null; } super.dispose(); } }