start minimal

This commit is contained in:
Mohamed Nouffer
2023-06-02 10:50:56 +05:30
parent 08332d45d4
commit a358f65853
54 changed files with 467 additions and 1327 deletions

View File

@ -0,0 +1,15 @@
import 'package:flutter/material.dart';
import 'package:rogapp/theme/theme.dart';
class UIs{
static AppBar appBar(){
return AppBar(
title: const Icon(
Icons.access_alarm,
size:30,
color: Pallete.WHITE_COLOR,
),
centerTitle: true,
);
}
}

View File

@ -8,6 +8,7 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rogapp/pages/index/index_binding.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/theme/theme.dart';
import 'package:rogapp/utils/string_values.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:path/path.dart' as p;
@ -46,18 +47,14 @@ class MyApp extends StatelessWidget {
//locale: const Locale('en', 'US'),
fallbackLocale: const Locale('en', 'US'),
title: 'ROGAINING',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
textTheme: GoogleFonts.muliTextTheme(),
),
theme: AppTheme.theme,
debugShowCheckedModeBanner: false,
defaultTransition: Transition.cupertino,
opaqueRoute: Get.isOpaqueRouteDefault,
popGesture: Get.isPopGestureEnable,
transitionDuration: const Duration(milliseconds: 230),
initialBinding: IndexBinding(), //HomeBinding(),
initialRoute: AppPages.PERMISSION,
//initialBinding: IndexBinding(), //HomeBinding(),
initialRoute: AppPages.S_LOGIN,
getPages: AppPages.routes,
enableLog: true,
);

View File

