|
|
|
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<T extends BaseViewModel> 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<T> createState() => _BaseViewState<T>();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _BaseViewState<T extends BaseViewModel> extends State<BaseView<T>> {
|
|
|
|
T model = locator<T>();
|
|
|
|
AuthenticatedUserObject authenticatedUserObject =
|
|
|
|
locator<AuthenticatedUserObject>();
|
|
|
|
bool isLogin = false;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
if (widget.allowAny && widget.onModelReady != null) {
|
|
|
|
widget.onModelReady(model);
|
|
|
|
} else if (widget.onModelReady != null &&
|
|
|
|
Provider.of<ProjectViewModel>(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<T>(
|
|
|
|
create: (BuildContext context) => model,
|
|
|
|
child: Consumer<T>(builder: widget.builder),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
void dispose() {
|
|
|
|
if (model != null) {
|
|
|
|
model = null;
|
|
|
|
}
|
|
|
|
super.dispose();
|
|
|
|
}
|
|
|
|
}
|