mnemo_cards/lib/admin/add_user.dart

183 lines
7.1 KiB
Dart
Raw Normal View History

2024-05-29 14:26:44 +00:00
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/services.dart';
import 'package:mnemo_cards/admin/admin_api.dart';
import 'package:mnemo_cards/domain/router/app_router.dart';
import 'package:mnemo_cards/features/packs/images_holder.dart';
import 'package:mnemo_cards/utils/iterable_helper.dart';
import 'package:mnemo_cards/widgets/game_card_widget.dart';
import 'package:mnemo_cards/widgets/header.dart';
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
import '../di/locator.dart';
import '../main.dart';
import '../widgets/image_fade.dart';
class EditUser {
UserDto userDto;
AdminApi adminApi;
bool imageChanged = false;
EditUser(UserDto userDto, this.adminApi) : userDto = userDto;
void _saveUser() async {
final dto = userDto;
final result = await adminApi.editUser(dto);
if (!result) {
ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar(SnackBar(
content: Text('ERROR'),
));
} else {
ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar(SnackBar(
content: Text('Success!!!'),
));
appRouter.maybePop();
}
}
void _deleteCard() async {
final result = await adminApi.deleteUser(userDto);
if (!result) {
ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar(SnackBar(
content: Text('ERROR'),
));
} else {
ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar(SnackBar(
content: Text('Success!!!'),
));
appRouter.maybePop();
}
}
void addUser(BuildContext context) {
final theme = Theme.of(context).textTheme;
final TextEditingController nameController =
TextEditingController(text: userDto.name);
final TextEditingController packsController =
TextEditingController(text: userDto.packs.join(','));
showDialog(
context: context,
builder: (c) {
return Center(
child: Scaffold(
body: Material(
child: ListView(
children: [
Header(
'${userDto.id}',
hasPopButton: true,
trail: Row(
children: [
IconButton(
onPressed: _saveUser,
icon: Icon(Icons.save),
),
if (userDto.id != null && userDto.id! >= 0)
GestureDetector(
onLongPress: _deleteCard,
child: Icon(Icons.delete),
)
],
),
),
StatefulBuilder(builder: (context, setState) {
return Stack(
alignment: Alignment.center,
children: [
Padding(
padding: EdgeInsets.all(8.0),
child: Column(
children: [
GestureDetector(
onTap: () {
if (userDto.id != null) {
Clipboard.setData(ClipboardData(
text: userDto.id.toString()));
}
},
child: Row(
children: [
Expanded(child: Text('ID ')),
Text('${userDto.id}'),
],
),
),
Row(
children: [
Expanded(child: Text('Admin ')),
Text('${userDto.admin}'),
],
),
TextField(
controller: nameController,
onChanged: (v) {
userDto = userDto.copyWith(name: v);
},
decoration: InputDecoration(hintText: 'Name'),
maxLines: 1,
style: theme.displayMedium?.copyWith(
fontSize: theme.displayMedium!.fontSize!,
),
),
Row(
children: [
Expanded(child: Text('Subscription ')),
StatefulBuilder(
builder: (context, setState) {
return Switch(
value: userDto.subscription ?? false,
onChanged: (v) {
setState(() {
userDto = userDto.copyWith
.subscription(v);
});
});
}),
],
),
TextField(
controller: packsController,
onChanged: (v) {
final packs = v
.split(',')
.map((s) =>
int.tryParse(s.trim())?.toString())
.whereNotNull()
.toList();
userDto = userDto.copyWith(packs: packs);
final packsText = packs.join(',');
if (!packsController.text.startsWith(packsText)) {
packsController.text = packsText;
}
},
decoration:
InputDecoration(hintText: 'Packs'),
maxLines: 1,
style: theme.displayMedium?.copyWith(
fontSize: theme.displayMedium!.fontSize!,
),
),
],
),
),
],
);
}),
],
),
),
),
);
});
}
}