@ -1,156 +1,233 @@
import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rogapp/routes/app_pages.dart';
class PermissionHandlerScreen extends StatefulWidget {
PermissionHandlerScreen({Key? key}) : super(key: key);
const PermissionHandlerScreen({super.key});
@override
State<PermissionHandlerScreen> createState() => _PermissionHandlerScreenState();
}
class _PermissionHandlerScreenState extends State<PermissionHandlerScreen> {
Future<void> _showMyDialog() async {
return showDialog<void>(
context: context,
barrierDismissible: false, // user must tap button!
builder: (BuildContext context) {
return AlertDialog(
title: const Text('ロケーション許可'),
content: SingleChildScrollView(
child: ListBody(
children: const <Widget>[
Text( 'このアプリでは、位置情報の収集を行います。'),
Text( 'このアプリでは、開始時点で位置情報を収集します。'),
],
),
),
actions: <Widget>[
TextButton(
child: const Text('わかった'),
onPressed: () {
//Navigator.of(context).pop();
Get.toNamed(AppPages.TRAVEL);
},
),
],
);
},
);
}
@override
void initState() {
// TODO: implement initState
void initState(){
super.initState();
//permissionServiceCall();
_checkPermissions();
}
Future<PermissionStatus> checkLocationPermission() async {
return await Permission.location.status;
}
void _checkPermissions() async {
// You can ask for multiple permissions at once.
Map<Permission, PermissionStatus> statuses = await [
Permission.location,
Permission.camera,
].request();
permissionServiceCall() async {
await permissionServices().then(
(value) {
if (value != null) {
if (value[Permission.location]!.isGranted ) {
/* ========= New Screen Added ============= */
bool isCameraGranted = statuses[Permission.camera]!.isGranted;
bool isLocationGranted = statuses[Permission.location]!.isGranted;
Get.toNamed(AppPages.TRAVEL);
if (!isCameraGranted || !isLocationGranted) {
bool isCameraPermanentlyDenied = statuses[Permission.camera]!.isPermanentlyDenied;
bool isLocationPermanentlyDenied = statuses[Permission.location]!.isPermanentlyDenied;
// Navigator.pushReplacement(
// context,
// MaterialPageRoute(builder: (context) => SplashScreen()),
// );
}
else{
_showMyDialog();
}
}
},
);
}
/*Permission services*/
Future<Map<Permission, PermissionStatus>> permissionServices() async {
// You can request multiple permissions at once.
Map<Permission, PermissionStatus> statuses = await [
Permission.location,
//add more permission to request here.
].request();
if (statuses[Permission.location]!.isPermanentlyDenied) {
await openAppSettings().then(
(value) async {
if (value) {
if (await Permission.location.status.isPermanentlyDenied == true &&
await Permission.location.status.isGranted == false) {
// openAppSettings();
permissionServiceCall(); /* opens app settings until permission is granted */
}
}
if (isCameraPermanentlyDenied || isLocationPermanentlyDenied) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Permissions not granted'),
content: const Text(
'This app needs camera and location permissions to function. Please open settings and grant permissions.'),
actions: <Widget>[
ElevatedButton(
child: const Text('Open settings'),
onPressed: () {
openAppSettings();
},
),
],
);
},
);
} else {
if (statuses[Permission.location]!.isDenied) {
permissionServiceCall();
}
// ask permissions again
_checkPermissions();
}
/*{Permission.camera: PermissionStatus.granted, Permission.storage: PermissionStatus.granted}*/
return statuses;
} else {
Get.toNamed(AppPages.INITIAL);
}
}
@override
Widget build(BuildContext context) {
var status = Permission.location.status.then((value){
if(value.isGranted == false){
Future.delayed(Duration.zero, () => showAlert(context));
}
else {
Get.toNamed(AppPages.TRAVEL);
}
});
return Scaffold(
body: Container(
child: Text(""),
),
);
}
void showAlert(BuildContext context) {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: const Text('ロケーション許可'),
content: SingleChildScrollView(
child: ListBody(
children: const <Widget>[
Text( 'このアプリでは、位置情報の収集を行います。'),
Text('岐阜ナビアプリではチェックポイントの自動チェックインの機能を可能にするために、現在地のデータが収集されます。アプリを閉じている時や、使用していないときにも収集されます。位置情報は、個人を特定できない統計的な情報として、ユーザーの個人情報とは一切結びつかない形で送信されます。お知らせの配信、位置情報の利用を許可しない場合は、この後表示されるダイアログで「許可しない」を選択してください。'),
],
),
),
actions: <Widget>[
TextButton(
child: const Text('わかった'),
onPressed: () {
permissionServiceCall();
},
),
],
)
return const Scaffold(
body: Center(
child: Text('Checking permissions...'),
),
);
}
}
}
// import 'package:flutter/material.dart';
// import 'package:get/get.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:rogapp/routes/app_pages.dart';
// class PermissionHandlerScreen extends StatefulWidget {
// PermissionHandlerScreen({Key? key}) : super(key: key);
// @override
// State<PermissionHandlerScreen> createState() => _PermissionHandlerScreenState();
// }
// class _PermissionHandlerScreenState extends State<PermissionHandlerScreen> {
// Future<void> _showMyDialog() async {
// return showDialog<void>(
// context: context,
// barrierDismissible: false, // user must tap button!
// builder: (BuildContext context) {
// return AlertDialog(
// title: const Text('ロケーション許可'),
// content: SingleChildScrollView(
// child: ListBody(
// children: const <Widget>[
// Text( 'このアプリでは、位置情報の収集を行います。'),
// Text( 'このアプリでは、開始時点で位置情報を収集します。'),
// ],
// ),
// ),
// actions: <Widget>[
// TextButton(
// child: const Text('わかった'),
// onPressed: () {
// //Navigator.of(context).pop();
// Get.toNamed(AppPages.TRAVEL);
// },
// ),
// ],
// );
// },
// );
// }
// @override
// void initState() {
// // TODO: implement initState
// super.initState();
// //permissionServiceCall();
// }
// Future<PermissionStatus> checkLocationPermission() async {
// return await Permission.location.status;
// }
// permissionServiceCall() async {
// await permissionServices().then(
// (value) {
// if (value != null) {
// if (value[Permission.location]!.isGranted ) {
// /* ========= New Screen Added ============= */
// Get.toNamed(AppPages.TRAVEL);
// // Navigator.pushReplacement(
// // context,
// // MaterialPageRoute(builder: (context) => SplashScreen()),
// // );
// }
// else{
// _showMyDialog();
// }
// }
// },
// );
// }
// /*Permission services*/
// Future<Map<Permission, PermissionStatus>> permissionServices() async {
// // You can request multiple permissions at once.
// Map<Permission, PermissionStatus> statuses = await [
// Permission.location,
// //add more permission to request here.
// ].request();
// if (statuses[Permission.location]!.isPermanentlyDenied) {
// await openAppSettings().then(
// (value) async {
// if (value) {
// if (await Permission.location.status.isPermanentlyDenied == true &&
// await Permission.location.status.isGranted == false) {
// // openAppSettings();
// permissionServiceCall(); /* opens app settings until permission is granted */
// }
// }
// },
// );
// } else {
// if (statuses[Permission.location]!.isDenied) {
// permissionServiceCall();
// }
// }
// /*{Permission.camera: PermissionStatus.granted, Permission.storage: PermissionStatus.granted}*/
// return statuses;
// }
// @override
// Widget build(BuildContext context) {
// var status = Permission.location.status.then((value){
// if(value.isGranted == false){
// Future.delayed(Duration.zero, () => showAlert(context));
// }
// else {
// Get.toNamed(AppPages.TRAVEL);
// }
// });
// return Scaffold(
// body: Container(
// child: Text(""),
// ),
// );
// }
// void showAlert(BuildContext context) {
// showDialog(
// context: context,
// builder: (_) => AlertDialog(
// title: const Text('ロケーション許可'),
// content: SingleChildScrollView(
// child: ListBody(
// children: const <Widget>[
// Text( 'このアプリでは、位置情報の収集を行います。'),
// Text('岐阜ナビアプリではチェックポイントの自動チェックインの機能を可能にするために、現在地のデータが収集されます。アプリを閉じている時や、使用していないときにも収集されます。位置情報は、個人を特定できない統計的な情報として、ユーザーの個人情報とは一切結びつかない形で送信されます。お知らせの配信、位置情報の利用を許可しない場合は、この後表示されるダイアログで「許可しない」を選択してください。'),
// ],
// ),
// ),
// actions: <Widget>[
// TextButton(
// child: const Text('わかった'),
// onPressed: () {
// permissionServiceCall();
// },
// ),
// ],
// )
// );
// }
// }

