mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2026-03-11 03:41:43 +00:00
Added Members Management Page With Demo Data
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/smart_door/members_management_view.dart';
|
||||
import 'package:syncrow_app/features/devices/view/widgets/smart_door/unlocking_records_view.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
|
||||
@ -73,7 +74,7 @@ List<Map<String, dynamic>> doorLockButtons = [
|
||||
{
|
||||
'title': 'Memebers Managment',
|
||||
'image': Assets.doorlockAssetsMembersManagement,
|
||||
'page': null,
|
||||
'page': const MembersManagementView(),
|
||||
},
|
||||
{
|
||||
'title': 'Temporary Password',
|
||||
|
||||
@ -0,0 +1,269 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
|
||||
import 'package:syncrow_app/utils/context_extension.dart';
|
||||
import 'package:syncrow_app/utils/helpers/misc_string_helpers.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
||||
|
||||
class MembersManagementView extends StatefulWidget {
|
||||
const MembersManagementView({super.key});
|
||||
|
||||
@override
|
||||
State<MembersManagementView> createState() => _MembersManagementViewState();
|
||||
}
|
||||
|
||||
class _MembersManagementViewState extends State<MembersManagementView> {
|
||||
bool showFamilyMembers = true;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultScaffold(
|
||||
title: 'Manage Members',
|
||||
actions: const [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(right: 10),
|
||||
child: Icon(
|
||||
Icons.add,
|
||||
size: 30,
|
||||
),
|
||||
)
|
||||
],
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
showFamilyMembers = true;
|
||||
});
|
||||
},
|
||||
child: BodyMedium(
|
||||
text: 'Family Members',
|
||||
fontWeight:
|
||||
showFamilyMembers ? FontWeight.bold : FontWeight.normal,
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
setState(() {
|
||||
showFamilyMembers = false;
|
||||
});
|
||||
},
|
||||
child: BodyMedium(
|
||||
text: 'Other Members',
|
||||
fontWeight: !showFamilyMembers
|
||||
? FontWeight.bold
|
||||
: FontWeight.normal,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 20),
|
||||
child: BodySmall(
|
||||
text:
|
||||
'Administrators can set passwords for themselves or other users. Family members can set passwords only when they are granted the permission to set passwords.',
|
||||
style: context.bodySmall.copyWith(fontSize: 8),
|
||||
),
|
||||
),
|
||||
DefaultContainer(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 10),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: List.generate(
|
||||
members.length,
|
||||
(index) {
|
||||
if (showFamilyMembers) {
|
||||
if (members[index]['role'] == MemberRole.FamilyMember) {
|
||||
return Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const SizedBox.square(
|
||||
dimension: 35,
|
||||
child: CircleAvatar(
|
||||
backgroundColor: Colors.grey,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
BodyMedium(
|
||||
text: StringHelpers.toTitleCase(
|
||||
members[index]['name'] as String)),
|
||||
const Spacer(),
|
||||
const BodyMedium(
|
||||
text: 'Family Member',
|
||||
fontColor: Colors.grey,
|
||||
)
|
||||
],
|
||||
),
|
||||
index != members.length - 1
|
||||
? Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 45, top: 8, bottom: 8),
|
||||
height: 1,
|
||||
color: ColorsManager.greyColor,
|
||||
)
|
||||
: const SizedBox(),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return const SizedBox();
|
||||
}
|
||||
} else {
|
||||
if (members[index]['role'] == MemberRole.OtherMember) {
|
||||
return Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
const SizedBox.square(
|
||||
dimension: 35,
|
||||
child: CircleAvatar(
|
||||
backgroundColor: Colors.grey,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
BodyMedium(
|
||||
text: StringHelpers.toTitleCase(
|
||||
members[index]['name'] as String)),
|
||||
const Spacer(),
|
||||
const BodyMedium(
|
||||
text: 'Other Member',
|
||||
fontColor: Colors.grey,
|
||||
)
|
||||
],
|
||||
),
|
||||
index != members.length - 1
|
||||
? Container(
|
||||
margin: const EdgeInsets.only(
|
||||
left: 45, top: 8, bottom: 8),
|
||||
height: 1,
|
||||
color: ColorsManager.greyColor,
|
||||
)
|
||||
: const SizedBox(),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return const SizedBox();
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
enum MemberRole {
|
||||
FamilyMember,
|
||||
OtherMember,
|
||||
}
|
||||
|
||||
//TODO sort memebers by role
|
||||
var members = [
|
||||
{
|
||||
'name': 'member 1',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 2',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 3',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 4',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 5',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 6',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 7',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 8',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 9',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 10',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 11',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 12',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 13',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 14',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 15',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 16',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 17',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 18',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 19',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 20',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 21',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 22',
|
||||
'role': MemberRole.OtherMember,
|
||||
},
|
||||
{
|
||||
'name': 'member 23',
|
||||
'role': MemberRole.FamilyMember,
|
||||
},
|
||||
];
|
||||
@ -7,10 +7,12 @@ import 'package:syncrow_app/utils/resource_manager/constants.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/font_manager.dart';
|
||||
|
||||
class DefaultScaffold extends StatelessWidget {
|
||||
const DefaultScaffold({super.key, required this.child, this.title});
|
||||
const DefaultScaffold(
|
||||
{super.key, required this.child, this.title, this.actions});
|
||||
|
||||
final Widget child;
|
||||
final String? title;
|
||||
final List<Widget>? actions;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AnnotatedRegion(
|
||||
@ -31,6 +33,7 @@ class DefaultScaffold extends StatelessWidget {
|
||||
fontColor: ColorsManager.primaryColor,
|
||||
fontWeight: FontsManager.bold,
|
||||
),
|
||||
actions: actions,
|
||||
),
|
||||
body: Container(
|
||||
width: MediaQuery.sizeOf(context).width,
|
||||
Reference in New Issue
Block a user