You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HMG_Patient_App/lib/widgets/others/app_scaffold_widget.dart

332 lines
12 KiB
Dart

import 'package:diplomaticquarterapp/config/config.dart';
5 years ago
import 'package:diplomaticquarterapp/config/size_config.dart';
5 years ago
import 'package:diplomaticquarterapp/core/model/ImagesInfo.dart';
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
6 years ago
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
5 years ago
import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart';
6 years ago
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
6 years ago
import 'package:diplomaticquarterapp/routes.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/bottom_bar.dart';
import 'package:diplomaticquarterapp/widgets/progress_indicator/app_loader_widget.dart';
6 years ago
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:diplomaticquarterapp/widgets/weather_slider/weather_slider.dart';
import 'package:diplomaticquarterapp/widgets/typewriter/typewiter.dart';
import 'package:flutter/material.dart';
5 years ago
import 'package:flutter_svg/flutter_svg.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
6 years ago
import 'package:provider/provider.dart';
import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart';
import '../../locator.dart';
6 years ago
import 'floating_button_search.dart';
import '../progress_indicator/app_loader_widget.dart';
import 'arrow_back.dart';
import 'network_base_view.dart';
import 'not_auh_page.dart';
5 years ago
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
class AppScaffold extends StatelessWidget {
final String appBarTitle;
final Widget body;
final Widget bottomSheet;
final bool isLoading;
final bool isShowAppBar;
final bool hasAppBarParam;
final BaseViewModel baseViewModel;
6 years ago
final bool isBottomBar;
final Widget floatingActionButton;
final bool isPharmacy;
final String title;
final String description;
5 years ago
final String image;
final bool isShowDecPage;
final List<String> infoList;
final Color backgroundColor;
final bool isHelp;
final double preferredSize;
final List<Widget> appBarIcons;
final PreferredSizeWidget appBarWidget;
ProjectViewModel projectProvider;
5 years ago
final List<ImagesInfo> imagesInfo;
AuthenticatedUserObject authenticatedUserObject =
locator<AuthenticatedUserObject>();
AppScaffold({
@required this.body,
this.appBarTitle = '',
this.isLoading = false,
this.isShowAppBar = false,
this.hasAppBarParam,
this.bottomSheet,
this.baseViewModel,
this.floatingActionButton,
this.isPharmacy = false,
this.title,
this.description,
this.isShowDecPage = true,
this.backgroundColor,
this.isBottomBar,
this.preferredSize = 0.0,
this.appBarIcons,
this.appBarWidget,
this.image,
this.infoList,
this.isHelp = false,
this.imagesInfo,
});
@override
Widget build(BuildContext context) {
AppGlobal.context = context;
PreferredSizeWidget appBar;
if (this.appBarWidget == null) {
PreferredSizeWidget appBarWidget = AppBarWidget(
appBarTitle,
appBarIcons,
isShowAppBar,
isPharmacy: isPharmacy,
isShowDecPage: isShowDecPage,
image: image,
);
appBar = preferredSize == 0
? appBarWidget
: PreferredSize(
5 years ago
child: appBarWidget,
preferredSize: Size.fromHeight(preferredSize));
} else {
appBar = this.appBarWidget;
}
6 years ago
return Scaffold(
5 years ago
backgroundColor:
backgroundColor ?? Theme.of(context).scaffoldBackgroundColor,
appBar: appBar,
body: (!Provider.of<ProjectViewModel>(context, listen: false).isLogin &&
isShowDecPage)
? NotAutPage(
title: appBarTitle,
description: description,
infoList: infoList,
imagesInfo: imagesInfo,
)
: baseViewModel != null
? NetworkBaseView(
child: buildBodyWidget(context),
baseViewModel: baseViewModel,
)
: buildBodyWidget(context),
bottomSheet: bottomSheet
5 years ago
//floatingActionButton: floatingActionButton ?? floatingActionButton,
// bottomNavigationBar:
// this.isBottomBar == true ? BottomBarSearch() : SizedBox()
//floatingActionButton: FloatingSearchButton(),
);
}
buildAppLoaderWidget(bool isLoading) {
return isLoading ? AppLoaderWidget() : Container();
}
buildBodyWidget(context) {
5 years ago
// return body; //Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)]);
5 years ago
//&& Provider.of<ProjectViewModel>(context, listen: false).havePrivilege(77) need to added
return Stack(
children: <Widget>[body, isHelp == true ? RobotIcon() : Container()]);
}
}
class AppBarWidget extends StatelessWidget with PreferredSizeWidget {
final AuthenticatedUserObject authenticatedUserObject =
locator<AuthenticatedUserObject>();
final String appBarTitle;
final List<Widget> appBarIcons;
final bool isShowAppBar;
final bool isPharmacy;
final bool isShowDecPage;
final String image;
AppBarWidget(this.appBarTitle, this.appBarIcons, this.isShowAppBar,
{this.isPharmacy = true, this.isShowDecPage = true, this.image});
@override
Widget build(BuildContext context) {
return buildAppBar(context);
}
Widget buildAppBar(BuildContext context) {
return isShowAppBar
? AppBar(
elevation: 0,
backgroundColor:
isPharmacy ? Colors.green : Theme.of(context).appBarTheme.color,
textTheme: TextTheme(
headline6:
TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
title: Texts(
authenticatedUserObject.isLogin || !isShowDecPage
? appBarTitle.toUpperCase()
: TranslationBase.of(context).serviceInformationTitle,
color: Colors.white,
bold: true,
),
leading: Builder(
builder: (BuildContext context) {
return ArrowBack();
},
),
centerTitle: true,
actions: <Widget>[
isPharmacy
? IconButton(
icon: Icon(Icons.shopping_cart),
color: Colors.white,
onPressed: () {
Navigator.of(context)
.popUntil(ModalRoute.withName('/'));
})
: Container(),
image != null
? InkWell(
onTap: () => Navigator.push(
context,
FadePage(
page: InsuranceUpdate(),
),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Image.asset(
image,
height: SizeConfig.heightMultiplier * 5,
width: SizeConfig.heightMultiplier * 5,
color: Colors.white,
),
),
)
: IconButton(
icon: Icon(FontAwesomeIcons.home),
color: Colors.white,
onPressed: () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => LandingPage()),
(Route<dynamic> r) => false);
},
),
if (appBarIcons != null) ...appBarIcons
],
)
: Container(
height: 0,
width: 0,
);
}
@override
Size get preferredSize => Size(double.maxFinite, 60);
}
class RobotIcon extends StatefulWidget {
@override
_RobotIcon createState() => _RobotIcon();
}
class _RobotIcon extends State<RobotIcon> {
var event = RobotProvider();
5 years ago
bool isAnimation = false;
@override
void initState() {
event.controller.stream.listen((p) {
if (p['animationEnable'] == 'false') {
setState(() {
if (this.mounted) {
this.isAnimation = false;
}
});
}
});
5 years ago
setState(() {
setAnimation();
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Positioned(
child: Column(
children: [
isAnimation
? Container(
height: 150,
width: 200,
padding: EdgeInsets.all(5),
margin: EdgeInsets.only(right: 35.0, bottom: 0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
boxShadow: [
BoxShadow(color: Colors.black, spreadRadius: 1),
],
),
child: TyperAnimatedTextKit(
text: Provider.of<ProjectViewModel>(context,
listen: false)
.isArabic ==
true
? "هذه الخدمة تم تصميمها لتتمكن من ربط الملفات الطبية للعائلة بملفك الطبي حتى تتمكن من إدارة سجلاتهم عن طريق تسجيل الدخول إلى ملفك الطبي."
: "Through this service, you will be able to link your family medical files to your medical file so that you can manage their records by login to your medical file.",
textLength: Provider.of<ProjectViewModel>(context,
listen: false)
.isArabic ==
true
? "هذه الخدمة تم تصميمها لتتمكن من ربط الملفات الطبية للعائلة بملفك الطبي حتى تتمكن من إدارة سجلاتهم عن طريق تسجيل الدخول إلى ملفك الطبي."
.length
: "Through this service, you will be able to link your family medical files to your medical file so that you can manage their records by login to your medical file."
.length))
: Container(),
Stack(
children: [
isAnimation
? Positioned(
top: 0,
right: 40,
child: Container(
height: 0,
width: 0,
decoration: ShapeDecoration(
color: Colors.grey,
shape: MessageBorder(reverse: true),
)))
: Container(),
FloatingSearchButton()
],
)
],
),
right: -30,
bottom: 50);
}
5 years ago
setAnimation() async {
//await sharedPref.getBool(IS_ROBOT_VISIBLE) ||
var animation =
await sharedPref.getBool(IS_ROBOT_INIT) == null ? true : false;
setState(() {
this.isAnimation = animation;
});
}
}