import ' package:diplomaticquarterapp/config/config.dart ' ;
import ' package:diplomaticquarterapp/config/size_config.dart ' ;
import ' package:diplomaticquarterapp/config/size_config.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/pages/insurance/insurance_update_screen.dart ' ;
import ' package:diplomaticquarterapp/pages/landing/landing_page.dart ' ;
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 ' ;
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 ' ;
import ' package:flutter_svg/flutter_svg.dart ' ;
import ' package:font_awesome_flutter/font_awesome_flutter.dart ' ;
import ' package:provider/provider.dart ' ;
import ' package:diplomaticquarterapp/services/robo_search/event_provider.dart ' ;
import ' ../../locator.dart ' ;
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 ' ;
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 ;
final bool isBottomBar ;
final Widget floatingActionButton ;
final bool isPharmacy ;
final String title ;
final String description ;
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 ;
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 . isBottomBar ,
this . backgroundColor ,
this . preferredSize = 0.0 ,
this . appBarIcons ,
this . appBarWidget ,
this . image ,
this . infoList ,
this . isHelp = false } ) ;
@ override
Widget build ( BuildContext context ) {
AppGlobal . context = context ;
PreferredSizeWidget appBar ;
projectProvider = Provider . of ( context ) ;
if ( this . appBarWidget = = null ) {
PreferredSizeWidget appBarWidget = AppBarWidget (
appBarTitle ,
appBarIcons ,
isShowAppBar ,
isPharmacy: isPharmacy ,
isShowDecPage: isShowDecPage ,
image: image ,
) ;
appBar = preferredSize = = 0
? appBarWidget
: PreferredSize (
child: appBarWidget ,
preferredSize: Size . fromHeight ( preferredSize ) ) ;
} else {
appBar = this . appBarWidget ;
}
return Scaffold (
backgroundColor:
backgroundColor ? ? Theme . of ( context ) . scaffoldBackgroundColor ,
appBar: appBar ,
body: ( ! Provider . of < ProjectViewModel > ( context , listen: false ) . isLogin & &
isShowDecPage )
? NotAutPage (
title: appBarTitle ,
description: description ,
infoList: infoList ,
)
: baseViewModel ! = null
? NetworkBaseView (
child: buildBodyWidget ( context ) ,
baseViewModel: baseViewModel ,
)
: buildBodyWidget ( context ) ,
bottomSheet: bottomSheet ,
// floatingActionButton: floatingActionButton ?? floatingActionButton,
// bottomNavigationBar:
// this.isBottomBar == true ? BottomBarSearch() : SizedBox()
//floatingActionButton: FloatingSearchButton(),
) ;
}
buildAppLoaderWidget ( bool isLoading ) {
return isLoading ? AppLoaderWidget ( ) : Container ( ) ;
}
buildBodyWidget ( context ) {
// return body; //Stack(children: <Widget>[body, buildAppLoaderWidget(isLoading)]);
return Stack ( children: < Widget > [
body ,
isHelp ? RobotIcon ( ) : Container ( )
/*FloatingSearchButton()*/
] ) ;
}
}
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 ( ) ;
bool isAnimation = true ;
@ override
void initState ( ) {
event . controller . stream . listen ( ( p ) {
if ( p [ ' animationEnable ' ] = = ' false ' ) {
setState ( ( ) {
if ( this . mounted ) {
this . isAnimation = false ;
}
} ) ;
}
} ) ;
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
) ;
}
}