You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tangheem/lib/ui/screens/member_screen.dart

138 lines
5.2 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/app_state/app_state.dart';
import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/extensions/int_extensions.dart';
import 'package:tangheem/extensions/string_extensions.dart';
import 'package:tangheem/extensions/widget_extensions.dart';
import 'package:tangheem/models/member_model.dart';
import 'package:tangheem/ui/misc/no_data_ui.dart';
import 'package:tangheem/widgets/new/CommonHeader.dart';
class MemberScreen extends StatefulWidget {
static const String routeName = "/members";
MemberScreen({Key key}) : super(key: key);
@override
_MemberScreenState createState() => _MemberScreenState();
}
class _MemberScreenState extends State<MemberScreen> {
List<MemberDataModel> membersList;
@override
void initState() {
super.initState();
membersList = AppState().membersList;
getMembers();
}
void getMembers() async {
if (membersList == null) {
Utils.showLoading(context);
try {
var membersData = await TangheemUserApiClient().getMembers();
membersList = membersData?.data ?? [];
membersList.sort((a, b) => a.orderNo.compareTo(b.orderNo));
AppState().membersList = membersList;
} catch (ex) {
membersList = [];
if (mounted) Utils.handleException(ex, null);
} finally {
Utils.hideLoading(context);
}
}
setState(() {});
}
@override
Widget build(BuildContext context) {
bool isPortrait = MediaQuery.of(context).orientation == Orientation.portrait;
Widget _header = SizedBox(height: isPortrait ? null : double.infinity, width: double.infinity, child: CommonHeader("اللجنة الإشرافية", "assets/icons/new/commette_bg.jpg", Color(0xff416A6C)));
Widget _dataListView = membersList?.isEmpty ?? true
? NoDataUI()
: ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: membersList.length,
padding: EdgeInsets.only(left: 25, right: 25, top: 25, bottom: isPortrait ? 125 : 25),
separatorBuilder: (context, index) {
return Divider(color: Color(0xffC7C7C7), height: 1, thickness: 1);
},
itemBuilder: (context, index) {
String encodedImage = membersList.elementAt(index).picture;
if (encodedImage.contains("data:image/png;base64,")) {
encodedImage = encodedImage.replaceAll("data:image/png;base64,", "");
}
if (encodedImage.contains("data:image/jpeg;base64,")) {
encodedImage = encodedImage.replaceAll("data:image/jpeg;base64,", "");
}
var temp = base64Decode(encodedImage);
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisSize: MainAxisSize.min,
children: [
(membersList[index].firstName + " " + membersList[index].lastName).toText(13, color: ColorConsts.darkText, textAlign: TextAlign.end),
membersList[index].description.trim().toText(13, color: ColorConsts.grey9FColor, textAlign: TextAlign.end),
],
).expanded,
21.width,
Container(
width: 82.0,
height: 82.0,
decoration: BoxDecoration(
image: membersList.length < 1
? null
: DecorationImage(
fit: BoxFit.cover,
image: MemoryImage(temp),
),
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
),
child: membersList.length < 1
? ClipRRect(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
child: SvgPicture.asset(
"assets/icons/chat_user.svg",
clipBehavior: Clip.antiAlias,
),
)
: null,
),
],
).paddingOnly(top: 25, bottom: 25);
},
);
return SizedBox(
height: double.infinity,
child: isPortrait
? SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
child: Column(
children: [_header, membersList == null ? SizedBox() : _dataListView],
),
)
: Row(
children: [
Expanded(child: SingleChildScrollView(physics: const AlwaysScrollableScrollPhysics(), child: _dataListView), flex: 6),
Expanded(child: _header, flex: 4),
],
),
);
}
}