mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-11-27 00:04:54 +00:00
Bug fixes, and updated the build number
This commit is contained in:
@ -5,7 +5,9 @@
|
|||||||
<application
|
<application
|
||||||
android:label="syncrow_app"
|
android:label="syncrow_app"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:allowBackup="false"
|
||||||
|
>
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
|
|||||||
@ -274,35 +274,39 @@ class AuthCubit extends Cubit<AuthState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTokenAndValidate() async {
|
getTokenAndValidate() async {
|
||||||
emit(AuthTokenLoading());
|
try {
|
||||||
const storage = FlutterSecureStorage();
|
emit(AuthTokenLoading());
|
||||||
final firstLaunch =
|
const storage = FlutterSecureStorage();
|
||||||
await SharedPreferencesHelper.readBoolFromSP(StringsManager.firstLaunch) ?? true;
|
final firstLaunch =
|
||||||
|
await SharedPreferencesHelper.readBoolFromSP(StringsManager.firstLaunch) ?? true;
|
||||||
|
|
||||||
if (firstLaunch) {
|
if (firstLaunch) {
|
||||||
storage.deleteAll();
|
storage.deleteAll();
|
||||||
}
|
|
||||||
|
|
||||||
await SharedPreferencesHelper.saveBoolToSP(StringsManager.firstLaunch, false);
|
|
||||||
|
|
||||||
final value = await storage.read(key: Token.loginAccessTokenKey) ?? '';
|
|
||||||
if (value.isEmpty) {
|
|
||||||
emit(AuthTokenError(message: "Token not found"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final tokenData = Token.decodeToken(value);
|
|
||||||
|
|
||||||
if (tokenData.containsKey('exp')) {
|
|
||||||
final exp = tokenData['exp'] ?? 0;
|
|
||||||
final currentTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
|
||||||
|
|
||||||
if (currentTime < exp) {
|
|
||||||
emit(AuthTokenSuccess());
|
|
||||||
} else {
|
|
||||||
emit(AuthTokenError(message: "Token expired"));
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
await SharedPreferencesHelper.saveBoolToSP(StringsManager.firstLaunch, false);
|
||||||
|
|
||||||
|
final value = await storage.read(key: Token.loginAccessTokenKey) ?? '';
|
||||||
|
if (value.isEmpty) {
|
||||||
|
emit(AuthTokenError(message: "Token not found"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final tokenData = Token.decodeToken(value);
|
||||||
|
|
||||||
|
if (tokenData.containsKey('exp')) {
|
||||||
|
final exp = tokenData['exp'] ?? 0;
|
||||||
|
final currentTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
||||||
|
|
||||||
|
if (currentTime < exp) {
|
||||||
|
emit(AuthTokenSuccess());
|
||||||
|
} else {
|
||||||
|
emit(AuthTokenError(message: "Token expired"));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emit(AuthTokenError(message: "Something went wrong"));
|
||||||
|
}
|
||||||
|
} catch (_) {
|
||||||
emit(AuthTokenError(message: "Something went wrong"));
|
emit(AuthTokenError(message: "Something went wrong"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,8 +30,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
List<SceneStaticFunction> tempTasksList = [];
|
List<SceneStaticFunction> tempTasksList = [];
|
||||||
final Map<String, dynamic> selectedValues = {};
|
final Map<String, dynamic> selectedValues = {};
|
||||||
|
|
||||||
FutureOr<void> _onAddSceneTask(
|
FutureOr<void> _onAddSceneTask(AddTaskEvent event, Emitter<CreateSceneState> emit) {
|
||||||
AddTaskEvent event, Emitter<CreateSceneState> emit) {
|
|
||||||
final copyList = List<SceneStaticFunction>.from(tempTasksList);
|
final copyList = List<SceneStaticFunction>.from(tempTasksList);
|
||||||
tasksList.addAll(copyList);
|
tasksList.addAll(copyList);
|
||||||
tempTasksList.clear();
|
tempTasksList.clear();
|
||||||
@ -90,15 +89,13 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
emit(AddSceneTask(tasksList: tasksList));
|
emit(AddSceneTask(tasksList: tasksList));
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _selectedValue(
|
FutureOr<void> _selectedValue(SelectedValueEvent event, Emitter<CreateSceneState> emit) {
|
||||||
SelectedValueEvent event, Emitter<CreateSceneState> emit) {
|
|
||||||
selectedValues[event.code] = event.value;
|
selectedValues[event.code] = event.value;
|
||||||
emit(SelectedTaskValueState(value: event.value));
|
emit(SelectedTaskValueState(value: event.value));
|
||||||
emit(AddSceneTask(tasksList: tasksList));
|
emit(AddSceneTask(tasksList: tasksList));
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _removeTaskById(
|
FutureOr<void> _removeTaskById(RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
|
||||||
RemoveTaskByIdEvent event, Emitter<CreateSceneState> emit) {
|
|
||||||
emit(CreateSceneLoading());
|
emit(CreateSceneLoading());
|
||||||
|
|
||||||
for (var element in tasksList) {
|
for (var element in tasksList) {
|
||||||
@ -145,8 +142,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _clearTaskList(
|
FutureOr<void> _clearTaskList(ClearTaskListEvent event, Emitter<CreateSceneState> emit) {
|
||||||
ClearTaskListEvent event, Emitter<CreateSceneState> emit) {
|
|
||||||
tasksList.clear();
|
tasksList.clear();
|
||||||
emit(AddSceneTask(tasksList: tasksList));
|
emit(AddSceneTask(tasksList: tasksList));
|
||||||
}
|
}
|
||||||
@ -158,8 +154,8 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
try {
|
try {
|
||||||
final response = await SceneApi.getSceneDetails(event.sceneId);
|
final response = await SceneApi.getSceneDetails(event.sceneId);
|
||||||
if (response.id.isNotEmpty) {
|
if (response.id.isNotEmpty) {
|
||||||
tasksList = List<SceneStaticFunction>.from(
|
tasksList =
|
||||||
getTaskListFunctionsFromApi(actions: response.actions));
|
List<SceneStaticFunction>.from(getTaskListFunctionsFromApi(actions: response.actions));
|
||||||
emit(AddSceneTask(
|
emit(AddSceneTask(
|
||||||
tasksList: tasksList,
|
tasksList: tasksList,
|
||||||
));
|
));
|
||||||
@ -171,8 +167,7 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _clearTempTaskList(
|
FutureOr<void> _clearTempTaskList(ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) {
|
||||||
ClearTempTaskListEvent event, Emitter<CreateSceneState> emit) {
|
|
||||||
tempTasksList.clear();
|
tempTasksList.clear();
|
||||||
selectedValues.clear();
|
selectedValues.clear();
|
||||||
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
|
emit(TempHoldSceneTask(tempTasksList: tempTasksList));
|
||||||
@ -188,13 +183,11 @@ class CreateSceneBloc extends Bloc<CreateSceneEvent, CreateSceneState>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureOr<void> _deleteScene(
|
FutureOr<void> _deleteScene(DeleteSceneEvent event, Emitter<CreateSceneState> emit) async {
|
||||||
DeleteSceneEvent event, Emitter<CreateSceneState> emit) async {
|
|
||||||
emit(DeleteSceneLoading());
|
emit(DeleteSceneLoading());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final response = await SceneApi.deleteScene(
|
final response = await SceneApi.deleteScene(sceneId: event.sceneId, unitUuid: event.unitUuid);
|
||||||
sceneId: event.sceneId, unitUuid: event.unitUuid);
|
|
||||||
if (response == true) {
|
if (response == true) {
|
||||||
emit(const DeleteSceneSuccess(true));
|
emit(const DeleteSceneSuccess(true));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart';
|
|||||||
import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_grid_view.dart';
|
import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_grid_view.dart';
|
||||||
import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_header.dart';
|
import 'package:syncrow_app/features/scene/widgets/scene_view_widget/scene_header.dart';
|
||||||
import 'package:syncrow_app/features/shared_widgets/create_unit.dart';
|
import 'package:syncrow_app/features/shared_widgets/create_unit.dart';
|
||||||
|
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||||
|
|
||||||
import 'package:syncrow_app/utils/context_extension.dart';
|
import 'package:syncrow_app/utils/context_extension.dart';
|
||||||
|
|
||||||
@ -60,12 +61,22 @@ class SceneView extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (state is SceneLoaded) {
|
if (state is SceneLoaded) {
|
||||||
return Expanded(
|
if (state.scenes.isNotEmpty) {
|
||||||
child: SceneGrid(
|
return Expanded(
|
||||||
scenes: state.scenes,
|
child: SceneGrid(
|
||||||
loadingSceneId: state.loadingSceneId,
|
scenes: state.scenes,
|
||||||
),
|
loadingSceneId: state.loadingSceneId,
|
||||||
);
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const Expanded(
|
||||||
|
child: Center(
|
||||||
|
child: BodyMedium(
|
||||||
|
text: 'No scenes have been added yet',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return const SizedBox();
|
return const SizedBox();
|
||||||
|
|||||||
@ -5,7 +5,7 @@ description: This is the mobile application project, developed with Flutter for
|
|||||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||||
publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||||
|
|
||||||
version: 1.0.8+9
|
version: 1.0.0+10
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.0.6 <4.0.0"
|
sdk: ">=3.0.6 <4.0.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user