View File

@ -20,6 +20,9 @@ import 'package:rogapp/pages/register/register_page.dart';
import 'package:rogapp/pages/search/search_binding.dart';
import 'package:rogapp/pages/search/search_page.dart';
import 'package:rogapp/pages/subperf/subperf_page.dart';
import 'package:rogapp/screens/auth/views/login/login_screen.dart';
import 'package:rogapp/screens/auth/views/register/register_screen.dart';
import 'package:rogapp/screens/home/home_screen.dart';
import 'package:rogapp/spa/spa_binding.dart';
import 'package:rogapp/spa/spa_page.dart';
@ -28,6 +31,10 @@ part 'app_routes.dart';
class AppPages {
static const S_HOME = Routes.S_HOME;
static const S_LOGIN = Routes.S_LOGIN;
static const S_REGISTER= Routes.S_REGISTER;
// ignore: constant_identifier_names
static const INITIAL = Routes.INDEX;
// ignore: constant_identifier_names
@ -60,6 +67,20 @@ class AppPages {
// page: () => MapPage(),
// binding: MapBinding(),
// )
GetPage(
name: Routes.S_HOME,
page: () => HomeScreen(),
//binding: IndexBinding(),
),
GetPage(
name: Routes.S_LOGIN,
page: () => LoginScreen(),
//binding: IndexBinding(),
),
GetPage(
name: Routes.S_REGISTER,
page: () => RegisterScreen(),
),
GetPage(
name: Routes.INDEX,
page: () => IndexPage(),

View File

@ -1,6 +1,9 @@
part of 'app_pages.dart';
abstract class Routes {
static const S_HOME = '/s_home';
static const S_LOGIN = '/s_login';
static const S_REGISTER = '/s_register';
// Main Menu Route
// static const HOME = '/';
// static const MAP = '/map';

View File

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
import 'package:rogapp/theme/pallete.dart';
class AuthTextField extends StatelessWidget {
final TextEditingController controller;
final String hinttext;
final bool isObsque;
const AuthTextField({super.key, required this.controller, required this.hinttext, this.isObsque = false});
@override
Widget build(BuildContext context) {
return TextFormField(
controller: controller,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: const BorderSide(
color: Pallete.BLUE_COLOR,
width: 2
)
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: const BorderSide(
color: Pallete.BROWN_COLOR,
)
),
contentPadding: const EdgeInsets.all(22),
hintText: hinttext,
hintStyle: const TextStyle(
fontSize: 18,
)
),
);
}
}

View File

@ -0,0 +1,30 @@
import 'package:rogapp/theme/theme.dart';
import 'package:flutter/material.dart';
class RoundedSmallButton extends StatelessWidget {
final VoidCallback onTap;
final String label;
final Color backgroundColor;
final Color textColor;
const RoundedSmallButton({
super.key,
required this.onTap,
required this.label,
this.backgroundColor = Pallete.WHITE_COLOR,
this.textColor = Pallete.BACKGROUND_COLOR,
});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: onTap,
child: Chip(
label: Text(label, style: TextStyle(color: textColor, fontSize: 16),),
backgroundColor: backgroundColor,
labelPadding:const EdgeInsets.symmetric(horizontal: 10, vertical: 3),
),
);
}
}

