import 'package:car_customer_app/api/shared_prefrence.dart'; import 'package:car_customer_app/theme/colors.dart'; import 'package:car_customer_app/utils/navigator.dart'; import 'package:car_customer_app/widgets/app_bar.dart'; import 'package:car_customer_app/widgets/show_fill_button.dart'; import 'package:car_customer_app/extensions/int_extensions.dart'; import 'package:car_customer_app/extensions/string_extensions.dart'; import 'package:car_customer_app/extensions/widget_extensions.dart'; import 'package:flutter/material.dart'; import '../../api/client/user_api_client.dart'; import '../../classes/app_state.dart'; import '../../classes/consts.dart'; import 'package:image_picker/image_picker.dart'; import 'dart:io'; import '../../classes/utils.dart'; import '../../config/routes.dart'; import '../../models/user/image_response.dart'; import '../../utils/utils.dart'; class DashboardPage extends StatefulWidget { @override State createState() => _DashboardPageState(); } class _DashboardPageState extends State { String userName = ""; // void _handleURLButtonPress(BuildContext context, var type) { // Navigator.push(context, // MaterialPageRoute(builder: (context) => ImageFromGalleryEx(type))); // } File? imagePicked; String image64 = ""; final _picker = ImagePicker(); @override void initState() { // TODO: implement initState super.initState(); fetchUsername(); } fetchUsername() async { userName = await SharedPrefManager.getPhoneOrEmail(); setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( appBar: appBar( title: "Logo/Brand", ), drawer: showDrawer(context), body: Container( child: Center( child: "Dashboard/Main Page".toText24(), ), ), ); } Widget showDrawer(BuildContext context) { return Drawer( child: Container( child: Column( children: [ Stack(children: [ Container( width: double.infinity, height: 200, color: accentColor.withOpacity(0.3), child: Image.network(ApiConsts.baseUrlServices + AppState().getUser.data!.userInfo!.userImageUrl.toString()), ), Positioned( top: 10, right: 10, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Column( children: [ Container( width: 40, height: 40, decoration: BoxDecoration( color: Colors.grey[200], borderRadius: BorderRadius.circular(30), ), child: Icon( Icons.edit, color: Colors.blue, ).onPress(() { _openImagePicker(); // _handleURLButtonPress(context, ImageSourceType.camera); }), ), 12.height, Container( width: 40, height: 40, decoration: BoxDecoration( color: Colors.grey[200], borderRadius: BorderRadius.circular(30), ), child: Icon( Icons.delete, color: Colors.blue, ).onPress(() async { Utils.showLoading(context); ImageResponse response = await UserApiClent().UpdateUserImage(""); if (response.messageStatus == 1) { Utils.showToast("Image is Deleted"); setState(() { AppState().getUser.data!.userInfo!.userImageUrl = response.data; }); } Utils.hideLoading(context); }), ), ], ), ], ), ) ]), Container( width: double.infinity, color: accentColor.withOpacity(0.1), padding: EdgeInsets.all(20), child: Row( children: [ Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ userName.toText24(), "User role or title".toText12(), ], ), ), ShowFillButton( title: "EDIT", onPressed: () { navigateWithName(context, AppRoutes.editAccoundPage); }, ), ], ), ), ListTile( leading: Icon(Icons.notifications), title: "Notifications".toText12(), ), ListTile( leading: Icon(Icons.settings), title: "General".toText12(), ), ListTile( leading: Icon(Icons.person), title: "Account".toText12(), ), ListTile( leading: Icon(Icons.logout), title: "Sign Out".toText12(), onTap: () { pop(context); pop(context); }, ), ], ), ), ); } void _openImagePicker() { showDialog( context: context, builder: (context) => AlertDialog(content: Text("Choose image source"), actions: [ FlatButton(child: Text("Camera"), onPressed: () => cameraImage()), FlatButton(child: Text("Gallery"), onPressed: () => gallaryImage()), ]), // .then((ImageSource source) async { // if (source != null) { // final pickedFile = await ImagePicker().getImage(source: source); // setState(() => imagePicked = File(pickedFile.path)); // } // } ); } void gallaryImage() async { final picker = ImagePicker(); final pickedImage = await picker.pickImage( source: ImageSource.gallery, ); final pickedImageFile = File(pickedImage!.path); int sizeInBytes = pickedImageFile.lengthSync(); // double sizeInMb = sizeInBytes / (1024 * 1024); if (sizeInBytes > 1000) { Utils.showToast("File is larger then 1KB"); } else { image64 = convertFileToBase64(pickedImageFile); Utils.showLoading(context); ImageResponse response = await UserApiClent().UpdateUserImage(image64); Utils.hideLoading(context); Navigator.pop(context); if (response.messageStatus == 1) { Utils.showToast("Image is uploaded"); AppState().getUser.data!.userInfo!.userImageUrl = response.data; } else { Utils.showToast(response.message ?? ""); } setState(() { imagePicked = pickedImageFile; }); } } void cameraImage() async { final picker = ImagePicker(); final pickedImage = await picker.pickImage( source: ImageSource.camera, ); final pickedImageFile = File(pickedImage!.path); int sizeInBytes = pickedImageFile.lengthSync(); // double sizeInMb = sizeInBytes / (1024 * 1024); if (sizeInBytes > 1000) { Utils.showToast("File is larger then 1KB"); } else { image64 = convertFileToBase64(pickedImageFile); Utils.showLoading(context); ImageResponse response = await UserApiClent().UpdateUserImage(image64); Utils.hideLoading(context); Navigator.pop(context); if (response.messageStatus == 1) { Utils.showToast("Image is uploaded"); AppState().getUser.data!.userInfo!.userImageUrl = response.data; } else { Utils.showToast(response.message ?? ""); } setState(() { imagePicked = pickedImageFile; }); } } }