@@ -4,10 +4,13 @@ import 'package:flood_mobile/Api/client_api.dart';
4
4
import 'package:flood_mobile/Components/flood_snackbar.dart' ;
5
5
import 'package:flood_mobile/Components/settings_text_field.dart' ;
6
6
import 'package:flood_mobile/Components/text_size.dart' ;
7
+ import 'package:flood_mobile/Components/user_list.dart' ;
7
8
import 'package:flood_mobile/Constants/theme_provider.dart' ;
8
9
import 'package:flood_mobile/Model/client_settings_model.dart' ;
10
+ import 'package:flood_mobile/Model/current_user_detail_model.dart' ;
9
11
import 'package:flood_mobile/Model/register_user_model.dart' ;
10
12
import 'package:flood_mobile/Provider/client_provider.dart' ;
13
+ import 'package:flood_mobile/Provider/user_detail_provider.dart' ;
11
14
import 'package:flood_mobile/Services/transfer_speed_manager.dart' ;
12
15
import 'package:flutter/material.dart' ;
13
16
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart' ;
@@ -64,6 +67,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
64
67
String downSpeed = '1 kB/s' ;
65
68
66
69
// *Authentication
70
+ List <CurrentUserDetailModel > usersList = [];
71
+ String currentUsername = '' ;
67
72
TextEditingController usernameController = new TextEditingController ();
68
73
TextEditingController passwordController = new TextEditingController ();
69
74
TextEditingController pathController = new TextEditingController ();
@@ -135,6 +140,11 @@ class _SettingsScreenState extends State<SettingsScreen> {
135
140
upSpeed =
136
141
TransferSpeedManager .valToSpeedMap[model.throttleGlobalUpSpeed] ??
137
142
'Unlimited' ;
143
+
144
+ // Authentication Initialization
145
+ usersList = Provider .of <UserDetailProvider >(context).usersList;
146
+ currentUsername =
147
+ Provider .of <UserDetailProvider >(context, listen: false ).username;
138
148
});
139
149
super .didChangeDependencies ();
140
150
}
@@ -295,6 +305,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
295
305
),
296
306
// *Authentication Section
297
307
AuthenticationSection (
308
+ usersList: usersList,
309
+ currentUsername: currentUsername,
298
310
setTCP: (value) {
299
311
setState (() {
300
312
socket = ! value! ;
@@ -521,8 +533,10 @@ class SpeedLimitSection extends StatelessWidget {
521
533
}
522
534
523
535
class AuthenticationSection extends StatelessWidget {
524
- const AuthenticationSection ({
536
+ AuthenticationSection ({
525
537
Key ? key,
538
+ required this .usersList,
539
+ required this .currentUsername,
526
540
required this .usernameController,
527
541
required this .passwordController,
528
542
required this .isAdmin,
@@ -542,11 +556,13 @@ class AuthenticationSection extends StatelessWidget {
542
556
required this .authenticationformKey,
543
557
}) : super (key: key);
544
558
559
+ final List <CurrentUserDetailModel > usersList;
560
+ final String currentUsername;
545
561
final TextEditingController usernameController;
546
562
final TextEditingController passwordController;
547
- final bool isAdmin;
548
- final String client;
549
- final bool socket;
563
+ bool isAdmin;
564
+ String client;
565
+ bool socket;
550
566
final TextEditingController pathController;
551
567
final TextEditingController hostController;
552
568
final TextEditingController portController;
@@ -562,6 +578,36 @@ class AuthenticationSection extends StatelessWidget {
562
578
563
579
@override
564
580
Widget build (BuildContext context) {
581
+ if (usersList.length == 0 ) {
582
+ // User is not Admin
583
+ return ExpansionTileCard (
584
+ key: Key ('Authentication Expansion Card' ),
585
+ onExpansionChanged: (value) {},
586
+ elevation: 0 ,
587
+ expandedColor: ThemeProvider .theme.primaryColor,
588
+ baseColor: ThemeProvider .theme.primaryColor,
589
+ title: MText (text: 'Authentication' ),
590
+ leading: Icon (Icons .security),
591
+ contentPadding: EdgeInsets .all (0 ),
592
+ children: [
593
+ Container (
594
+ width: double .infinity,
595
+ decoration: BoxDecoration (
596
+ color: ThemeProvider .theme.errorColor,
597
+ borderRadius: BorderRadius .circular (8 ),
598
+ border: Border .all (
599
+ color: ThemeProvider .theme.primaryColor,
600
+ width: 1.0 ,
601
+ ),
602
+ ),
603
+ child: Padding (
604
+ padding: const EdgeInsets .all (8.0 ),
605
+ child: Text ("User is not Admin" ),
606
+ ),
607
+ ),
608
+ ],
609
+ );
610
+ }
565
611
return ExpansionTileCard (
566
612
key: Key ('Authentication Expansion Card' ),
567
613
onExpansionChanged: (value) {},
@@ -578,6 +624,13 @@ class AuthenticationSection extends StatelessWidget {
578
624
key: Key ('Authentication option display column' ),
579
625
crossAxisAlignment: CrossAxisAlignment .start,
580
626
children: [
627
+ SText (text: 'User Accounts' ),
628
+ SizedBox (height: 25 ),
629
+ UsersListView (
630
+ usersList: usersList,
631
+ currentUsername: currentUsername,
632
+ ),
633
+ SizedBox (height: 25 ),
581
634
SText (text: 'Add User' ),
582
635
SizedBox (height: 25 ),
583
636
SettingsTextField (
@@ -643,7 +696,7 @@ class AuthenticationSection extends StatelessWidget {
643
696
isExpanded: true ,
644
697
value: client,
645
698
icon: const Icon (Icons .keyboard_arrow_down_rounded),
646
- dropdownColor: ThemeProvider .theme.backgroundColor ,
699
+ dropdownColor: ThemeProvider .theme.primaryColorLight ,
647
700
elevation: 16 ,
648
701
onChanged: setClient,
649
702
underline: Container (),
@@ -831,6 +884,19 @@ class AuthenticationSection extends StatelessWidget {
831
884
),
832
885
),
833
886
);
887
+ AuthApi .getUsersList (context);
888
+ usernameController.clear ();
889
+ passwordController.clear ();
890
+ pathController.clear ();
891
+ clientUsernameController.clear ();
892
+ clientPasswordController.clear ();
893
+ urlController.clear ();
894
+ hostController.clear ();
895
+ portController.clear ();
896
+ setIsAdmin (false );
897
+ setSocket (true );
898
+ setClient ('rTorrent' );
899
+
834
900
final addNewUserSnackBar = addFloodSnackBar (
835
901
SnackbarType .success,
836
902
'New user added' ,
0 commit comments