View File

@ -0,0 +1,5 @@
import 'package:get/get.dart';
class LoginController extends GetxController{
}

View File

@ -0,0 +1,67 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/common/ui/widgets/uis.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/screens/auth/common/uis/auth_text_field.dart';
import 'package:rogapp/screens/auth/common/uis/rounded_small_button.dart';
import 'package:rogapp/theme/theme.dart';
class LoginScreen extends StatelessWidget {
final emailController = TextEditingController();
final passwordController = TextEditingController();
LoginScreen({super.key});
void login(){
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: UIs.appBar(),
body: Center(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
height: MediaQuery.of(context).size.height/6,
decoration: const BoxDecoration(
image:DecorationImage(image: AssetImage('assets/images/login_image.jpg'))
),
),
const SizedBox(height: 5,),
AuthTextField(controller: emailController, hinttext: 'Email',),
const SizedBox(height: 25,),
AuthTextField(controller: passwordController, hinttext: 'Password',),
const SizedBox(height: 40,),
Align(
alignment: Alignment.topRight,
child: RoundedSmallButton(onTap: login, label: 'Done',),
),
const SizedBox(height: 40,),
RichText(
text: TextSpan(
text: "Don't have an account?",
style: const TextStyle(fontSize: 16, color: Pallete.BROWN_COLOR),
children: [
TextSpan(
text: " Signup",
style: const TextStyle(color: Pallete.BLUE_COLOR, fontSize: 16),
recognizer: TapGestureRecognizer()..onTap = (){
Get.toNamed(AppPages.S_REGISTER);
},
),
]
)
)
],
),
),
),
)
);
}
}

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class RegisterScreen extends StatelessWidget {
const RegisterScreen({super.key});
@override
Widget build(BuildContext context) {
return Container();
}
}

View File

View File

View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Placeholder();
}
}

View File

