create user interface for request SOS, profile, and empty module screen
parent
20707745bb
commit
f924111815
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.7 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 10 KiB |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 17 KiB |
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:device_preview/device_preview.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import './utils/router.dart';
|
||||
import './utils/global.dart';
|
||||
|
||||
|
@ -33,14 +34,21 @@ class MyApp extends StatelessWidget {
|
|||
mediaQueryData.padding.top + mediaQueryData.padding.bottom;
|
||||
safeBlockHorizontal = (screenWidth - safeAreaHorizontal) / 100;
|
||||
safeBlockVertical = (screenHeight - safeAreaVertical) / 100;
|
||||
|
||||
return MaterialApp.router(
|
||||
// useInheritedMediaQuery: true,
|
||||
// locale: DevicePreview.locale(context),
|
||||
// builder: DevicePreview.appBuilder,
|
||||
routeInformationParser: goRouter.routeInformationParser,
|
||||
routerDelegate: goRouter.routerDelegate,
|
||||
routerDelegate: goRouter.routerDelegate,
|
||||
// routeInformationProvider: goRouter.routeInformationProvider,
|
||||
title: 'uniT2 - Universal Tracker and Tracer',
|
||||
theme: ThemeData(
|
||||
appBarTheme: const AppBarTheme(
|
||||
systemOverlayStyle: SystemUiOverlayStyle(
|
||||
statusBarBrightness: Brightness.dark,
|
||||
statusBarColor: Colors.black),
|
||||
),
|
||||
fontFamily: 'LexendDeca',
|
||||
),
|
||||
debugShowCheckedModeBanner: false,
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:fluttericon/font_awesome_icons.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:unit2/theme-data.dart/text-styles.dart';
|
||||
import 'package:unit2/utils/screen_info.dart';
|
||||
import '../../theme-data.dart/btn-style.dart';
|
||||
import '../../theme-data.dart/colors.dart';
|
||||
import '../../theme-data.dart/form-style.dart';
|
||||
import '../../utils/global.dart';
|
||||
import '../../utils/text_container.dart';
|
||||
import '../../utils/validators.dart';
|
||||
import '../../widgets/wave.dart';
|
||||
|
||||
class AddMobile extends StatelessWidget {
|
||||
AddMobile({super.key});
|
||||
final _formKey = GlobalKey<FormBuilderState>();
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
return true;
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: Colors.transparent,
|
||||
elevation: 0,
|
||||
leading: IconButton(
|
||||
icon: const Icon(
|
||||
FontAwesome.left_big,
|
||||
),
|
||||
onPressed: () {
|
||||
context.go(context.namedLocation('login'));
|
||||
},
|
||||
color: primary,
|
||||
),
|
||||
),
|
||||
resizeToAvoidBottomInset: true,
|
||||
body: SingleChildScrollView(
|
||||
child: SizedBox(
|
||||
height: screenHeight * .89,
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
right: 0,
|
||||
child: WaveReverse(height: blockSizeVertical * 8)),
|
||||
Container(
|
||||
height: screenHeight,
|
||||
padding: isMobile()
|
||||
? const EdgeInsets.symmetric(horizontal: 24)
|
||||
: const EdgeInsets.symmetric(horizontal: 60),
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(
|
||||
height: isMobile()
|
||||
? screenHeight * .12
|
||||
: screenHeight * .20),
|
||||
SvgPicture.asset(
|
||||
'assets/svgs/add_mobile.svg',
|
||||
height: isMobile()
|
||||
? blockSizeVertical * 22
|
||||
: blockSizeVertical * 30,
|
||||
allowDrawingOutsideViewBox: true,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
Text(addMobile, style: titleTextStyle()),
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Text(addMobileCaption,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.caption),
|
||||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
FormBuilder(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
children: [
|
||||
// Mobile number 1
|
||||
FormBuilderTextField(
|
||||
name: 'mobile1',
|
||||
validator: mobileNumberValidator,
|
||||
decoration: normalTextFieldStyle(
|
||||
"mobile number 1", "+63")),
|
||||
const SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
FormBuilderTextField(
|
||||
name: 'mobile2',
|
||||
validator: mobileNumberValidator,
|
||||
decoration: normalTextFieldStyle(
|
||||
"mobile number 2", "+63")),
|
||||
|
||||
SizedBox(
|
||||
height: isMobile()
|
||||
? blockSizeVertical * 3
|
||||
: blockSizeHorizontal * 5),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
height: screenHeight * .06,
|
||||
child: ElevatedButton(
|
||||
style: secondaryBtnStyle(second,
|
||||
Colors.transparent, Colors.white54),
|
||||
child: const Text(
|
||||
submit,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
onPressed: () {
|
||||
context.go(
|
||||
context.namedLocation('request-sos'));
|
||||
// if (_formKey.currentState.validate()) {
|
||||
// _formKey.currentState.save();
|
||||
// BlocProvider.of<UserBloc>(context)
|
||||
// .add(UserWebLogin(
|
||||
// password: password,
|
||||
// username: username));
|
||||
// }
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
))
|
||||
]),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:fluttericon/font_awesome5_icons.dart';
|
||||
|
||||
import '../../../theme-data.dart/colors.dart';
|
||||
|
||||
class Mobile extends StatelessWidget {
|
||||
final String title;
|
||||
final String subtitle;
|
||||
final Function onPressed;
|
||||
const Mobile({
|
||||
super.key,
|
||||
required this.title,
|
||||
required this.subtitle,
|
||||
required this.onPressed,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListTile(
|
||||
leading: const Icon(
|
||||
FontAwesome5.sim_card,
|
||||
color: second,
|
||||
),
|
||||
title: Text(title),
|
||||
subtitle: Text(
|
||||
subtitle,
|
||||
style: Theme.of(context).textTheme.caption,
|
||||
),
|
||||
trailing: IconButton(
|
||||
icon: const Icon(Icons.edit),
|
||||
onPressed: () {
|
||||
onPressed();
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:fluttericon/font_awesome5_icons.dart';
|
||||
import 'package:fluttericon/typicons_icons.dart';
|
||||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import 'package:unit2/screen/sos/components/mobile.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
|
||||
import '../../theme-data.dart/btn-style.dart';
|
||||
import '../../theme-data.dart/form-style.dart';
|
||||
import '../../utils/global.dart';
|
||||
|
||||
class RequestSOS extends StatefulWidget {
|
||||
const RequestSOS({super.key});
|
||||
|
||||
@override
|
||||
State<RequestSOS> createState() => _RequestSOSState();
|
||||
}
|
||||
|
||||
class _RequestSOSState extends State<RequestSOS> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SafeArea(
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: true,
|
||||
title: const Text(sOSTitle),
|
||||
backgroundColor: second,
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
child: Container(
|
||||
height: screenHeight * .89,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 10),
|
||||
child: Column(
|
||||
children: [
|
||||
SizedBox(
|
||||
height: blockSizeVertical * 2,
|
||||
),
|
||||
SvgPicture.asset(
|
||||
'assets/svgs/request_sos.svg',
|
||||
height: blockSizeVertical * 22,
|
||||
allowDrawingOutsideViewBox: true,
|
||||
),
|
||||
Mobile(
|
||||
title: "09661548775",
|
||||
subtitle: mobile1,
|
||||
onPressed: () {}),
|
||||
const Divider(),
|
||||
Mobile(
|
||||
title: "09661548775",
|
||||
subtitle: mobile2,
|
||||
onPressed: () {}),
|
||||
const Divider(),
|
||||
ListTile(
|
||||
leading: const Icon(
|
||||
Typicons.location,
|
||||
color: second,
|
||||
),
|
||||
title: Text("Latitude/Longitude"),
|
||||
subtitle: Text(
|
||||
currentLocation,
|
||||
style: Theme.of(context).textTheme.caption,
|
||||
),
|
||||
),
|
||||
FormBuilderTextField(
|
||||
name: "message",
|
||||
validator: FormBuilderValidators.compose([
|
||||
FormBuilderValidators.required(
|
||||
errorText: "Message is required")
|
||||
]),
|
||||
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||
maxLines: 5,
|
||||
decoration: normalTextFieldStyle("", "SOS message.."),
|
||||
),
|
||||
Expanded(
|
||||
child: SizedBox(),
|
||||
),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
height: screenHeight * .06,
|
||||
child: ElevatedButton(
|
||||
style: secondaryBtnStyle(
|
||||
second, Colors.transparent, Colors.white54),
|
||||
child: const Text(
|
||||
submit,
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
onPressed: () {
|
||||
// if (_formKey.currentState.validate()) {
|
||||
// _formKey.currentState.save();
|
||||
// BlocProvider.of<UserBloc>(context)
|
||||
// .add(UserWebLogin(
|
||||
// password: password,
|
||||
// username: username));
|
||||
// }
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
)),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,133 @@
|
|||
import 'package:animate_do/animate_do.dart';
|
||||
import 'package:auto_size_text/auto_size_text.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:unit2/theme-data.dart/btn-style.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import '../../theme-data.dart/colors.dart';
|
||||
import '../../utils/global.dart';
|
||||
|
||||
class SOSreceived extends StatelessWidget {
|
||||
final Function onpressed;
|
||||
const SOSreceived({required Key key, required this.onpressed})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 40, horizontal: 35),
|
||||
height: screenHeight,
|
||||
child: Stack(
|
||||
children: [
|
||||
Positioned(
|
||||
bottom: 0,
|
||||
child: SizedBox(
|
||||
width: screenWidth,
|
||||
height: screenHeight / 2,
|
||||
child: Opacity(
|
||||
opacity: .2,
|
||||
child: Image.asset(
|
||||
"assets/emergency.png",
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
),
|
||||
)),
|
||||
Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SizedBox(
|
||||
height: blockSizeVertical * 6,
|
||||
),
|
||||
Bounce(
|
||||
from: 20,
|
||||
infinite: true,
|
||||
delay: const Duration(milliseconds: 800),
|
||||
child: Stack(
|
||||
alignment: AlignmentDirectional.topCenter,
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.only(top: 20),
|
||||
child: CircleAvatar(
|
||||
radius: blockSizeVertical * 8,
|
||||
backgroundColor: second,
|
||||
child: Container(
|
||||
margin: const EdgeInsets.only(top: 25),
|
||||
child: SvgPicture.asset(
|
||||
'assets/sos.svg',
|
||||
height: blockSizeHorizontal * 17,
|
||||
color: Colors.white,
|
||||
allowDrawingOutsideViewBox: true,
|
||||
alignment: Alignment.bottomCenter,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: blockSizeVertical * 3,
|
||||
child: SpinKitPulse(
|
||||
color: primary,
|
||||
size: 120,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
SlideInUp(
|
||||
from: 50,
|
||||
child: AutoSizeText(
|
||||
"SOS Received!",
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.displayMedium!.copyWith(
|
||||
fontSize: 40,
|
||||
color: third,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
SlideInUp(
|
||||
from: 50,
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(15),
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.all(Radius.circular(15))),
|
||||
child: AutoSizeText(
|
||||
sOSReceivedMessage,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.caption!.copyWith(
|
||||
fontSize: 16,
|
||||
color: Colors.black87,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 40,
|
||||
),
|
||||
Expanded(child: Container()),
|
||||
SlideInUp(
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
width: 200,
|
||||
child: TextButton(
|
||||
style: mainBtnStyle(second, Colors.transparent, second),
|
||||
onPressed: () {},
|
||||
child: const Text("Cancel request",
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
)),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_zoom_drawer/config.dart';
|
||||
import 'package:flutter_zoom_drawer/flutter_zoom_drawer.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
import 'menu-screen.dart';
|
||||
import '../module-screen.dart';
|
||||
|
||||
class DrawerScreen extends StatefulWidget {
|
||||
const DrawerScreen({Key? key}) : super(key: key);
|
||||
@override
|
||||
State<DrawerScreen> createState() => _DrawerScreenState();
|
||||
}
|
||||
|
||||
class _DrawerScreenState extends State<DrawerScreen> {
|
||||
final zoomDrawerController = ZoomDrawerController();
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ZoomDrawer(
|
||||
controller: zoomDrawerController,
|
||||
menuScreen: const MenuScreen(),
|
||||
mainScreen: const MainScreen(),
|
||||
style: DrawerStyle.defaultStyle,
|
||||
borderRadius: 24.0,
|
||||
showShadow: false,
|
||||
angle: -0.0,
|
||||
slideWidth: MediaQuery.of(context).size.width * .90,
|
||||
openCurve: Curves.fastOutSlowIn,
|
||||
closeCurve: Curves.easeOut,
|
||||
menuBackgroundColor: Colors.grey,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:unit2/theme-data.dart/text-styles.dart';
|
||||
|
||||
import '../../../../utils/global.dart';
|
||||
import '../../../../utils/text_container.dart';
|
||||
|
||||
class NoModule extends StatelessWidget {
|
||||
const NoModule({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 25),
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset(
|
||||
'assets/svgs/no_module.svg',
|
||||
height: blockSizeVertical * 30,
|
||||
allowDrawingOutsideViewBox: true,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
Text(
|
||||
noModule,
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.displayLarge!
|
||||
.copyWith(fontSize: blockSizeVertical * 5, height: .8),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 5,
|
||||
),
|
||||
Text(
|
||||
noModuleSubTitle,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.caption!
|
||||
.copyWith(fontSize: blockSizeVertical * 1.5),
|
||||
textAlign: TextAlign.center,
|
||||
)
|
||||
]),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
import 'package:fluttericon/web_symbols_icons.dart';
|
||||
import 'package:fluttericon/typicons_icons.dart';
|
||||
import 'package:fluttericon/font_awesome5_icons.dart';
|
||||
import 'menu.dart';
|
||||
import '../../../../utils/global.dart';
|
||||
|
||||
class MenuScreen extends StatefulWidget {
|
||||
const MenuScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<MenuScreen> createState() => _MenuScreenState();
|
||||
}
|
||||
|
||||
class _MenuScreenState extends State<MenuScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SafeArea(
|
||||
child: Drawer(
|
||||
child: SingleChildScrollView(
|
||||
child: SizedBox(
|
||||
height: blockSizeVertical * 96,
|
||||
child: Column(
|
||||
// ignore: prefer_const_literals_to_create_immutables
|
||||
children: <Widget>[
|
||||
const UserAccountsDrawerHeader(
|
||||
decoration: BoxDecoration(
|
||||
color: primary,
|
||||
image: DecorationImage(
|
||||
image: AssetImage('assets/pngs/bg.png'),
|
||||
fit: BoxFit.cover)),
|
||||
accountName: Text("ACUIN" ", " "RODOLFO" " " "BERNALIS"),
|
||||
accountEmail: null,
|
||||
currentAccountPicture: CircleAvatar(
|
||||
radius: 40,
|
||||
backgroundColor: fifth,
|
||||
child: CircleAvatar(
|
||||
radius: 33,
|
||||
backgroundColor: third,
|
||||
child: //Icon(Icons.person, size: 40, color: fifth),
|
||||
Text(
|
||||
"A",
|
||||
style: TextStyle(fontSize: 45.0, color: fifth),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
getTile(Typicons.user_outline, "Profile", 'profile', context),
|
||||
const Divider(),
|
||||
getTile(Typicons.home_outline, "Address", '/SelfAddressScreen',
|
||||
context),
|
||||
const Divider(),
|
||||
getTile(Typicons.contacts, "Contact Number",
|
||||
'/SelfContactScreen', context),
|
||||
const Divider(),
|
||||
getTile(Typicons.mail, "Email Address", '/SelfEmailAddScreen',
|
||||
context),
|
||||
const Divider(),
|
||||
getTile(FontAwesome5.life_ring, "Request SOS", 'request-sos',
|
||||
context),
|
||||
const Divider(),
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: FractionalOffset.bottomLeft,
|
||||
child: getTile(WebSymbols.logout, "Logout", '/', context),
|
||||
)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_zoom_drawer/flutter_zoom_drawer.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import '../../../../theme-data.dart/colors.dart';
|
||||
|
||||
Widget getTile(
|
||||
IconData icondata, String title, String route, BuildContext context) {
|
||||
return ListTile(
|
||||
dense: true,
|
||||
leading: Icon(
|
||||
icondata,
|
||||
color: primary,
|
||||
),
|
||||
title: Text(
|
||||
title,
|
||||
style: const TextStyle(color: Colors.black),
|
||||
),
|
||||
onTap: () async {
|
||||
debugPrint(title);
|
||||
ZoomDrawer.of(context)!.toggle();
|
||||
context.goNamed(route);
|
||||
},
|
||||
);
|
||||
}
|
|
@ -1,16 +1,53 @@
|
|||
import 'package:flutter/src/widgets/container.dart';
|
||||
import 'package:flutter/src/widgets/framework.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_zoom_drawer/flutter_zoom_drawer.dart';
|
||||
import 'package:unit2/theme-data.dart/colors.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
|
||||
class ModuleScreen extends StatefulWidget {
|
||||
const ModuleScreen({super.key});
|
||||
import 'components/empty_module.dart';
|
||||
|
||||
class MainScreen extends StatefulWidget {
|
||||
const MainScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<ModuleScreen> createState() => _ModuleScreenState();
|
||||
State<MainScreen> createState() => _MainScreenState();
|
||||
}
|
||||
|
||||
class _ModuleScreenState extends State<ModuleScreen> {
|
||||
class _MainScreenState extends State<MainScreen> {
|
||||
bool hasModule = false;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container();
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
return Future.value(true);
|
||||
},
|
||||
child: SafeArea(
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
backgroundColor: primary,
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
ZoomDrawer.of(context)!.toggle();
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.menu,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
centerTitle: true,
|
||||
title: const Text(
|
||||
unit2ModuleScreen,
|
||||
style: TextStyle(
|
||||
fontSize: 18.0,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
body: hasModule
|
||||
? const Center(
|
||||
child: Text('Main Screen'),
|
||||
)
|
||||
: const NoModule(),
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:fluttericon/font_awesome5_icons.dart';
|
||||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:unit2/utils/text_container.dart';
|
||||
import '../../../widgets/wave.dart';
|
||||
import '../../../utils/global.dart';
|
||||
import '../../../theme-data.dart/colors.dart';
|
||||
|
@ -53,12 +55,12 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
),
|
||||
|
||||
Text(
|
||||
"Welcome to!",
|
||||
welcome,
|
||||
style: TextStyle(
|
||||
fontSize: blockSizeVertical * 5,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
Text("uniT-App",
|
||||
Text(unitApp,
|
||||
style: TextStyle(
|
||||
fontSize: blockSizeVertical * 8,
|
||||
fontWeight: FontWeight.w800,
|
||||
|
@ -66,7 +68,7 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
height: 1,
|
||||
color: primary)),
|
||||
Text(
|
||||
"Please login to continue.",
|
||||
loginToContinue,
|
||||
style: TextStyle(
|
||||
fontSize: blockSizeVertical * 2,
|
||||
height: 1.5,
|
||||
|
@ -78,10 +80,8 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
// USERNAME
|
||||
FormBuilderTextField(
|
||||
name: 'username',
|
||||
validator: FormBuilderValidators.compose([
|
||||
FormBuilderValidators.required(
|
||||
errorText: "Username is required")
|
||||
]),
|
||||
validator: FormBuilderValidators.required(
|
||||
errorText: "Username is required"),
|
||||
autofocus: false,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
|
@ -93,10 +93,9 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
// PASSWORD
|
||||
FormBuilderTextField(
|
||||
name: 'password',
|
||||
validator: FormBuilderValidators.compose([
|
||||
FormBuilderValidators.required(
|
||||
errorText: "Password is required")
|
||||
]),
|
||||
validator: FormBuilderValidators.required(
|
||||
errorText: "Password is required"),
|
||||
|
||||
// initialValue: state.password,
|
||||
onChanged: (value) {
|
||||
value!.isEmpty
|
||||
|
@ -155,20 +154,14 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: ElevatedButton(
|
||||
style: btnStyle(
|
||||
style: mainBtnStyle(
|
||||
second, Colors.transparent, Colors.white54),
|
||||
child: const Text(
|
||||
"LOGIN",
|
||||
style: TextStyle(color: Colors.white),
|
||||
),
|
||||
onPressed: () async {
|
||||
if (_formKey.currentState!
|
||||
.saveAndValidate()) {
|
||||
debugPrint(
|
||||
_formKey.currentState!.value['name']);
|
||||
debugPrint(_formKey
|
||||
.currentState!.value['password']);
|
||||
}
|
||||
onPressed: () {
|
||||
context.go(context.namedLocation('home'));
|
||||
// if (_formKey.currentState.validate()) {
|
||||
// _formKey.currentState.save();
|
||||
// BlocProvider.of<UserBloc>(context)
|
||||
|
@ -189,14 +182,14 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
child: SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
child: ElevatedButton.icon(
|
||||
style: btnStyle(Colors.white, second,
|
||||
style: mainBtnStyle(Colors.white, second,
|
||||
primary.withOpacity(.4)),
|
||||
icon: const Icon(
|
||||
Icons.qr_code,
|
||||
color: second,
|
||||
),
|
||||
label: const Text(
|
||||
"Login via QR code",
|
||||
loginViaQr,
|
||||
style: TextStyle(color: second),
|
||||
),
|
||||
onPressed: () async {
|
||||
|
@ -208,8 +201,7 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
SizedBox(
|
||||
height: blockSizeVertical * 1,
|
||||
),
|
||||
const LoginViaQr(
|
||||
text: " Request Emergency Response "),
|
||||
const LoginViaQr(text: emergencyReponseLabel),
|
||||
SizedBox(
|
||||
height: blockSizeVertical * 1,
|
||||
),
|
||||
|
@ -222,13 +214,14 @@ class _UniT2LoginState extends State<UniT2Login> {
|
|||
FontAwesome5.life_ring,
|
||||
color: Colors.white,
|
||||
),
|
||||
style: btnStyle(
|
||||
style: mainBtnStyle(
|
||||
third, Colors.transparent, Colors.white38),
|
||||
onPressed: () {
|
||||
Navigator.pushNamed(context, '/SosScreen');
|
||||
context
|
||||
.go(context.namedLocation('add-mobile'));
|
||||
},
|
||||
label: const Text(
|
||||
"Request SOS",
|
||||
requestSOS,
|
||||
style: TextStyle(color: Colors.white),
|
||||
)),
|
||||
)
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CoverImage extends StatelessWidget {
|
||||
const CoverImage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
color: Colors.grey,
|
||||
child: CachedNetworkImage(
|
||||
imageUrl:
|
||||
'https://static.vecteezy.com/system/resources/thumbnails/008/074/253/small/tropical-forest-sunset-nature-background-with-coconut-trees-vector.jpg',
|
||||
width: double.infinity,
|
||||
height: 220,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:fluttericon/font_awesome5_icons.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import './components/cover-image.dart';
|
||||
|
||||
class Profile extends StatelessWidget {
|
||||
const Profile({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
return Future.value(true);
|
||||
},
|
||||
child: SafeArea(
|
||||
child: Scaffold(
|
||||
body: Stack(
|
||||
clipBehavior: Clip.none,
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
const CoverImage(),
|
||||
const Positioned(top: 125, child: BuildProfileImage()),
|
||||
Positioned(
|
||||
top: 10,
|
||||
left: 20,
|
||||
child: IconButton(
|
||||
onPressed: () {
|
||||
context.go(context.namedLocation('home'));
|
||||
},
|
||||
icon: const Icon(
|
||||
FontAwesome5.arrow_left,
|
||||
size: 24,
|
||||
color: Colors.white,
|
||||
),
|
||||
)),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class BuildInformation extends StatelessWidget {
|
||||
const BuildInformation({super.key});
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
Text(
|
||||
"Rodolfo Bernales Acuin",
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.headline5!
|
||||
.copyWith(fontWeight: FontWeight.bold),
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Icon(
|
||||
FontAwesome5.birthday_cake,
|
||||
color: Colors.blueAccent,
|
||||
),
|
||||
const SizedBox(
|
||||
width: 20,
|
||||
),
|
||||
Text(
|
||||
"july 14, 1994 | Male",
|
||||
style:
|
||||
Theme.of(context).textTheme.caption!.copyWith(fontSize: 22),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class BuildProfileImage extends StatelessWidget {
|
||||
const BuildProfileImage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
children: [
|
||||
Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
CircleAvatar(
|
||||
radius: 85,
|
||||
backgroundColor: Colors.white,
|
||||
),
|
||||
CircleAvatar(
|
||||
radius: 80,
|
||||
backgroundColor: Colors.grey.shade800,
|
||||
child: SvgPicture.asset(
|
||||
'assets/svgs/male.svg',
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
BuildInformation(),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
ButtonStyle btnStyle(Color background, Color borderColor, Color overlay) {
|
||||
ButtonStyle mainBtnStyle(Color background, Color borderColor, Color overlay) {
|
||||
return ButtonStyle(
|
||||
elevation: MaterialStateProperty.all<double>(0),
|
||||
backgroundColor: MaterialStateProperty.all<Color>(background),
|
||||
|
@ -13,3 +13,18 @@ ButtonStyle btnStyle(Color background, Color borderColor, Color overlay) {
|
|||
color: borderColor,
|
||||
))));
|
||||
}
|
||||
|
||||
ButtonStyle secondaryBtnStyle(
|
||||
Color background, Color borderColor, Color overlay) {
|
||||
return ButtonStyle(
|
||||
elevation: MaterialStateProperty.all<double>(0),
|
||||
backgroundColor: MaterialStateProperty.all<Color>(background),
|
||||
overlayColor: MaterialStateProperty.all<Color>(overlay),
|
||||
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
|
||||
RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
side: BorderSide(
|
||||
width: 2,
|
||||
color: borderColor,
|
||||
))));
|
||||
}
|
||||
|
|
|
@ -1,5 +1,53 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
InputDecoration normalTextFieldStyle(String labelText, String hintText) {
|
||||
return InputDecoration(
|
||||
contentPadding: EdgeInsets.fromLTRB(12, 6, 6, 6),
|
||||
floatingLabelBehavior: FloatingLabelBehavior.auto,
|
||||
labelText: labelText,
|
||||
labelStyle: const TextStyle(color: Colors.grey),
|
||||
hintText: hintText,
|
||||
hintStyle: const TextStyle(
|
||||
color: Colors.grey,
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: Colors.black87,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
color: Colors.grey,
|
||||
width: 1,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(
|
||||
width: 1,
|
||||
color: Colors.grey,
|
||||
),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
errorBorder: const OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: Colors.red,
|
||||
width: 1,
|
||||
),
|
||||
borderRadius: BorderRadius.all(Radius.circular(5)),
|
||||
),
|
||||
focusedErrorBorder: const OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: Colors.red,
|
||||
width: 1,
|
||||
),
|
||||
borderRadius: BorderRadius.all(Radius.circular(5)),
|
||||
),
|
||||
filled: false);
|
||||
}
|
||||
|
||||
InputDecoration loginTextFieldStyle() {
|
||||
return InputDecoration(
|
||||
floatingLabelBehavior: FloatingLabelBehavior.never,
|
||||
|
@ -37,4 +85,4 @@ InputDecoration loginTextFieldStyle() {
|
|||
borderRadius: BorderRadius.all(Radius.circular(5)),
|
||||
),
|
||||
filled: false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:unit2/utils/global.dart';
|
||||
|
||||
TextStyle titleTextStyle() {
|
||||
return TextStyle(
|
||||
fontSize: blockSizeVertical * 2.5, fontWeight: FontWeight.w500);
|
||||
}
|
|
@ -1,11 +1,36 @@
|
|||
import 'package:go_router/go_router.dart';
|
||||
import '../screen/sos/add_mobile.dart';
|
||||
import '../screen/sos/request_sos.dart';
|
||||
import '../screen/unit2/login/login.dart';
|
||||
import '../screen/unit2/homepage.dart/components/drawer-screen.dart';
|
||||
import '../screen/unit2/profile/profile.dart';
|
||||
|
||||
|
||||
final GoRouter goRouter = GoRouter(
|
||||
routes: [
|
||||
GoRoute(path: '/',
|
||||
builder: (context,state) => const UniT2Login()
|
||||
)
|
||||
]
|
||||
);
|
||||
final GoRouter goRouter = GoRouter(routes: <GoRoute>[
|
||||
GoRoute(
|
||||
path: '/',
|
||||
name: 'login',
|
||||
builder: (context, state) => const UniT2Login(),
|
||||
routes: [
|
||||
GoRoute(
|
||||
name: 'home',
|
||||
path: 'home',
|
||||
builder: (context, state) => const DrawerScreen(),
|
||||
routes: [
|
||||
GoRoute(
|
||||
name: 'profile',
|
||||
path: 'profile',
|
||||
builder: (context, state) => const Profile())
|
||||
]),
|
||||
GoRoute(
|
||||
name: 'add-mobile',
|
||||
path: 'add-moble',
|
||||
builder: (context, state) => AddMobile(),
|
||||
routes: [
|
||||
GoRoute(
|
||||
name: 'request-sos',
|
||||
path: 'request-sos',
|
||||
builder: (context, state) => const RequestSOS(),
|
||||
)
|
||||
]),
|
||||
]),
|
||||
]);
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
import 'package:unit2/utils/global.dart';
|
||||
|
||||
bool isMobile() {
|
||||
if (screenWidth > 500.00) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
const String addMobile = "Enter your mobile number(s)";
|
||||
const String addMobileCaption =
|
||||
"These mobile numbers will be used to contact you if you request an emergency response. Please provide at least one active number";
|
||||
const String mobileNumberRequired = "You must add atleast one mobile";
|
||||
const String numericValidator = "Please a number only";
|
||||
const String mobile1 = "Mobile number 1";
|
||||
const String mobile2 = "Mobile number 2";
|
||||
const String currentLocation = "You current location";
|
||||
const String noModule = "No Module Assigned";
|
||||
const String noModuleSubTitle =
|
||||
"Please contact the admin if you want to access a module.";
|
||||
const String submit = "SUBMIT";
|
||||
const String login = "LOGIN";
|
||||
const String sOSTitle = "Request SOS";
|
||||
const String sOSReceivedMessage =
|
||||
"your SOS request has been received. Please wait for respondent's acknowledgement.";
|
||||
const String unit2ModuleScreen = "uniT2 Modules";
|
||||
const String welcome = "Welcome to!";
|
||||
const String unitApp = 'uniT-App';
|
||||
const String loginToContinue = "Please login to continue.";
|
||||
const String loginViaQr = "Login via QR code";
|
||||
const String emergencyReponseLabel = " Request Emergency Response ";
|
||||
const String requestSOS = "Request SOS";
|
|
@ -0,0 +1,12 @@
|
|||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import '../utils/text_container.dart';
|
||||
|
||||
|
||||
final mobileNumberValidator = FormBuilderValidators.compose([
|
||||
FormBuilderValidators.required(
|
||||
errorText: mobileNumberRequired),
|
||||
FormBuilderValidators.numeric(
|
||||
errorText: numericValidator)
|
||||
]);
|
||||
|
||||
|
|
@ -5,8 +5,12 @@
|
|||
import FlutterMacOS
|
||||
import Foundation
|
||||
|
||||
import path_provider_macos
|
||||
import shared_preferences_macos
|
||||
import sqflite
|
||||
|
||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
|
||||
}
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
animate_do:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: animate_do
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -8,6 +15,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.9.0"
|
||||
auto_size_text:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: auto_size_text
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -15,6 +29,27 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
cached_network_image:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: cached_network_image
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.2.3"
|
||||
cached_network_image_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cached_network_image_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
cached_network_image_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cached_network_image_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -36,6 +71,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.16.0"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -83,6 +125,20 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_blurhash:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_blurhash
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.7.0"
|
||||
flutter_cache_manager:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_cache_manager
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.3.0"
|
||||
flutter_custom_clippers:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -109,6 +165,13 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_spinkit:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_spinkit
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
flutter_svg:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -167,7 +230,21 @@ packages:
|
|||
name: go_router
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.2.0"
|
||||
version: "3.1.1"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.13.5"
|
||||
http_parser:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.0.2"
|
||||
intl:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -231,6 +308,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
octo_image:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: octo_image
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -252,6 +336,27 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
path_provider:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.11"
|
||||
path_provider_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.22"
|
||||
path_provider_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_ios
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.11"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -259,6 +364,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.7"
|
||||
path_provider_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.6"
|
||||
path_provider_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -273,6 +385,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.3"
|
||||
pedantic:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pedantic
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.11.1"
|
||||
petitparser:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -308,6 +427,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.0.4"
|
||||
rxdart:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: rxdart
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.27.7"
|
||||
shared_preferences:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -376,6 +502,20 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.9.0"
|
||||
sqflite:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.0+3"
|
||||
sqflite_common:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite_common
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.4.0+2"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -397,6 +537,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
synchronized:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: synchronized
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.0+3"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -411,6 +558,20 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.12"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.1"
|
||||
uuid:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: uuid
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.7"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
@ -36,7 +36,7 @@ dependencies:
|
|||
# The following adds the Cupertino Icons font to your application.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
cupertino_icons: ^1.0.2
|
||||
go_router: ^5.2.0
|
||||
go_router: ^3.0.6
|
||||
flutter_custom_clippers: ^2.0.0
|
||||
flutter_svg: ^1.1.6
|
||||
flutter_form_builder: ^7.7.0
|
||||
|
@ -45,6 +45,10 @@ dependencies:
|
|||
fluttertoast: ^8.1.1
|
||||
device_preview: ^1.1.0
|
||||
flutter_zoom_drawer: ^3.0.3
|
||||
cached_network_image: ^3.2.3
|
||||
auto_size_text: ^3.0.0
|
||||
animate_do: ^3.0.2
|
||||
flutter_spinkit: ^5.1.0
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
Loading…
Reference in New Issue