@ -11,8 +11,7 @@ class ActionService{
String server_url = ConstValues.currentServer();
String url = "${server_url}/api/makeaction/?user_id=${user_id}&location_id=${location_id}&wanttogo=${wanttogo}&like=${like}&checkin=${checkin}";
//String url = "http://localhost:8100/api/makeaction/?user_id=${user_id}&location_id=${location_id}&wanttogo=${wanttogo}&like=${like}&checkin=${checkin}";
print('++++++++${url}');
print("url is ------ ${url}");
print('@@@@@@+++ action_service MAKEACTION - GET, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{
@ -31,7 +30,7 @@ class ActionService{
List<dynamic> cats = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/useraction/?user_id=${user_id}&location_id=${location_id}';
print('++++++++${url}');
print('@@@@@@+++ action_service USERACTION - GET, @@@@@@ ${url}');
//String url = 'http://localhost:8100/api/useraction/?user_id=${user_id}&location_id=${location_id}';
final response = await http.get(Uri.parse(url),
headers: <String, String>{

View File

@ -10,7 +10,7 @@ class AuthService{
Map<String, dynamic> changePassword = {};
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/change-password/';
print('++++++++${url}');
print('@@@@@@+++ auth_service CHANGE PASSWORD - PUT with old_password : ${oldpassword} new_password : ${newpassword}, @@@@@@ ${url}');
final http.Response response = await http.put(
Uri.parse(url),
headers: <String, String>{
@ -31,11 +31,11 @@ class AuthService{
static Future<Map<String, dynamic>> login(String email, String password) async {
print("------- in logged email ${email} pwd ${password} ###### --------");
//print("------- in logged email ${email} pwd ${password} ###### --------");
Map<String, dynamic> cats = {};
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/login/';
print('++++++++${url}');
print('@@@@@@+++ auth_service LOGIN - POST with email : ${email} password : ${password}, @@@@@@ ${url}');
//String url = 'http://localhost:8100/api/login/';
final http.Response response = await http.post(
Uri.parse(url),
@ -59,7 +59,7 @@ class AuthService{
Map<String, dynamic> cats = {};
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/register/';
print('++++++++${url}');
print('@@@@@@+++ auth_service REGISTER - POST with email : ${email} password : ${password}, @@@@@@ ${url}');
final http.Response response = await http.post(
Uri.parse(url),
headers: <String, String>{
@ -81,7 +81,7 @@ class AuthService{
Map<String, dynamic> cats = {};
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/delete-account/';
print('++++++++${url}');
print('@@@@@@+++ auth_service DELETE USER - GET with Authorization : Token ${token}, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{
@ -101,8 +101,7 @@ class AuthService{
List<dynamic> cats = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/userdetials?user_id=${userid}';
print('++++++++${url}');
print("---- UserDetails url is ${url}");
print('@@@@@@+++ auth_service USER DETAILS - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',

View File

@ -11,7 +11,7 @@ class CatService{
List<dynamic> cats = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/cats/?ln1=${lon1}&la1=${lat1}&ln2=${lon2}&la2=${lat2}&ln3=${lon3}&la3=${lat3}&ln4=${lon4}&la4=${lat4}';
print('++++++++${url}');
print('@@@@@@+++ cat_service LOADCATS - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -30,7 +30,7 @@ class CatService{
List<dynamic> cats = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/catbycity/?${cityname}';
print('++++++++${url}');
print('@@@@@@+++ cat_service CHANGE PASSWORD - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',

View File

@ -15,7 +15,7 @@ class DestinationService{
List<dynamic> cats = [];
String server_url = ConstValues.currentServer();
String url = "${server_url}/api/destinations/?user_id=${user_id}";
print('++++++++${url}');
print('@@@@@@+++ destination_service GETDESTINATIONS - GET, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{
@ -33,7 +33,7 @@ class DestinationService{
Map<String, dynamic> cats = {};
String server_url = ConstValues.currentServer();
String url = "${server_url}/api/delete_destination/?dest_id=${dest_id}";
print('++++++++${url}');
print('@@@@@@+++ destination_service DELETEDESTINATION - GET, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{
@ -52,7 +52,7 @@ class DestinationService{
int cats = 0;
String server_url = ConstValues.currentServer();
String url = "${server_url}/api/updateorder/?user_action_id=${action_id}&order=${order}&dir=${dir}";
print('++++++++${url}');
print('@@@@@@+++ destination_service UPDATEORDER - GET, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{

View File

@ -57,7 +57,7 @@ class ExternalService {
}
else {
String url = 'https://natnats.mobilous.com/start_from_rogapp';
print('++++++++${url}');
print('@@@@@@+++ external_service STARTROGAINING - POST with team_name : ${_team} event_code : ${_event_code}, @@@@@@ ${url}');
final http.Response response = await http.post(
Uri.parse(url),
headers: <String, String>{
@ -82,7 +82,6 @@ class ExternalService {
Future<Map<String, dynamic>> makeCheckpoint(int user_id, String token, String checkin_time, String teamname, int cp, String eventcode, String imageurl) async {
Map<String, dynamic> _res = {};
String url = 'https://natnats.mobilous.com/checkin_from_rogapp';
print('++++++++${url}');
final IndexController indexController = Get.find<IndexController>();
if(imageurl != null){
@ -106,7 +105,7 @@ class ExternalService {
String url1 = "${server_url}/api/checkinimage/";
final im1Bytes = File(imageurl!).readAsBytesSync();
String im1_64 = base64Encode(im1Bytes);
print('@@@@@@+++ external_service MAKECHECKPOINT - POST with user : ${user_id.toString()} team_name : ${teamname} event_code : ${eventcode} checkinimage : ${im1_64} checkintime : ${checkin_time} cp_number : ${cp.toString()}, @@@@@@ ${url1}');
final http.Response response = await http.post(
Uri.parse(url1),
headers: <String, String>{
@ -130,6 +129,8 @@ class ExternalService {
if(response.statusCode == 201){
//print('---- toekn is ${token} -----');
String imgUrl = _res["checkinimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net');
print('@@@@@@+++ external_service MAKECHECKPOINT - POST with team_name : ${teamname} event_code : ${eventcode} checkinimage : ${imgUrl} cp_number : ${cp.toString()}, @@@@@@ ${url}');
final http.Response response2 = await http.post(
Uri.parse(url),
headers: <String, String>{
@ -166,6 +167,7 @@ class ExternalService {
db.insertRogaining(_rog);
}
else {
print('@@@@@@+++ external_service MAKECHECKPOINT - POST with team_name : ${teamname} event_code : ${eventcode} cp_number : ${cp.toString()} image : "", @@@@@@ ${url}');
final http.Response response3 = await http.post(
Uri.parse(url),
headers: <String, String>{
@ -214,7 +216,7 @@ class ExternalService {
String url1 = "${server_url}/api/goalimage/";
final im1Bytes = File(image!).readAsBytesSync();
String im1_64 = base64Encode(im1Bytes);
print('@@@@@@+++ external_service MAKEGOAL - POST with user : ${user_id.toString()} team_name : ${teamname} event_code : ${eventcode} goaltime : ${goal_time} cp_number : -1 goalimage : ${im1_64}, @@@@@@ ${url1}');
final http.Response response = await http.post(
Uri.parse(url1),
headers: <String, String>{
@ -233,11 +235,10 @@ class ExternalService {
);
String url = 'https://natnats.mobilous.com/goal_from_rogapp';
print('++++++++${url}');
if (response.statusCode == 201) {
Map<String, dynamic> _res = json.decode(utf8.decode(response.bodyBytes));
print('----_res : ${_res} ----');
print('---- image url ${_res["goalimage"]} ----');
String imgUrl = _res["goalimage"].toString().replaceAll('http://localhost:8100', 'http://rogaining.sumasen.net');
print('@@@@@@+++ external_service MAKEGOAL - POST with team_name : ${teamname} event_code : ${eventcode} goal_time : ${goal_time} goalimage : ${imgUrl}, @@@@@@ ${url}');
final http.Response response2 = await http.post(
Uri.parse(url),
headers: <String, String>{
@ -265,7 +266,7 @@ class ExternalService {
static Future<Map<String, dynamic>> usersEventCode(String teamcode, String password) async {
Map<String, dynamic> _res = {};
String url = "https://natnats.mobilous.com/check_event_code?zekken_number=${teamcode}&password=${password}";
print('++++++++${url}');
print('@@@@@@+++ external_service USEREVENTCODE - GET, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{

View File

@ -61,7 +61,7 @@ class LocationService{
url = '${server_url}/api/inperf/?perf=' + perfecture;
}
}
print('++++++++${url}');
print('@@@@@@+++ location_service LOADLOCATIONFOR - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -80,7 +80,7 @@ class LocationService{
List<dynamic> ext = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/locsext/';
print('++++++++${url}');
print('@@@@@@+++ location_service GETLOCATIONEXT - POST, with token : ${token} @@@@@@ ${url}');
final response = await http.post(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -125,7 +125,7 @@ class LocationService{
url = '${server_url}/api/insubperf?subperf=' + subperfecture;
}
}
print('++++++++${url}');
print('@@@@@@+++ location_service LOADLOCATIONSUBFOR - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -169,7 +169,7 @@ class LocationService{
url = '${server_url}/api/inbound?ln1=${lon1}&la1=${lat1}&ln2=${lon2}&la2=${lat2}&ln3=${lon3}&la3=${lat3}&ln4=${lon4}&la4=${lat4}';
}
}
print('++++++++${url}');
print('@@@@@@+++ location_service LOADLOCATIONSBOUNDS - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -224,7 +224,7 @@ class LocationService{
url = '${server_url}/api/customarea?name=${name}';
}
}
print('++++++++${url}');
print('@@@@@@+++ location_service LOADCUSTOMLOCATIONS - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',

View File

@ -54,7 +54,7 @@ class MatrixService{
Map<String, dynamic> cats = {};
String url = "https://maps.googleapis.com/maps/api/directions/json?destination=${destination}&mode=${_mode}&waypoints=${locs}&origin=${origin}&key=AIzaSyAUBI1ablMKuJwGj2-kSuEhvYxvB1A-mOE";
print('++++++++${url}');
print('@@@@@@+++ matrix_service GETDESTINATIONS - GET, @@@@@@ ${url}');
final http.Response response = await http.get(
Uri.parse(url),
headers: <String, String>{

View File

@ -9,7 +9,7 @@ class PerfectureService{
List<dynamic> perfs = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/perf_main/';
print('++++++++${url}');
print('@@@@@@+++ perfeture_service LOADPERFECTURES - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -27,7 +27,7 @@ class PerfectureService{
List<dynamic> perfs = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/subperfinmain/?area=' + area;
print('++++++++${url}');
print('@@@@@@+++ perfeture_service LOADSUBPERFECTURES - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -46,7 +46,7 @@ class PerfectureService{
List<dynamic> perfs = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/mainperfext/?perf=' + id;
print('++++++++${url}');
print('@@@@@@+++ perfeture_service GETMAINPERFEXT - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -64,7 +64,7 @@ class PerfectureService{
List<dynamic> perfs = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/allgifuareas/?perf=' + perf;
print('++++++++${url}');
print('@@@@@@+++ perfeture_service LOADGIFUAREAS - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -82,7 +82,7 @@ class PerfectureService{
List<dynamic> perfs = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/customareanames';
print('++++++++${url}');
print('@@@@@@+++ perfeture_service LOADCUSTOMAREAS - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
@ -101,7 +101,7 @@ class PerfectureService{
List<dynamic> perfs = [];
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/perfext/?sub_perf=' + id;
print('++++++++${url}');
print('@@@@@@+++ perfeture_service GETSUBEXT - GET, @@@@@@ ${url}');
final response = await http.get(Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',

View File

@ -12,8 +12,8 @@ class TrackingService {
Map<String, dynamic> cats = {};
String server_url = ConstValues.currentServer();
String url = '${server_url}/api/track/';
print('++++++++${url}');
final geom = '{"type": "MULTIPOINT", "coordinates": [[${lon}, ${lat}]]}';
print('@@@@@@+++ tracking_service ADDTRAACK - POST, with user_id : ${user_id} geom : ${geom} @@@@@@ ${url}');
final http.Response response = await http.post(
Uri.parse(url),
headers: <String, String>{

17
lib/theme/app_theme.dart Normal file
View File

@ -0,0 +1,17 @@
import 'package:flutter/material.dart';
import 'package:rogapp/theme/pallete.dart';
class AppTheme {
static ThemeData theme = ThemeData.light(useMaterial3: true).copyWith(
scaffoldBackgroundColor: Pallete.WHITE_COLOR,
primaryColor: Pallete.BLUE_COLOR,
secondaryHeaderColor: Pallete.GREEN_COLOR,
appBarTheme: const AppBarTheme(
color: Pallete.BACKGROUND_COLOR,
elevation: 0
),
floatingActionButtonTheme: const FloatingActionButtonThemeData(
backgroundColor: Pallete.BLUE_COLOR
),
);
}

10
lib/theme/pallete.dart Normal file
View File

@ -0,0 +1,10 @@
import 'package:flutter/material.dart';
class Pallete {
static const Color BACKGROUND_COLOR = Color.fromRGBO(191, 33, 46, 1);
static const Color SEARCHBAR_COLOR = Color.fromRGBO(191, 33, 120, 1);
static const Color BLUE_COLOR = Color.fromRGBO(36, 163, 191, 1);
static const Color GREEN_COLOR = Color.fromRGBO(31, 140, 58, 1);
static const Color BROWN_COLOR = Color.fromRGBO(191, 135, 31, 1);
static const Color WHITE_COLOR = Colors.white;
}

3
lib/theme/theme.dart Normal file
View File

@ -0,0 +1,3 @@
export 'pallete.dart';
export 'app_theme.dart';