build_app
This commit is contained in:
		
							parent
							
								
									8cf63e65ea
								
							
						
					
					
						commit
						ab3f928bc7
					
				| @ -69,6 +69,9 @@ public class BuilderService { | |||||||
| 		executeDump(true); | 		executeDump(true); | ||||||
| 
 | 
 | ||||||
| 		// ADD OTHER SERVICE | 		// ADD OTHER SERVICE | ||||||
|  | addCustomMenu( "Test_a","Test_a",  "Transcations");  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 		System.out.println("dashboard and menu inserted..."); | 		System.out.println("dashboard and menu inserted..."); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,155 @@ | |||||||
|  | package com.realnet.basic1.Controllers; | ||||||
|  | import java.util.List; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  |  import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
|  | import com.fasterxml.jackson.core.JsonProcessingException; | ||||||
|  | import org.springframework.web.bind.annotation.CrossOrigin; | ||||||
|  | import com.fasterxml.jackson.databind.JsonMappingException; | ||||||
|  | import com.realnet.config.EmailService; | ||||||
|  | import com.realnet.users.entity1.AppUser; | ||||||
|  | import com.realnet.users.service1.AppUserServiceImpl; | ||||||
|  | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  | import org.springframework.data.domain.*; | ||||||
|  | import com.realnet.fnd.response.EntityResponse; | ||||||
|  | import org.springframework.http.*; | ||||||
|  | import org.springframework.beans.factory.annotation.*; | ||||||
|  | import com.realnet.basic1.Entity.Test_a; | ||||||
|  | import com.realnet.basic1.Services.Test_aService ; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @RequestMapping(value = "/Test_a") | ||||||
|  |  @CrossOrigin("*")  | ||||||
|  | @RestController | ||||||
|  | public class Test_aController { | ||||||
|  | 	@Autowired | ||||||
|  | 	private Test_aService Service; | ||||||
|  | 
 | ||||||
|  | @Value("${projectPath}") | ||||||
|  | 	private String projectPath; | ||||||
|  |   | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	@PostMapping("/Test_a") | ||||||
|  | 		  public Test_a Savedata(@RequestBody Test_a data) { | ||||||
|  | 		Test_a save = Service.Savedata(data)	; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		System.out.println("data saved..." + save); | ||||||
|  | 
 | ||||||
|  |  return save; | ||||||
|  | 	  } | ||||||
|  | @PutMapping("/Test_a/{id}") | ||||||
|  | 	public  Test_a update(@RequestBody Test_a data,@PathVariable Integer id ) { | ||||||
|  | 		Test_a update = Service.update(data,id); | ||||||
|  | 		System.out.println("data update..." + update); | ||||||
|  | 		return update; | ||||||
|  | 	}	  | ||||||
|  | //	get all with pagination | ||||||
|  | 	@GetMapping("/Test_a/getall/page") | ||||||
|  | 	public Page<Test_a> getall(@RequestParam(value = "page", required = false) Integer page, | ||||||
|  | 			@RequestParam(value = "size", required = false) Integer size) { | ||||||
|  | 		Pageable paging = PageRequest.of(page, size); | ||||||
|  | 		Page<Test_a> get = Service.getAllWithPagination(paging); | ||||||
|  | 
 | ||||||
|  | 		return get; | ||||||
|  | 
 | ||||||
|  | 	}	 | ||||||
|  | 	@GetMapping("/Test_a") | ||||||
|  | 	public List<Test_a> getdetails() { | ||||||
|  | 		 List<Test_a> get = Service.getdetails();		 | ||||||
|  | 		return get; | ||||||
|  | } | ||||||
|  | // get all without authentication  | ||||||
|  | 
 | ||||||
|  | 	@GetMapping("/token/Test_a") | ||||||
|  | 	public List<Test_a> getallwioutsec() { | ||||||
|  | 		 List<Test_a> get = Service.getdetails();		 | ||||||
|  | 		return get; | ||||||
|  | } | ||||||
|  | @GetMapping("/Test_a/{id}") | ||||||
|  | 	public  Test_a  getdetailsbyId(@PathVariable Integer id ) { | ||||||
|  | 		Test_a  get = Service.getdetailsbyId(id); | ||||||
|  | 		return get; | ||||||
|  | 	} | ||||||
|  | @DeleteMapping("/Test_a/{id}") | ||||||
|  | 	public  ResponseEntity<?> delete_by_id(@PathVariable Integer id ) { | ||||||
|  | 	Service.delete_by_id(id); | ||||||
|  | 			return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); | ||||||
|  | 	 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,155 @@ | |||||||
|  | package com.realnet.basic1.Controllers; | ||||||
|  | import java.util.List; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  |  import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
|  | import com.fasterxml.jackson.core.JsonProcessingException; | ||||||
|  | import org.springframework.web.bind.annotation.CrossOrigin; | ||||||
|  | import com.fasterxml.jackson.databind.JsonMappingException; | ||||||
|  | import com.realnet.config.EmailService; | ||||||
|  | import com.realnet.users.entity1.AppUser; | ||||||
|  | import com.realnet.users.service1.AppUserServiceImpl; | ||||||
|  | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  | import org.springframework.data.domain.*; | ||||||
|  | import com.realnet.fnd.response.EntityResponse; | ||||||
|  | import org.springframework.http.*; | ||||||
|  | import org.springframework.beans.factory.annotation.*; | ||||||
|  | import com.realnet.basic1.Entity.Test_a; | ||||||
|  | import com.realnet.basic1.Services.Test_aService ; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @RequestMapping(value = "/token/Test_a") | ||||||
|  |  @CrossOrigin("*")  | ||||||
|  | @RestController | ||||||
|  | public class tokenFree_Test_aController { | ||||||
|  | 	@Autowired | ||||||
|  | 	private Test_aService Service; | ||||||
|  | 
 | ||||||
|  | @Value("${projectPath}") | ||||||
|  | 	private String projectPath; | ||||||
|  |   | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	@PostMapping("/Test_a") | ||||||
|  | 		  public Test_a Savedata(@RequestBody Test_a data) { | ||||||
|  | 		Test_a save = Service.Savedata(data)	; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		System.out.println("data saved..." + save); | ||||||
|  | 
 | ||||||
|  |  return save; | ||||||
|  | 	  } | ||||||
|  | @PutMapping("/Test_a/{id}") | ||||||
|  | 	public  Test_a update(@RequestBody Test_a data,@PathVariable Integer id ) { | ||||||
|  | 		Test_a update = Service.update(data,id); | ||||||
|  | 		System.out.println("data update..." + update); | ||||||
|  | 		return update; | ||||||
|  | 	}	  | ||||||
|  | //	get all with pagination | ||||||
|  | 	@GetMapping("/Test_a/getall/page") | ||||||
|  | 	public Page<Test_a> getall(@RequestParam(value = "page", required = false) Integer page, | ||||||
|  | 			@RequestParam(value = "size", required = false) Integer size) { | ||||||
|  | 		Pageable paging = PageRequest.of(page, size); | ||||||
|  | 		Page<Test_a> get = Service.getAllWithPagination(paging); | ||||||
|  | 
 | ||||||
|  | 		return get; | ||||||
|  | 
 | ||||||
|  | 	}	 | ||||||
|  | 	@GetMapping("/Test_a") | ||||||
|  | 	public List<Test_a> getdetails() { | ||||||
|  | 		 List<Test_a> get = Service.getdetails();		 | ||||||
|  | 		return get; | ||||||
|  | } | ||||||
|  | // get all without authentication  | ||||||
|  | 
 | ||||||
|  | 	@GetMapping("/token/Test_a") | ||||||
|  | 	public List<Test_a> getallwioutsec() { | ||||||
|  | 		 List<Test_a> get = Service.getdetails();		 | ||||||
|  | 		return get; | ||||||
|  | } | ||||||
|  | @GetMapping("/Test_a/{id}") | ||||||
|  | 	public  Test_a  getdetailsbyId(@PathVariable Integer id ) { | ||||||
|  | 		Test_a  get = Service.getdetailsbyId(id); | ||||||
|  | 		return get; | ||||||
|  | 	} | ||||||
|  | @DeleteMapping("/Test_a/{id}") | ||||||
|  | 	public  ResponseEntity<?> delete_by_id(@PathVariable Integer id ) { | ||||||
|  | 	Service.delete_by_id(id); | ||||||
|  | 			return new ResponseEntity<>(new EntityResponse("Deleted"), HttpStatus.OK); | ||||||
|  | 	 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,64 @@ | |||||||
|  | package com.realnet.basic1.Entity; | ||||||
|  |  import lombok.*; | ||||||
|  | import com.realnet.WhoColumn.Entity.Extension;  | ||||||
|  |  import javax.persistence.*; | ||||||
|  |  import java.time.LocalDateTime; | ||||||
|  |  import java.util.*; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  @Entity  | ||||||
|  |  @Data | ||||||
|  |  public class    Test_a extends Extension {  | ||||||
|  |  /** | ||||||
|  | 	 *  | ||||||
|  | 	 */ | ||||||
|  | 	private static final long serialVersionUID = 1L; | ||||||
|  | 
 | ||||||
|  |  @Id | ||||||
|  |  @GeneratedValue(strategy = GenerationType.IDENTITY) | ||||||
|  |  private Integer id; | ||||||
|  | 
 | ||||||
|  | private String  name; | ||||||
|  | 
 | ||||||
|  | @Column(length = 2000) | ||||||
|  | private String description; | ||||||
|  | 
 | ||||||
|  | private boolean active; | ||||||
|  | 
 | ||||||
|  | private int number_field; | ||||||
|  | 
 | ||||||
|  |  private String phone_number; | ||||||
|  | 
 | ||||||
|  | private String password_field; | ||||||
|  | @Transient | ||||||
|  | private String confirmpassword_field; | ||||||
|  | 
 | ||||||
|  | @Column(length = 2000) | ||||||
|  | private String textarea_field; | ||||||
|  | 
 | ||||||
|  | private String date_field; | ||||||
|  | 
 | ||||||
|  | private String datetime_field; | ||||||
|  | 
 | ||||||
|  | private String email; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,44 @@ | |||||||
|  | package com.realnet.basic1.Repository; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import org.springframework.data.domain.Page; | ||||||
|  | import org.springframework.data.domain.Pageable; | ||||||
|  | import org.springframework.data.jpa.repository.JpaRepository; | ||||||
|  | import org.springframework.data.jpa.repository.Query; | ||||||
|  | 
 | ||||||
|  | import org.springframework.stereotype.Repository;  | ||||||
|  | import java.util.*; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | 
 | ||||||
|  | import com.realnet.basic1.Entity.Test_a; | ||||||
|  | 
 | ||||||
|  | @Repository | ||||||
|  | public interface  Test_aRepository  extends  JpaRepository<Test_a, Integer>  {  | ||||||
|  | 
 | ||||||
|  | @Query(value = "select * from test_a where  created_by=?1", nativeQuery = true) | ||||||
|  | 	List<Test_a> findAll(Long creayedBy); | ||||||
|  | 
 | ||||||
|  | @Query(value = "select * from test_a where  created_by=?1", nativeQuery = true) | ||||||
|  | 	Page<Test_a> findAll(Pageable page, Long creayedBy); | ||||||
|  | } | ||||||
| @ -0,0 +1,163 @@ | |||||||
|  | package com.realnet.basic1.Services; | ||||||
|  | import com.realnet.basic1.Repository.Test_aRepository; | ||||||
|  | import com.realnet.basic1.Entity.Test_a | ||||||
|  | ;import java.util.*; | ||||||
|  | 
 | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import com.realnet.SequenceGenerator.Service.SequenceService; | ||||||
|  | import org.springframework.data.domain.Page; | ||||||
|  | import com.realnet.realm.Entity.Realm; | ||||||
|  | import com.realnet.realm.Services.RealmService; | ||||||
|  | import org.springframework.data.domain.Pageable; | ||||||
|  | import org.springframework.http.*; | ||||||
|  | import com.realnet.users.service1.AppUserServiceImpl; | ||||||
|  | import com.realnet.users.entity1.AppUser; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	import org.springframework.stereotype.Service; | ||||||
|  | 
 | ||||||
|  | @Service | ||||||
|  |  public class Test_aService { | ||||||
|  | @Autowired | ||||||
|  | private Test_aRepository Repository; | ||||||
|  | 	@Autowired | ||||||
|  | 	private AppUserServiceImpl userService;  | ||||||
|  | @Autowired | ||||||
|  | 	private RealmService realmService; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | public Test_a Savedata(Test_a data) { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	data.setUpdatedBy(getUser().getUserId()); | ||||||
|  | 		data.setCreatedBy(getUser().getUserId()); | ||||||
|  | 		data.setAccountId(getUser().getAccount().getAccount_id()); | ||||||
|  | Test_a save = Repository.save(data); | ||||||
|  | 				return save;	 | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | //	get all with pagination | ||||||
|  | 	public Page<Test_a> getAllWithPagination(Pageable page) { | ||||||
|  | 		return Repository.findAll(page, getUser().getUserId()); | ||||||
|  | 	}			 | ||||||
|  | public List<Test_a> getdetails() {   | ||||||
|  | 		List<Realm> realm = realmService.findByUserId(getUser().getUserId()); | ||||||
|  | List<Test_a> all = Repository.findAll(getUser().getUserId()); | ||||||
|  | 		 | ||||||
|  | 		return all ;		} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | public Test_a getdetailsbyId(Integer id) { | ||||||
|  | 	return Repository.findById(id).get(); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public void delete_by_id(Integer id) { | ||||||
|  |  Repository.deleteById(id); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | public Test_a update(Test_a data,Integer id) { | ||||||
|  | 	Test_a old = Repository.findById(id).get(); | ||||||
|  | old.setName(data.getName()); | ||||||
|  | 
 | ||||||
|  | old.setDescription(data.getDescription()); | ||||||
|  | 
 | ||||||
|  | old.setActive (data.isActive()); | ||||||
|  | 
 | ||||||
|  | old.setNumber_field(data.getNumber_field()); | ||||||
|  | 
 | ||||||
|  | old.setPhone_number(data.getPhone_number()); | ||||||
|  | 
 | ||||||
|  | old.setPassword_field(data.getPassword_field()); | ||||||
|  | 
 | ||||||
|  | old.setTextarea_field(data.getTextarea_field()); | ||||||
|  | 
 | ||||||
|  | old.setDate_field(data.getDate_field()); | ||||||
|  | 
 | ||||||
|  | old.setDatetime_field(data.getDatetime_field()); | ||||||
|  | 
 | ||||||
|  | old.setEmail(data.getEmail()); | ||||||
|  | 
 | ||||||
|  | final Test_a test = Repository.save(old); | ||||||
|  | 		data.setUpdatedBy(getUser().getUserId()); | ||||||
|  |   return test;}  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  public AppUser getUser() { | ||||||
|  | 		AppUser user = userService.getLoggedInUser(); | ||||||
|  | 		return user; | ||||||
|  | 
 | ||||||
|  | 	}} | ||||||
							
								
								
									
										2
									
								
								testfnu002-db-d/authsec_mysql/mysql/wf_table/wf_table.sql
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								testfnu002-db-d/authsec_mysql/mysql/wf_table/wf_table.sql
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | CREATE TABLE db.Test_a(id BIGINT NOT NULL AUTO_INCREMENT, active VARCHAR(400), description VARCHAR(400), textarea_field VARCHAR(400), email VARCHAR(400), number_field int, datetime_field VARCHAR(400), phone_number VARCHAR(400), password_field VARCHAR(400), date_field Date, name VARCHAR(400),  PRIMARY KEY (id)); | ||||||
|  | 
 | ||||||
| @ -0,0 +1,112 @@ | |||||||
|  | import 'dart:typed_data'; | ||||||
|  | import 'package:dio/dio.dart'; | ||||||
|  | import 'package:http_parser/http_parser.dart'; | ||||||
|  | import '../../../../resources/api_constants.dart'; | ||||||
|  | import '../../../../data/network/base_network_service.dart'; | ||||||
|  | import '../../../../data/network/network_api_service.dart'; | ||||||
|  | 
 | ||||||
|  | class test_aApiService { | ||||||
|  |   final String baseUrl = ApiConstants.baseUrl; | ||||||
|  | 
 | ||||||
|  |       final BaseNetworkService _helper = NetworkApiService(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |    Future<List<Map<String, dynamic>>> getEntities() async { | ||||||
|  | 
 | ||||||
|  |     try { | ||||||
|  |       final response = await _helper.getGetApiResponse('$baseUrl/Test_a/Test_a'); | ||||||
|  |       final entities = (response as List).cast<Map<String, dynamic>>(); | ||||||
|  |       return entities; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to get all entities: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | Future<List<Map<String, dynamic>>> getAllWithPagination( | ||||||
|  |        int page, int size) async { | ||||||
|  |     try { | ||||||
|  |             final response = | ||||||
|  |           await _helper.getGetApiResponse('$baseUrl/Test_a/Test_a/getall/page?page=$page&size=$size'); | ||||||
|  |       final entities = | ||||||
|  |           (response['content'] as List).cast<Map<String, dynamic>>(); | ||||||
|  |       return entities; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to get all without pagination: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   Future<Map<String, dynamic>> createEntity( | ||||||
|  |        Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |             print("in post api$entity"); | ||||||
|  |       final response = | ||||||
|  |           await _helper.getPostApiResponse('$baseUrl/Test_a/Test_a', entity); | ||||||
|  | 
 | ||||||
|  |       print(entity); | ||||||
|  | 
 | ||||||
|  |       // Assuming the response is a Map<String, dynamic> | ||||||
|  |       Map<String, dynamic> responseData = response; | ||||||
|  | 
 | ||||||
|  |       return responseData; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to create entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Future<void> updateEntity( int entityId, Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |      await _helper.getPutApiResponse('$baseUrl/Test_a/Test_a/$entityId', | ||||||
|  |       entity);                print(entity); | ||||||
|  | 
 | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to update entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<void> deleteEntity( int entityId) async { | ||||||
|  |     try { | ||||||
|  |  await _helper.getDeleteApiResponse('$baseUrl/Test_a/Test_a/$entityId'); | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to delete entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,491 @@ | |||||||
|  | // ignore_for_file: use_build_context_synchronously | ||||||
|  | import 'dart:convert'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:file_picker/file_picker.dart'; | ||||||
|  | import 'package:image_picker/image_picker.dart'; | ||||||
|  | import 'package:provider/provider.dart'; | ||||||
|  | import '../Test_a_viewModel/Test_a_view_model_screen.dart'; | ||||||
|  | import '../../../../utils/image_constant.dart'; | ||||||
|  | import '../../../../utils/size_utils.dart'; | ||||||
|  | import '../../../../theme/app_style.dart'; | ||||||
|  | import '../../../../widgets/app_bar/appbar_image.dart'; | ||||||
|  | import '../../../../widgets/app_bar/appbar_title.dart'; | ||||||
|  | import '../../../../widgets/app_bar/custom_app_bar.dart'; | ||||||
|  | import '../../../../widgets/custom_button.dart'; | ||||||
|  | import '../../../../widgets/custom_text_form_field.dart';  | ||||||
|  | import '../../../../widgets/custom_dropdown_field.dart'; | ||||||
|  | import 'dart:math'; | ||||||
|  | import 'package:qr_flutter/qr_flutter.dart'; | ||||||
|  | import 'package:barcode_widget/barcode_widget.dart'; | ||||||
|  | import 'package:intl/intl.dart'; | ||||||
|  |   | ||||||
|  | import 'package:autocomplete_textfield/autocomplete_textfield.dart'; | ||||||
|  | import 'package:http/http.dart' as http; | ||||||
|  | import 'package:flutter/services.dart'; | ||||||
|  | import 'package:image_picker/image_picker.dart'; | ||||||
|  | import 'package:fluttertoast/fluttertoast.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_date_picker_field.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_date_time_picker_field.dart' | ||||||
|  | ;import 'package:multi_select_flutter/multi_select_flutter.dart'; | ||||||
|  | import 'package:just_audio/just_audio.dart'; | ||||||
|  | import 'package:video_player/video_player.dart'; | ||||||
|  | import 'package:google_fonts/google_fonts.dart'; | ||||||
|  | import 'package:lottie/lottie.dart'; | ||||||
|  | import '../../../../utils/toast_messages/toast_message_util.dart'; | ||||||
|  | import 'dart:io'; | ||||||
|  | import '../../../../Reuseable/reusable_text_field.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_dropdown_field.dart'; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class test_aCreateEntityScreen extends StatefulWidget { | ||||||
|  |   const test_aCreateEntityScreen({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   _test_aCreateEntityScreenState createState() => _test_aCreateEntityScreenState(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class _test_aCreateEntityScreenState extends State<test_aCreateEntityScreen> { | ||||||
|  | 
 | ||||||
|  | final Map<String, dynamic> formData = {}; | ||||||
|  |   final _formKey = GlobalKey<FormState>(); | ||||||
|  |   final TextEditingController nameController = TextEditingController(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   final TextEditingController descriptionController = TextEditingController(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | bool _isSwitchedactive = false; | ||||||
|  | bool active = false; | ||||||
|  | 
 | ||||||
|  | void _toggleSwitchactive(bool value) { | ||||||
|  |   setState(() { | ||||||
|  |     _isSwitchedactive = value; | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  |   final TextEditingController number_fieldController = TextEditingController(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   final TextEditingController phone_numberController = TextEditingController(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   bool _passwordVisiblepassword_field = false; | ||||||
|  |   bool _isPasswordValidpassword_field = true; | ||||||
|  |   bool _doPasswordsMatchpassword_field = true; | ||||||
|  | 
 | ||||||
|  |   String _passwordpassword_field = ''; // To store the first password | ||||||
|  | 
 | ||||||
|  |   void _validatePasswordpassword_field(String password) { | ||||||
|  |     setState(() { | ||||||
|  |       _isPasswordValidpassword_field = password.isNotEmpty; | ||||||
|  |       _passwordpassword_field = password; // Store the password for later comparison | ||||||
|  |       _doPasswordsMatchpassword_field = true; // Reset match flag on new input | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _validateConfirmPasswordpassword_field(String confirmPassword) { | ||||||
|  |     setState(() { | ||||||
|  |       _doPasswordsMatchpassword_field = confirmPassword == _passwordpassword_field; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   final TextEditingController textarea_fieldController = TextEditingController(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | TextEditingController date_field = TextEditingController();  | ||||||
|  | 
 | ||||||
|  |  DateTime selectedDatedate_field = DateTime.now(); | ||||||
|  |   Future<void> _selectDatedate_field(BuildContext context) async { | ||||||
|  |     final DateTime? picked = await showDatePicker( | ||||||
|  |       context: context, | ||||||
|  |       initialDate: selectedDatedate_field, | ||||||
|  |       firstDate: DateTime(2000), | ||||||
|  |       lastDate: DateTime(2101), | ||||||
|  |     ); | ||||||
|  |     if (picked != null && picked != selectedDatedate_field) { | ||||||
|  |       setState(() { | ||||||
|  |         selectedDatedate_field = picked; | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   final TextEditingController datetime_fieldController = TextEditingController(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   bool _isemailEmailValid = true; | ||||||
|  |   void _validateemailEmail(String email) { | ||||||
|  |     setState(() { | ||||||
|  |       _isemailEmailValid = RegExp(r'^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$').hasMatch(email); | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  @override | ||||||
|  |   void initState() { | ||||||
|  |     super.initState();  | ||||||
|  |     final provider = Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | }  | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     final provider = Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: CustomAppBar( | ||||||
|  |           height: getVerticalSize(49), | ||||||
|  |           leadingWidth: 40, | ||||||
|  |           leading: AppbarImage( | ||||||
|  |               height: getSize(24), | ||||||
|  |               width: getSize(24), | ||||||
|  |               svgPath: ImageConstant.imgArrowleftBlueGray900, | ||||||
|  |               margin: getMargin(left: 16, top: 12, bottom: 13), | ||||||
|  |               onTap: () { | ||||||
|  |                 Navigator.pop(context); | ||||||
|  |               }), | ||||||
|  |           centerTitle: true, | ||||||
|  |           title: AppbarTitle(text: "Create Test_a"), | ||||||
|  |  actions: [ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ], | ||||||
|  |  ), | ||||||
|  |       body: SingleChildScrollView( | ||||||
|  |         child: Padding( | ||||||
|  |           padding: const EdgeInsets.all(16), | ||||||
|  |           child: Form( | ||||||
|  |             key: _formKey, | ||||||
|  |             child: Column( | ||||||
|  |               children: [ | ||||||
|  |  ReusableTextField( | ||||||
|  |                   controller: nameController, | ||||||
|  | 
 | ||||||
|  |   onSaved:(value) => formData['name'] = value , | ||||||
|  |   label:"Enter Name", | ||||||
|  |   // ValidationProperties | ||||||
|  | ), | ||||||
|  | 
 | ||||||
|  |   SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ReusableTextField( | ||||||
|  |                   controller: descriptionController, | ||||||
|  | 
 | ||||||
|  |   onSaved:(value) => formData['description'] = value , | ||||||
|  |   label: "Enter Description", | ||||||
|  |   maxLines: 5, | ||||||
|  | // ValidationProperties | ||||||
|  | ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                        SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  Switch( | ||||||
|  |               value: _isSwitchedactive, | ||||||
|  |               onChanged: _toggleSwitchactive, | ||||||
|  |               activeColor: Colors.white, | ||||||
|  |               activeTrackColor: Colors.green, | ||||||
|  |               inactiveThumbColor: Colors.white, | ||||||
|  |               inactiveTrackColor: Colors.red, | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | ReusableTextField( | ||||||
|  |                   controller: number_fieldController, | ||||||
|  | 
 | ||||||
|  |               onSaved:(value) => formData['number_field'] = value , | ||||||
|  |               label: "Enter Number Field", | ||||||
|  |               keyboardType: TextInputType.number, | ||||||
|  |               inputFormatters: [ | ||||||
|  |                 FilteringTextInputFormatter.allow((RegExp(r'[0-9]'))), | ||||||
|  |               ], | ||||||
|  |              // ValidationProperties      | ||||||
|  | ), | ||||||
|  | 
 | ||||||
|  | SizedBox(height: 16),  | ||||||
|  | 
 | ||||||
|  | ReusableTextField( | ||||||
|  |               onSaved:(value) => formData['phone_number'] = value , | ||||||
|  |               label: "Enter Phone Number", | ||||||
|  |               keyboardType: TextInputType.number, | ||||||
|  |               inputFormatters: [ | ||||||
|  |               FilteringTextInputFormatter.digitsOnly, | ||||||
|  | LengthLimitingTextInputFormatter( | ||||||
|  |                         10), // Limit input to 10 digits | ||||||
|  |             ], | ||||||
|  |               validator: (value) { | ||||||
|  |                 if (value == null || value.isEmpty) { | ||||||
|  |                   return 'Please enter Phone Number'; | ||||||
|  |                 } | ||||||
|  |                 if (value.length != 10) { | ||||||
|  |                       return 'Phone number must be exactly 10 digits'; | ||||||
|  |                     } | ||||||
|  |                     return null; | ||||||
|  |               }, | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | TextFormField( | ||||||
|  |                   obscureText: !_passwordVisiblepassword_field, | ||||||
|  |                   decoration: InputDecoration( | ||||||
|  |                     labelText: 'Password Field', | ||||||
|  |                     suffixIcon: IconButton( | ||||||
|  |                       icon: Icon( | ||||||
|  |                         _passwordVisiblepassword_field | ||||||
|  |                             ? Icons.visibility | ||||||
|  |                             : Icons.visibility_off, | ||||||
|  |                       ), | ||||||
|  |                       onPressed: () { | ||||||
|  |                         setState(() { | ||||||
|  |                           _passwordVisiblepassword_field = !_passwordVisiblepassword_field; | ||||||
|  |                         }); | ||||||
|  |                       }, | ||||||
|  |                     ), | ||||||
|  |                     errorText: | ||||||
|  |                         _isPasswordValidpassword_field ? null : 'Please enter a password', | ||||||
|  |                     border: OutlineInputBorder(), | ||||||
|  |                   ), | ||||||
|  |                   onSaved: (value) => formData['password_field'] = value, | ||||||
|  |                   onChanged: _validatePasswordpassword_field, | ||||||
|  |                 ), | ||||||
|  |                 const SizedBox(height: 16), | ||||||
|  |                 TextFormField( | ||||||
|  |                   obscureText: !_passwordVisiblepassword_field, | ||||||
|  |                   decoration: InputDecoration( | ||||||
|  |                     labelText: 'Confirm Password Field', | ||||||
|  |                     suffixIcon: IconButton( | ||||||
|  |                       icon: Icon( | ||||||
|  |                         _passwordVisiblepassword_field | ||||||
|  |                             ? Icons.visibility | ||||||
|  |                             : Icons.visibility_off, | ||||||
|  |                       ), | ||||||
|  |                       onPressed: () { | ||||||
|  |                         setState(() { | ||||||
|  |                           _passwordVisiblepassword_field = !_passwordVisiblepassword_field; | ||||||
|  |                         }); | ||||||
|  |                       }, | ||||||
|  |                     ), | ||||||
|  |                     errorText: | ||||||
|  |                         _doPasswordsMatchpassword_field ? null : 'Passwords do not match', | ||||||
|  |                     border: OutlineInputBorder(), | ||||||
|  |                   ), | ||||||
|  |                   onChanged: _validateConfirmPasswordpassword_field, | ||||||
|  |                 ), | ||||||
|  | 
 | ||||||
|  | ReusableTextField( | ||||||
|  |                   controller: textarea_fieldController, | ||||||
|  | 
 | ||||||
|  |   onSaved:(value) => formData['textarea_field'] = value , | ||||||
|  |   label: "Enter Textarea Field", | ||||||
|  |   maxLines: 5, | ||||||
|  | // ValidationProperties | ||||||
|  | ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                        SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ReusableDatePickerField( | ||||||
|  |                 label:' Date Field', controller: date_field  | ||||||
|  | , | ||||||
|  |                                       onSaved: (value) => formData['date_field'] = value,), | ||||||
|  | const SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ReusableTextField( | ||||||
|  |                   controller: datetime_fieldController, | ||||||
|  | 
 | ||||||
|  |   onSaved:(value) => formData['datetime_field'] = value , | ||||||
|  |   label:"Enter Datetime Field", | ||||||
|  |   // ValidationProperties | ||||||
|  | ), | ||||||
|  | 
 | ||||||
|  |   SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Padding( | ||||||
|  |                     padding: getPadding(top: 19), | ||||||
|  |                     child: Column( | ||||||
|  |                         crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                         mainAxisAlignment: MainAxisAlignment.start, | ||||||
|  |                         children: [ | ||||||
|  |                           Text("Email", | ||||||
|  |                               overflow: TextOverflow.ellipsis, | ||||||
|  |                               textAlign: TextAlign.left, | ||||||
|  |                               style: AppStyle.txtGilroyMedium16Bluegray900), | ||||||
|  |                           CustomTextFormField( | ||||||
|  |                               hintText: "Enter Email", | ||||||
|  |     errorText: _isemailEmailValid ? null : 'Please enter a valid email', | ||||||
|  | 
 | ||||||
|  | onsaved: (value) => formData['email'] = value, | ||||||
|  |   onChanged: (value) { | ||||||
|  |     _validateemailEmail(value); | ||||||
|  |   },                             | ||||||
|  |   margin: getMargin(top: 6)) | ||||||
|  |                         ])), | ||||||
|  | 
 | ||||||
|  |    const SizedBox(width: 8), | ||||||
|  |                 CustomButton( | ||||||
|  |                   height: getVerticalSize(50), | ||||||
|  |                   text: "Submit", | ||||||
|  |                   margin: getMargin(top: 24, bottom: 5), | ||||||
|  |                   onTap: () async { | ||||||
|  |                     if (_formKey.currentState!.validate()) { | ||||||
|  |                       _formKey.currentState!.save();  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | formData['active'] = active; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  |                       try { | ||||||
|  |                         print(formData); | ||||||
|  |   Map<String, dynamic> createdEntity =  await provider.createEntity(formData);  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  | 
 | ||||||
|  |                         Navigator.pop(context); | ||||||
|  |                       } catch (e) { | ||||||
|  |                         // ignore: use_build_context_synchronously | ||||||
|  |                         showDialog( | ||||||
|  |                           context: context, | ||||||
|  |                           builder: (BuildContext context) { | ||||||
|  |                             return AlertDialog( | ||||||
|  |                               title: const Text('Error'), | ||||||
|  |                               content: Text('Failed to create Test_a: $e'), | ||||||
|  |                               actions: [ | ||||||
|  |                                 TextButton( | ||||||
|  |                                   child: const Text('OK'), | ||||||
|  |                                   onPressed: () { | ||||||
|  |                                     Navigator.of(context).pop(); | ||||||
|  |                                   }, | ||||||
|  |                                 ), | ||||||
|  |                               ], | ||||||
|  |                             ); | ||||||
|  |                           }, | ||||||
|  |                         ); | ||||||
|  |                       } | ||||||
|  |                     } | ||||||
|  |                   }, | ||||||
|  |                 ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |    ], | ||||||
|  |           ), | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |      ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,873 @@ | |||||||
|  | // ignore_for_file: use_build_context_synchronously | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:intl/intl.dart'; | ||||||
|  | import 'Test_a_create_entity_screen.dart'; | ||||||
|  | import 'Test_a_update_entity_screen.dart'; | ||||||
|  | import '../Test_a_viewModel/Test_a_view_model_screen.dart'; | ||||||
|  | import 'package:flutter/services.dart'; | ||||||
|  | import 'package:speech_to_text/speech_to_text.dart' as stt; | ||||||
|  | import '../../../../theme/app_style.dart'; | ||||||
|  | import '../../../../utils/size_utils.dart'; | ||||||
|  | import '../../../../widgets/custom_icon_button.dart'; | ||||||
|  | import '../../../../utils/image_constant.dart'; | ||||||
|  | import '../../../../widgets/app_bar/appbar_image.dart'; | ||||||
|  | import '../../../../widgets/app_bar/appbar_title.dart'; | ||||||
|  | import '../../../../widgets/app_bar/custom_app_bar.dart'; | ||||||
|  | import '../../../../theme/app_decoration.dart'; | ||||||
|  | import 'package:multi_select_flutter/multi_select_flutter.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_text_field.dart'; | ||||||
|  | import 'package:provider/provider.dart'; | ||||||
|  | import '../../../../utils/toast_messages/toast_message_util.dart'; | ||||||
|  | import 'package:fluttertoast/fluttertoast.dart'; | ||||||
|  | 
 | ||||||
|  | class test_a_entity_list_screen extends StatefulWidget { | ||||||
|  |   static const String routeName = '/entity-list'; | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   _test_a_entity_list_screenState createState() => _test_a_entity_list_screenState(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class _test_a_entity_list_screenState extends State<test_a_entity_list_screen> { | ||||||
|  |   List<Map<String, dynamic>> entities = []; | ||||||
|  |   List<Map<String, dynamic>> filteredEntities = []; | ||||||
|  |   List<Map<String, dynamic>> serachEntities = []; | ||||||
|  | 
 | ||||||
|  |   bool showCardView = true; // Add this variable to control the view mode | ||||||
|  |   TextEditingController searchController = TextEditingController(); | ||||||
|  |   late stt.SpeechToText _speech; | ||||||
|  | 
 | ||||||
|  |   bool isLoading = false; // Add this variable to track loading state | ||||||
|  |   int currentPage = 0; | ||||||
|  |   int pageSize = 10; // Adjust this based on your backend API | ||||||
|  | 
 | ||||||
|  |   final ScrollController _scrollController = ScrollController(); | ||||||
|  |   @override | ||||||
|  |   void initState() { | ||||||
|  |     _speech = stt.SpeechToText(); | ||||||
|  |     super.initState(); | ||||||
|  |     fetchEntities(); | ||||||
|  |     _scrollController.addListener(_scrollListener); | ||||||
|  |     fetchwithoutpaging(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Future<void> fetchwithoutpaging() async { | ||||||
|  |     try { | ||||||
|  |         final provider = | ||||||
|  |           Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  |       final fetchedEntities = await provider.getEntities(); | ||||||
|  |         setState(() { | ||||||
|  |           serachEntities = fetchedEntities; // Update only filteredEntities | ||||||
|  |         }); | ||||||
|  |     } catch (e) { | ||||||
|  |       showDialog( | ||||||
|  |         context: context, | ||||||
|  |         builder: (BuildContext context) { | ||||||
|  |           return AlertDialog( | ||||||
|  |             title: const Text('Error'), | ||||||
|  |             content: Text('Failed to fetch Test_a: $e'), | ||||||
|  |             actions: [ | ||||||
|  |               TextButton( | ||||||
|  |                 child: const Text('OK'), | ||||||
|  |                 onPressed: () { | ||||||
|  |                   Navigator.of(context).pop(); | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|  |           ); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | Future<void> fetchEntities() async { | ||||||
|  |     try { | ||||||
|  |       setState(() { | ||||||
|  |         isLoading = true; | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  |    | ||||||
|  |     final provider = | ||||||
|  |           Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  |       final fetchedEntities = | ||||||
|  |           await provider.getAllWithPagination(currentPage, pageSize); | ||||||
|  |         setState(() { | ||||||
|  |           entities.addAll(fetchedEntities); // Add new data to the existing list | ||||||
|  |           filteredEntities = entities.toList(); // Update only filteredEntities | ||||||
|  |           currentPage++; | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |      } catch (e) { | ||||||
|  |       showDialog( | ||||||
|  |         context: context, | ||||||
|  |         builder: (BuildContext context) { | ||||||
|  |           return AlertDialog( | ||||||
|  |             title: const Text('Error'), | ||||||
|  |             content: Text('Failed to fetch Test_a data: $e'), | ||||||
|  |             actions: [ | ||||||
|  |               TextButton( | ||||||
|  |                 child: const Text('OK'), | ||||||
|  |                 onPressed: () { | ||||||
|  |                   Navigator.of(context).pop(); | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|  |           ); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |     } finally { | ||||||
|  |       setState(() { | ||||||
|  |         isLoading = false; | ||||||
|  |       }); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _scrollListener() { | ||||||
|  |     if (_scrollController.position.pixels == | ||||||
|  |         _scrollController.position.maxScrollExtent) { | ||||||
|  |       fetchEntities(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<void> deleteEntity(Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |       final provider = | ||||||
|  |           Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  | 
 | ||||||
|  |       await provider.deleteEntity(entity['id']);; | ||||||
|  |       setState(() { | ||||||
|  |         entities.remove(entity); | ||||||
|  |       }); | ||||||
|  |     } catch (e) { | ||||||
|  |       showDialog( | ||||||
|  |         context: context, | ||||||
|  |         builder: (BuildContext context) { | ||||||
|  |           return AlertDialog( | ||||||
|  |             title: const Text('Error'), | ||||||
|  |             content: Text('Failed to delete entity: $e'), | ||||||
|  |             actions: [ | ||||||
|  |               TextButton( | ||||||
|  |                 child: const Text('OK'), | ||||||
|  |                 onPressed: () { | ||||||
|  |                   Navigator.of(context).pop(); | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|  |           ); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _searchEntities(String keyword) { | ||||||
|  |     setState(() { | ||||||
|  |       filteredEntities = serachEntities | ||||||
|  |           .where((entity) => | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['name'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['description'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               entity['active'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['number_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['phone_number'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['password_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['textarea_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['date_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['datetime_field'].toString().toLowerCase().contains(keyword.toLowerCase()) || | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |               | ||||||
|  |  entity['email'].toString().toLowerCase().contains(keyword.toLowerCase())  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  ).toList(); | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _startListening() async { | ||||||
|  |     if (!_speech.isListening) { | ||||||
|  |       bool available = await _speech.initialize( | ||||||
|  |         onStatus: (status) { | ||||||
|  |           print('Speech recognition status: $status'); | ||||||
|  |         }, | ||||||
|  |         onError: (error) { | ||||||
|  |           print('Speech recognition error: $error'); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       if (available) { | ||||||
|  |         _speech.listen( | ||||||
|  |           onResult: (result) { | ||||||
|  |             if (result.finalResult) { | ||||||
|  |               searchController.text = result.recognizedWords; | ||||||
|  |               _searchEntities(result.recognizedWords); | ||||||
|  |             } | ||||||
|  |           }, | ||||||
|  |         ); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _stopListening() { | ||||||
|  |     if (_speech.isListening) { | ||||||
|  |       _speech.stop(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   void dispose() { | ||||||
|  |     _speech.cancel(); | ||||||
|  |     super.dispose(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | onTapArrowleft1(BuildContext context) { | ||||||
|  |     Navigator.pop(context); | ||||||
|  |   } | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     return SafeArea( | ||||||
|  |       child: Scaffold( | ||||||
|  |         appBar: CustomAppBar( | ||||||
|  |           height: getVerticalSize(49), | ||||||
|  |           leadingWidth: 40, | ||||||
|  |           leading: AppbarImage( | ||||||
|  |               height: getSize(24), | ||||||
|  |               width: getSize(24), | ||||||
|  |               svgPath: ImageConstant.imgArrowleft, | ||||||
|  |               margin: getMargin(left: 16, top: 12, bottom: 13), | ||||||
|  |               onTap: () { | ||||||
|  |                 onTapArrowleft1(context); | ||||||
|  |               }), | ||||||
|  |           centerTitle: true, | ||||||
|  |           title: AppbarTitle(text: " Test_a"), | ||||||
|  |         actions: [ | ||||||
|  |          Row( | ||||||
|  |             children: [ | ||||||
|  |               Switch( | ||||||
|  |                 activeColor: Colors.greenAccent, | ||||||
|  |                 inactiveThumbColor: Colors.white, | ||||||
|  |                 value: showCardView, | ||||||
|  |                 onChanged: (value) { | ||||||
|  |                   setState(() { | ||||||
|  |                     showCardView = value; | ||||||
|  |                   }); | ||||||
|  |                 }, | ||||||
|  |               ), | ||||||
|  |                | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             ], | ||||||
|  |           ),        ], | ||||||
|  |       ), | ||||||
|  |       body: RefreshIndicator( | ||||||
|  |         onRefresh: () async { | ||||||
|  |           currentPage = 1; | ||||||
|  |           entities.clear(); | ||||||
|  |           await fetchEntities(); | ||||||
|  |         }, | ||||||
|  |         child: Column( | ||||||
|  |           children: [ | ||||||
|  |             Padding( | ||||||
|  |               padding: const EdgeInsets.all(8.0), | ||||||
|  |               child: TextField( | ||||||
|  |                 controller: searchController, | ||||||
|  |                 onChanged: (value) { | ||||||
|  |                   _searchEntities(value); | ||||||
|  |                 }, | ||||||
|  |                 decoration: InputDecoration( | ||||||
|  |                   hintText: 'Search...', | ||||||
|  |                   contentPadding: const EdgeInsets.symmetric(horizontal: 16.0), | ||||||
|  |                   filled: true, | ||||||
|  |                   fillColor: Colors.grey[200], | ||||||
|  |                   border: OutlineInputBorder( | ||||||
|  |                     borderRadius: BorderRadius.circular(10.0), | ||||||
|  |                     borderSide: BorderSide.none, | ||||||
|  |                   ), | ||||||
|  |                   suffixIcon: IconButton( | ||||||
|  |                     icon: const Icon(Icons.mic), | ||||||
|  |                     onPressed: () { | ||||||
|  |                       _startListening(); | ||||||
|  |                     }, | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |             Expanded( | ||||||
|  |               child: ListView.builder( | ||||||
|  |                 itemCount: filteredEntities.length + (isLoading ? 1 : 0), | ||||||
|  |                 itemBuilder: (BuildContext context, int index) { | ||||||
|  |                   if (index < filteredEntities.length) { | ||||||
|  |                     final entity = filteredEntities[index]; | ||||||
|  |                     return _buildListItem(entity); | ||||||
|  |                   } else { | ||||||
|  |                     // Display the loading indicator at the bottom when new data is loading | ||||||
|  |                     return const Padding( | ||||||
|  |                       padding: EdgeInsets.all(8.0), | ||||||
|  |                       child: Center( | ||||||
|  |                         child: CircularProgressIndicator(), | ||||||
|  |                       ), | ||||||
|  |                     ); | ||||||
|  |                   } | ||||||
|  |                 }, | ||||||
|  |                 controller: _scrollController, | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |           ], | ||||||
|  |         ), | ||||||
|  |       ), | ||||||
|  |       floatingActionButton: FloatingActionButton( | ||||||
|  |         onPressed: () { | ||||||
|  |           Navigator.push( | ||||||
|  |             context, | ||||||
|  |             MaterialPageRoute( | ||||||
|  |               builder: (context) => ChangeNotifierProvider( | ||||||
|  |                 create: (context) => Test_aViewModelScreen(), | ||||||
|  |                 child: test_aCreateEntityScreen(), | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |           ).then((_) { | ||||||
|  |             fetchEntities(); | ||||||
|  |           }); | ||||||
|  |         }, | ||||||
|  |         child: const Icon(Icons.add), | ||||||
|  |       ), | ||||||
|  |     )); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Widget _buildListItem(Map<String, dynamic> entity) { | ||||||
|  |     return showCardView ? _buildCardView(entity) : _buildNormalView(entity); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   // Function to build card view for a list item | ||||||
|  |   Widget _buildCardView(Map<String, dynamic> entity) { | ||||||
|  |  return      Card( | ||||||
|  |         elevation: 2, | ||||||
|  |         margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), | ||||||
|  |         child: _buildNormalView(entity)) | ||||||
|  |  ; } | ||||||
|  | 
 | ||||||
|  |   // Function to build normal view for a list item | ||||||
|  |   | ||||||
|  |  // Function to build normal view for a list item | ||||||
|  | 
 | ||||||
|  |   Widget _buildNormalView(Map<String, dynamic> entity) { | ||||||
|  |     final values = entity.values.elementAt(21) ?? 'Authsec'; | ||||||
|  | 
 | ||||||
|  |     return SizedBox( | ||||||
|  |       width: double.maxFinite, | ||||||
|  |       child: Container( | ||||||
|  |         padding: getPadding( | ||||||
|  |           left: 16, | ||||||
|  |           top: 5, | ||||||
|  |           right: 5, | ||||||
|  |           bottom: 17, | ||||||
|  |         ), | ||||||
|  |         decoration: AppDecoration.outlineGray70011.copyWith( | ||||||
|  |             borderRadius: BorderRadiusStyle.roundedBorder6, | ||||||
|  |             color: Colors.grey[100]), | ||||||
|  |         child: Column( | ||||||
|  |           mainAxisSize: MainAxisSize.min, | ||||||
|  |           crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |           mainAxisAlignment: MainAxisAlignment.center, | ||||||
|  |           children: [ | ||||||
|  |             Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                   //right: 13, | ||||||
|  |                   ), | ||||||
|  |               child: Row( | ||||||
|  |                 children: [ | ||||||
|  |                   Container( | ||||||
|  |                     width: MediaQuery.of(context).size.width * 0.30, | ||||||
|  |                     margin: getMargin( | ||||||
|  |                       left: 8, | ||||||
|  |                       top: 3, | ||||||
|  |                       bottom: 1, | ||||||
|  |                     ), | ||||||
|  |                     child: Column( | ||||||
|  |                       crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                       mainAxisAlignment: MainAxisAlignment.start, | ||||||
|  |                       children: [ | ||||||
|  |                         Text( | ||||||
|  |                           entity['id'].toString(), | ||||||
|  |                           overflow: TextOverflow.ellipsis, | ||||||
|  |                           textAlign: TextAlign.left, | ||||||
|  |                           style: AppStyle.txtGreenSemiBold16, | ||||||
|  |                         ), | ||||||
|  |                       ], | ||||||
|  |                     ), | ||||||
|  |                   ), | ||||||
|  |                   const Spacer(), | ||||||
|  |                   PopupMenuButton<String>( | ||||||
|  |                     icon: const Icon( | ||||||
|  |                       Icons.more_vert, | ||||||
|  |                       color: Colors.black, | ||||||
|  |                       size: 16, | ||||||
|  |                     ), | ||||||
|  |                     itemBuilder: (BuildContext context) { | ||||||
|  |                       return [ | ||||||
|  |                         PopupMenuItem<String>( | ||||||
|  |                           value: 'edit', | ||||||
|  |                           child: Row( | ||||||
|  |                             children: [ | ||||||
|  |                               const Icon( | ||||||
|  |                                 Icons.edit, | ||||||
|  |                                 size: 16, // Adjust the icon size as needed | ||||||
|  |                               ), | ||||||
|  |                               const SizedBox(width: 8), | ||||||
|  |                               Text( | ||||||
|  |                                 'Edit', | ||||||
|  |                                 style: AppStyle | ||||||
|  |                                     .txtGilroySemiBold16, // Adjust the text size as needed | ||||||
|  |                               ), | ||||||
|  |                             ], | ||||||
|  |                           ), | ||||||
|  |                         ), | ||||||
|  |                         PopupMenuItem<String>( | ||||||
|  |                           value: 'delete', | ||||||
|  |                           child: Row( | ||||||
|  |                             children: [ | ||||||
|  |                               const Icon( | ||||||
|  |                                 Icons.delete, | ||||||
|  |                                 size: 16, // Adjust the icon size as needed | ||||||
|  |                               ), | ||||||
|  |                               const SizedBox(width: 8), | ||||||
|  |                               Text( | ||||||
|  |                                 'Delete', | ||||||
|  |                                 style: AppStyle | ||||||
|  |                                     .txtGilroySemiBold16, // Adjust the text size as needed | ||||||
|  |                               ), | ||||||
|  |                             ], | ||||||
|  |                           ), | ||||||
|  |                         ), | ||||||
|  |                       ]; | ||||||
|  |                     }, | ||||||
|  |                     onSelected: (String value) { | ||||||
|  |                       if (value == 'edit') { | ||||||
|  |                        Navigator.push( | ||||||
|  |                           context, | ||||||
|  |                           MaterialPageRoute( | ||||||
|  |                             builder: (context) => ChangeNotifierProvider( | ||||||
|  |                               create: (context) => Test_aViewModelScreen(), | ||||||
|  |                               child: test_aUpdateEntityScreen(entity: entity), | ||||||
|  |                             ), | ||||||
|  |                           ), | ||||||
|  |                         ).then((_) { | ||||||
|  |                           fetchEntities(); | ||||||
|  |                         }); | ||||||
|  |                       } else if (value == 'delete') { | ||||||
|  |                         showDialog( | ||||||
|  |                           context: context, | ||||||
|  |                           builder: (BuildContext context) { | ||||||
|  |                             return AlertDialog( | ||||||
|  |                               title: const Text('Confirm Deletion'), | ||||||
|  |                               content: const Text( | ||||||
|  |                                   'Are you sure you want to delete?'), | ||||||
|  |                               actions: [ | ||||||
|  |                                 TextButton( | ||||||
|  |                                   child: const Text('Cancel'), | ||||||
|  |                                   onPressed: () { | ||||||
|  |                                     Navigator.of(context).pop(); | ||||||
|  |                                   }, | ||||||
|  |                                 ), | ||||||
|  |                                 TextButton( | ||||||
|  |                                   child: const Text('Delete'), | ||||||
|  |                                   onPressed: () { | ||||||
|  |                                     Navigator.of(context).pop(); | ||||||
|  |                                     deleteEntity(entity) | ||||||
|  |                                         .then((value) => {fetchEntities()}); | ||||||
|  |                                   }, | ||||||
|  |                                 ), | ||||||
|  |                               ], | ||||||
|  |                             ); | ||||||
|  |                           }, | ||||||
|  |                         ); | ||||||
|  |                       } | ||||||
|  |                     }, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Name : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['name'].toString() ?? 'No Name Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Description : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['description'].toString() ?? 'No Description Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Active : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['active'].toString() ?? 'No Active Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Number Field : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['number_field'].toString() ?? 'No Number Field Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Phone Number : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['phone_number'].toString() ?? 'No Phone Number Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Password Field : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['password_field'].toString() ?? 'No Password Field Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Textarea Field : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['textarea_field'].toString() ?? 'No Textarea Field Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Date Field : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['date_field'].toString() ?? 'No Date Field Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Datetime Field : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['datetime_field'].toString() ?? 'No Datetime Field Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |               padding: getPadding( | ||||||
|  |                 top: 10, | ||||||
|  |               ), | ||||||
|  |               child: Row( | ||||||
|  |                 mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||||||
|  |                 children: [ | ||||||
|  |                   Text( | ||||||
|  |                     "Email : ", | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16, | ||||||
|  |                   ), | ||||||
|  |                   Text( | ||||||
|  |                     entity['email'].toString() ?? 'No Email Available', | ||||||
|  |                     overflow: TextOverflow.ellipsis, | ||||||
|  |                     textAlign: TextAlign.left, | ||||||
|  |                     style: AppStyle.txtGilroyMedium16Bluegray900, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  |       | ||||||
|  |    ], | ||||||
|  |         ), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Widget _buildLeadingIcon(String title) { | ||||||
|  |     return CircleAvatar( | ||||||
|  |       backgroundColor: Colors.blue, | ||||||
|  |       child: Text( | ||||||
|  |         title.isNotEmpty ? title[0].toUpperCase() : 'NA', | ||||||
|  |         style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _showAdditionalFieldsDialog( | ||||||
|  |     BuildContext context, | ||||||
|  |     Map<String, dynamic> entity, | ||||||
|  |   ) { | ||||||
|  |     final dateFormat = DateFormat('yyyy-MM-dd HH:mm:ss'); | ||||||
|  | 
 | ||||||
|  |     showDialog( | ||||||
|  |       context: context, | ||||||
|  |       builder: (BuildContext context) { | ||||||
|  |         return AlertDialog( | ||||||
|  |           title: const Text('Additional Fields'), | ||||||
|  |           content: Column( | ||||||
|  |             crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |             mainAxisSize: MainAxisSize.min, | ||||||
|  |             children: [ | ||||||
|  |               Text( | ||||||
|  |                   'Created At: ${_formatTimestamp(entity['createdAt'], dateFormat)}'), | ||||||
|  |               Text('Created By: ${entity['createdBy'] ?? 'N/A'}'), | ||||||
|  |               Text('Updated By: ${entity['updatedBy'] ?? 'N/A'}'), | ||||||
|  |               Text( | ||||||
|  |                   'Updated At: ${_formatTimestamp(entity['updatedAt'], dateFormat)}'), | ||||||
|  |               Text('Account ID: ${entity['accountId'] ?? 'N/A'}'), | ||||||
|  |             ], | ||||||
|  |           ), | ||||||
|  |           actions: [ | ||||||
|  |             TextButton( | ||||||
|  |               child: const Text('Close'), | ||||||
|  |               onPressed: () { | ||||||
|  |                 Navigator.of(context).pop(); | ||||||
|  |               }, | ||||||
|  |             ), | ||||||
|  |           ], | ||||||
|  |         ); | ||||||
|  |       }, | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   String _formatTimestamp(dynamic timestamp, DateFormat dateFormat) { | ||||||
|  |     if (timestamp is int) { | ||||||
|  |       final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp); | ||||||
|  |       return dateFormat.format(dateTime); | ||||||
|  |     } else if (timestamp is String) { | ||||||
|  |       return timestamp; | ||||||
|  |     } else { | ||||||
|  |       return 'N/A'; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |          | ||||||
| @ -0,0 +1,445 @@ | |||||||
|  | // ignore_for_file: use_build_context_synchronously | ||||||
|  | import 'dart:convert'; | ||||||
|  | import 'package:provider/provider.dart'; | ||||||
|  | import '../Test_a_viewModel/Test_a_view_model_screen.dart'; | ||||||
|  | import '../../../../utils/image_constant.dart'; | ||||||
|  | import '../../../../utils/size_utils.dart'; | ||||||
|  | import '../../../../theme/app_style.dart'; | ||||||
|  | import '../../../../widgets/app_bar/appbar_image.dart'; | ||||||
|  | import '../../../../widgets/app_bar/appbar_title.dart'; | ||||||
|  | import '../../../../widgets/app_bar/custom_app_bar.dart'; | ||||||
|  | import 'package:barcode_widget/barcode_widget.dart'; | ||||||
|  | import 'package:fluttertoast/fluttertoast.dart'; | ||||||
|  | import '../../../../widgets/custom_button.dart'; | ||||||
|  | import '../../../../widgets/custom_text_form_field.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:autocomplete_textfield/autocomplete_textfield.dart'; | ||||||
|  | import 'package:qr_flutter/qr_flutter.dart'; | ||||||
|  | import 'package:intl/intl.dart'; | ||||||
|  | 
 | ||||||
|  | import 'dart:math'; | ||||||
|  | import '../../../../Reuseable/reusable_text_field.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_date_picker_field.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_date_time_picker_field.dart'; | ||||||
|  | import '../../../../Reuseable/reusable_dropdown_field.dart'; | ||||||
|  | import 'package:flutter/services.dart'; | ||||||
|  | class test_aUpdateEntityScreen extends StatefulWidget { | ||||||
|  |     final Map<String, dynamic> entity; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   test_aUpdateEntityScreen({required this.entity}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   _test_aUpdateEntityScreenState createState() => _test_aUpdateEntityScreenState(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class _test_aUpdateEntityScreenState extends State<test_aUpdateEntityScreen> { | ||||||
|  |   final _formKey = GlobalKey<FormState>(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   bool isactive = false; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   bool _passwordVisiblepassword_field = false; | ||||||
|  |   bool _isPasswordValidpassword_field = true; | ||||||
|  |   bool _doPasswordsMatchpassword_field = true; | ||||||
|  | 
 | ||||||
|  |   String _passwordpassword_field = ''; // To store the first password | ||||||
|  | 
 | ||||||
|  |   void _validatePasswordpassword_field(String password) { | ||||||
|  |     setState(() { | ||||||
|  |       _isPasswordValidpassword_field = password.isNotEmpty; | ||||||
|  |       _passwordpassword_field = password; // Store the password for later comparison | ||||||
|  |       _doPasswordsMatchpassword_field = true; // Reset match flag on new input | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   void _validateConfirmPasswordpassword_field(String confirmPassword) { | ||||||
|  |     setState(() { | ||||||
|  |       _doPasswordsMatchpassword_field = confirmPassword == _passwordpassword_field; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | TextEditingController date_field = TextEditingController();  | ||||||
|  | DateTime selectedDatedate_field = DateTime.now(); | ||||||
|  | 
 | ||||||
|  | Future<void> _selectDatedate_field(BuildContext context) async { | ||||||
|  |   final DateTime? picked = await showDatePicker( | ||||||
|  |     context: context, | ||||||
|  |     initialDate: selectedDatedate_field, | ||||||
|  |     firstDate: DateTime(2000), | ||||||
|  |     lastDate: DateTime(2101), | ||||||
|  |   ); | ||||||
|  |   print(picked); | ||||||
|  |   if (picked != null && picked != selectedDatedate_field) { | ||||||
|  |     setState(() { | ||||||
|  |       selectedDatedate_field = picked; | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | bool _isemailEmailValid = true; | ||||||
|  | 
 | ||||||
|  | void _validateemailEmail(String email) { | ||||||
|  |   setState(() { | ||||||
|  |     _isemailEmailValid = RegExp(r'^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$').hasMatch(email); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   void initState() { | ||||||
|  |     super.initState(); | ||||||
|  |     final provider = Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | isactive = widget.entity['active'] ?? false; // Set initial value | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     final provider = Provider.of<Test_aViewModelScreen>(context, listen: false); | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: CustomAppBar( | ||||||
|  |           height: getVerticalSize(49), | ||||||
|  |           leadingWidth: 40, | ||||||
|  |           leading: AppbarImage( | ||||||
|  |               height: getSize(24), | ||||||
|  |               width: getSize(24), | ||||||
|  |               svgPath: ImageConstant.imgArrowleftBlueGray900, | ||||||
|  |               margin: getMargin(left: 16, top: 12, bottom: 13), | ||||||
|  |               onTap: () { | ||||||
|  |                 Navigator.pop(context); | ||||||
|  |               }), | ||||||
|  |           centerTitle: true, | ||||||
|  |           title: AppbarTitle(text: "Update Test_a"),        actions: [ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         ], | ||||||
|  | ), | ||||||
|  |       body:  SingleChildScrollView( | ||||||
|  |         child: Padding( | ||||||
|  |           padding: const EdgeInsets.all(16), | ||||||
|  |           child: Form( | ||||||
|  |             key: _formKey, | ||||||
|  |             child: Column( | ||||||
|  |               children: [ | ||||||
|  |   | ||||||
|  |                         ReusableTextField( | ||||||
|  |                             | ||||||
|  |                             label: "Please Enter Name", | ||||||
|  |                             initialValue: widget.entity['name'] ?? '', | ||||||
|  | 
 | ||||||
|  |    // ValidationProperties | ||||||
|  |                             onSaved: (value) => widget.entity['name'] = value, | ||||||
|  | ), | ||||||
|  |                      | ||||||
|  |                           SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             ReusableTextField( | ||||||
|  |               initialValue: widget.entity['description'], | ||||||
|  |               onSaved: (value) => widget.entity['description']= value, | ||||||
|  |               label: "Enter Description", | ||||||
|  |               maxLines: 5, | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | Row( | ||||||
|  |   children: [ | ||||||
|  |     Switch( | ||||||
|  |       value: isactive, | ||||||
|  |       onChanged: (newValue) { | ||||||
|  |         setState(() { | ||||||
|  |           isactive = newValue; | ||||||
|  |         }); | ||||||
|  |       }, | ||||||
|  |   activeColor: Colors.white, | ||||||
|  |               activeTrackColor: Colors.green, | ||||||
|  |               inactiveThumbColor: Colors.white, | ||||||
|  |               inactiveTrackColor: Colors.red, | ||||||
|  |     ), | ||||||
|  |     const SizedBox(width: 8), | ||||||
|  |     const Text('Active'), | ||||||
|  |   ], | ||||||
|  | ), | ||||||
|  | 
 | ||||||
|  |  ReusableTextField( | ||||||
|  |               initialValue: widget.entity['number_field'].toString(), | ||||||
|  |               onSaved: (value) => widget.entity['number_field']= value, | ||||||
|  |               label: "Enter Number Field", | ||||||
|  |               keyboardType: TextInputType.number, | ||||||
|  |               inputFormatters: [ | ||||||
|  |                 FilteringTextInputFormatter.allow((RegExp(r'[0-9]'))), | ||||||
|  |               ], | ||||||
|  |               validator: (value) { | ||||||
|  |                 if (value == null || value.isEmpty) { | ||||||
|  |                   return 'Please enter a number'; | ||||||
|  |                 } | ||||||
|  |                 return null; | ||||||
|  |               }, | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | ReusableTextField( | ||||||
|  |               initialValue: widget.entity['phone_number'], | ||||||
|  |               onSaved: (value) => widget.entity['phone_number'] = value, | ||||||
|  |               label: "Enter Phone Number", | ||||||
|  |               keyboardType: TextInputType.number, | ||||||
|  |               inputFormatters: [ | ||||||
|  |                 FilteringTextInputFormatter.digitsOnly, | ||||||
|  |  LengthLimitingTextInputFormatter( | ||||||
|  |                         10), // Limit input to 10 digits | ||||||
|  |               ], | ||||||
|  |               validator: (value) { | ||||||
|  |                 if (value == null || value.isEmpty) { | ||||||
|  |                   return 'Please enter  Phone Number'; | ||||||
|  |                 } | ||||||
|  |                 if (value.length != 10) { | ||||||
|  |                       return 'Phone number must be exactly 10 digits'; | ||||||
|  |                     } | ||||||
|  |                     return null; | ||||||
|  |               }, | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  | TextFormField( | ||||||
|  |               initialValue: widget.entity['password_field'], | ||||||
|  | 
 | ||||||
|  |                   obscureText: !_passwordVisiblepassword_field, | ||||||
|  |                   decoration: InputDecoration( | ||||||
|  |                     labelText: 'Password Field', | ||||||
|  |                     suffixIcon: IconButton( | ||||||
|  |                       icon: Icon( | ||||||
|  |                         _passwordVisiblepassword_field | ||||||
|  |                             ? Icons.visibility | ||||||
|  |                             : Icons.visibility_off, | ||||||
|  |                       ), | ||||||
|  |                       onPressed: () { | ||||||
|  |                         setState(() { | ||||||
|  |                           _passwordVisiblepassword_field = !_passwordVisiblepassword_field; | ||||||
|  |                         }); | ||||||
|  |                       }, | ||||||
|  |                     ), | ||||||
|  |                     errorText: | ||||||
|  |                         _isPasswordValidpassword_field ? null : 'Please enter a password', | ||||||
|  |                     border: OutlineInputBorder(), | ||||||
|  |                   ), | ||||||
|  |                   onSaved: (value) => widget.entity['password_field'] = value, | ||||||
|  |                   onChanged: _validatePasswordpassword_field, | ||||||
|  |                 ), | ||||||
|  |                 const SizedBox(height: 16), | ||||||
|  |                 TextFormField( | ||||||
|  |                   obscureText: !_passwordVisiblepassword_field, | ||||||
|  |                   decoration: InputDecoration( | ||||||
|  |                     labelText: 'Confirm Password Field', | ||||||
|  |                     suffixIcon: IconButton( | ||||||
|  |                       icon: Icon( | ||||||
|  |                         _passwordVisiblepassword_field | ||||||
|  |                             ? Icons.visibility | ||||||
|  |                             : Icons.visibility_off, | ||||||
|  |                       ), | ||||||
|  |                       onPressed: () { | ||||||
|  |                         setState(() { | ||||||
|  |                           _passwordVisiblepassword_field = !_passwordVisiblepassword_field; | ||||||
|  |                         }); | ||||||
|  |                       }, | ||||||
|  |                     ), | ||||||
|  |                     errorText: | ||||||
|  |                         _doPasswordsMatchpassword_field ? null : 'Passwords do not match', | ||||||
|  |                     border: OutlineInputBorder(), | ||||||
|  |                   ), | ||||||
|  |                   onChanged: _validateConfirmPasswordpassword_field, | ||||||
|  |                 ), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             ReusableTextField( | ||||||
|  |               initialValue: widget.entity['textarea_field'], | ||||||
|  |               onSaved: (value) => widget.entity['textarea_field']= value, | ||||||
|  |               label: "Enter Textarea Field", | ||||||
|  |               maxLines: 5, | ||||||
|  |             ), | ||||||
|  | 
 | ||||||
|  |  ReusableDatePickerField(label: 'Date Field', controller: date_field, initialDate: widget.entity['date_field'], | ||||||
|  |                                       onSaved: (value) => widget.entity['date_field'] = value,), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                         ReusableTextField( | ||||||
|  |                             | ||||||
|  |                             label: "Please Enter Datetime Field", | ||||||
|  |                             initialValue: widget.entity['datetime_field'] ?? '', | ||||||
|  | 
 | ||||||
|  |    // ValidationProperties | ||||||
|  |                             onSaved: (value) => widget.entity['datetime_field'] = value, | ||||||
|  | ), | ||||||
|  |                      | ||||||
|  |                           SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   Padding( | ||||||
|  |                     padding: getPadding(top: 19), | ||||||
|  |                     child: Column( | ||||||
|  |                         crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|  |                         mainAxisAlignment: MainAxisAlignment.start, | ||||||
|  |                         children: [ | ||||||
|  |                           Text("Email", | ||||||
|  |                               overflow: TextOverflow.ellipsis, | ||||||
|  |                               textAlign: TextAlign.left, | ||||||
|  |                               style: AppStyle | ||||||
|  |                                   .txtGilroyMedium16Bluegray900), | ||||||
|  |                           CustomTextFormField( | ||||||
|  |                               hintText: "Enter Email", | ||||||
|  |                               initialValue: widget.entity['email'], | ||||||
|  |                                keyboardType: TextInputType.url, | ||||||
|  |                               errorText: _isemailEmailValid ? null : 'Please enter a valid URL', | ||||||
|  |                                 onChanged: _validateemailEmail, | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |    // ValidationProperties | ||||||
|  | 
 | ||||||
|  |                               onsaved: (value) { | ||||||
|  |                                 widget.entity['email'] = value; | ||||||
|  |                               }, | ||||||
|  |                               margin: getMargin(top: 6)) | ||||||
|  |                         ])), | ||||||
|  | 
 | ||||||
|  | SizedBox(height: 16), | ||||||
|  | 
 | ||||||
|  |   | ||||||
|  |           CustomButton( | ||||||
|  |                   height: getVerticalSize(50), | ||||||
|  |                   text: "Update", | ||||||
|  |                   margin: getMargin(top: 24, bottom: 5), | ||||||
|  |                   onTap: () async { | ||||||
|  |                     if (_formKey.currentState!.validate()) { | ||||||
|  |                       _formKey.currentState!.save(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | widget.entity['active'] = isactive; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         | ||||||
|  |                         try { | ||||||
|  |                         await provider.updateEntity( | ||||||
|  |                               widget.entity[ | ||||||
|  |                                   'id'], // Assuming 'id' is the key in your entity map | ||||||
|  |                               widget.entity);    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                         Navigator.pop(context); | ||||||
|  |                       } catch (e) { | ||||||
|  |                         // ignore: use_build_context_synchronously | ||||||
|  |                         showDialog( | ||||||
|  |                           context: context, | ||||||
|  |                           builder: (BuildContext context) { | ||||||
|  |                             return AlertDialog( | ||||||
|  |                               title: const Text('Error'), | ||||||
|  |                               content: | ||||||
|  |                               Text('Failed to update Test_a: $e'), | ||||||
|  |                               actions: [ | ||||||
|  |                                 TextButton( | ||||||
|  |                                   child: const Text('OK'), | ||||||
|  |                                   onPressed: () { | ||||||
|  |                                     Navigator.of(context).pop(); | ||||||
|  |  }, | ||||||
|  |                                   ), | ||||||
|  |                                 ], | ||||||
|  |                               ); | ||||||
|  |                             }, | ||||||
|  |                           ); | ||||||
|  |                         } | ||||||
|  |                       } | ||||||
|  |                     }, | ||||||
|  |                   ), | ||||||
|  |                 ], | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |           ), | ||||||
|  |        ), | ||||||
|  |        ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,82 @@ | |||||||
|  | import 'package:dio/dio.dart'; | ||||||
|  | import '../../../../data/network/base_network_service.dart'; | ||||||
|  | import '../../../../data/network/network_api_service.dart'; | ||||||
|  | import '../../../../resources/api_constants.dart'; | ||||||
|  | 
 | ||||||
|  | class Test_aRepoScreen { | ||||||
|  |   final String baseUrl = ApiConstants.baseUrl; | ||||||
|  |   final BaseNetworkService _helper = NetworkApiService(); | ||||||
|  | 
 | ||||||
|  |   Future<dynamic> getEntities() async { | ||||||
|  |     try { | ||||||
|  |       final response = | ||||||
|  |           await _helper.getGetApiResponse('$baseUrl/Test_a/Test_a'); | ||||||
|  |       return response; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to get all entities: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<dynamic> getAllWithPagination(int page, int size) async { | ||||||
|  |     try { | ||||||
|  |       final response = await _helper.getGetApiResponse( | ||||||
|  |           '$baseUrl/Test_a/Test_a/getall/page?page=$page&size=$size'); | ||||||
|  |       return response; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to get all without pagination: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<dynamic> createEntity(Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |       print("in post api$entity"); | ||||||
|  |       final response = await _helper.getPostApiResponse( | ||||||
|  |           '$baseUrl/Test_a/Test_a', entity); | ||||||
|  | 
 | ||||||
|  |       print(entity); | ||||||
|  | 
 | ||||||
|  |       return response; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to create entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<void> updateEntity(int entityId, Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |       await _helper.getPutApiResponse( | ||||||
|  |           '$baseUrl/Test_a/Test_a/$entityId', entity); | ||||||
|  |       print(entity); | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to update entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<void> deleteEntity(int entityId) async { | ||||||
|  |     try { | ||||||
|  |       await _helper | ||||||
|  |           .getDeleteApiResponse('$baseUrl/Test_a/Test_a/$entityId'); | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to delete entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,121 @@ | |||||||
|  | import 'dart:typed_data'; | ||||||
|  | import 'package:dio/dio.dart'; | ||||||
|  | import 'package:http_parser/http_parser.dart'; | ||||||
|  | import '../../../../utils/toast_messages/toast_message_util.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import '../Test_a_Repo/Test_a_repo_screen.dart'; | ||||||
|  | 
 | ||||||
|  | class Test_aViewModelScreen extends ChangeNotifier{ | ||||||
|  |   final Test_aRepoScreen repo = Test_aRepoScreen(); | ||||||
|  | 
 | ||||||
|  |   Future<List<Map<String, dynamic>>> getEntities() async { | ||||||
|  |     try { | ||||||
|  |       final response = await repo.getEntities(); | ||||||
|  |       final entities = (response as List).cast<Map<String, dynamic>>(); | ||||||
|  |       return entities; | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to get all entities: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   Future<List<Map<String, dynamic>>> getAllWithPagination( | ||||||
|  |       int page, int size) async { | ||||||
|  |     try { | ||||||
|  |       final response = | ||||||
|  |           await repo.getAllWithPagination(page, size); // ✅ Use await | ||||||
|  | 
 | ||||||
|  |       print('with pagination res - $response'); | ||||||
|  | 
 | ||||||
|  |       // ✅ Ensure response is a Map<String, dynamic> | ||||||
|  |       if (response is! Map<String, dynamic>) { | ||||||
|  |         throw Exception('Unexpected response format: $response'); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       // ✅ Extract 'content' and ensure it's a list | ||||||
|  |       final entities = (response['content'] as List) | ||||||
|  |           .cast<Map<String, dynamic>>() // ✅ Ensure list of maps | ||||||
|  |           .toList(); | ||||||
|  |       return entities; | ||||||
|  |     } catch (e) { | ||||||
|  |       print(e); | ||||||
|  |       throw Exception('Failed to get all without pagination :- $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   Future<Map<String, dynamic>> createEntity(Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |       print("in post api - $entity"); | ||||||
|  |       // Wait for API response | ||||||
|  |       final responseData = | ||||||
|  |           await repo.createEntity(entity) as Map<String, dynamic>; | ||||||
|  |       print('after value - $responseData'); | ||||||
|  |       ToastMessageUtil.showToast( | ||||||
|  |           message: "Added Successfully", toastType: ToastType.success); | ||||||
|  | 
 | ||||||
|  |       return responseData; // Return the data AFTER it is received | ||||||
|  |     } catch (error) { | ||||||
|  |       print("error--$error"); | ||||||
|  |       ToastMessageUtil.showToast( | ||||||
|  |           message: "Got Error", toastType: ToastType.error); | ||||||
|  | 
 | ||||||
|  |       throw Exception( | ||||||
|  |           'Failed to Create Entity: $error'); // Properly rethrow the error | ||||||
|  |     } | ||||||
|  |   }  | ||||||
|  |   Future<void> updateEntity(int entityId, Map<String, dynamic> entity) async { | ||||||
|  |     try { | ||||||
|  |       repo.updateEntity(entityId, entity).then((value) { | ||||||
|  |         ToastMessageUtil.showToast( | ||||||
|  |             message: "Updated Successfully", toastType: ToastType.success); | ||||||
|  |       }).onError( | ||||||
|  |         (error, stackTrace) { | ||||||
|  |           print("error--$error"); | ||||||
|  |           ToastMessageUtil.showToast( | ||||||
|  |               message: "Got Error", toastType: ToastType.error); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |       print(entity); | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to update entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Future<void> deleteEntity(int entityId) async { | ||||||
|  |     try { | ||||||
|  |       repo.deleteEntity(entityId).then((value) { | ||||||
|  |         ToastMessageUtil.showToast( | ||||||
|  |             message: "Deleted Successfully", toastType: ToastType.success); | ||||||
|  |       }).onError( | ||||||
|  |         (error, stackTrace) { | ||||||
|  |           print("error--$error"); | ||||||
|  |           ToastMessageUtil.showToast( | ||||||
|  |               message: "Got Error", toastType: ToastType.error); | ||||||
|  |         }, | ||||||
|  |       ); | ||||||
|  |     } catch (e) { | ||||||
|  |       throw Exception('Failed to delete entity: $e'); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -1,3 +1,6 @@ | |||||||
|  | import '../../Entity/basic1/Test_a/Test_aView/Test_a_entity_list_screen.dart'; | ||||||
|  | import '../../Entity/basic1/Test_a/Test_a_viewModel/Test_a_view_model_screen.dart'; | ||||||
|  | 
 | ||||||
| import 'package:base_project/utils/image_constant.dart'; | import 'package:base_project/utils/image_constant.dart'; | ||||||
| import 'package:base_project/commans/widgets/custome_drawe_item.dart'; | import 'package:base_project/commans/widgets/custome_drawe_item.dart'; | ||||||
| import 'package:base_project/resources/app_colors.dart'; | import 'package:base_project/resources/app_colors.dart'; | ||||||
| @ -9,79 +12,96 @@ import 'package:flutter_svg/svg.dart'; | |||||||
| import 'package:provider/provider.dart'; | import 'package:provider/provider.dart'; | ||||||
| 
 | 
 | ||||||
| class MyCustomDrawer extends StatelessWidget { | class MyCustomDrawer extends StatelessWidget { | ||||||
|   const MyCustomDrawer({super.key}); | const MyCustomDrawer({super.key}); | ||||||
| 
 | 
 | ||||||
|   @override | @override | ||||||
|   Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||||
|     final email = UserManager().email; | final email = UserManager().email; | ||||||
|     final userName = UserManager().userName; | final userName = UserManager().userName; | ||||||
|     final provider = Provider.of<ProfileViewModel>(context, listen: false); | final provider = Provider.of<ProfileViewModel>(context, listen: false); | ||||||
|     return Drawer( | return Drawer( | ||||||
|       child: ListView( | child: ListView( | ||||||
|         padding: EdgeInsets.zero, | padding: EdgeInsets.zero, | ||||||
|         children: <Widget>[ | children: <Widget>[ | ||||||
|           UserAccountsDrawerHeader( | UserAccountsDrawerHeader( | ||||||
|             decoration: const BoxDecoration( | decoration: const BoxDecoration( | ||||||
|               color: AppColors.primary, | color: AppColors.primary, | ||||||
|             ), | ), | ||||||
|             currentAccountPicture: CircleAvatar( | currentAccountPicture: CircleAvatar( | ||||||
|               radius: 60, | radius: 60, | ||||||
|               backgroundColor: AppColors.primary.withOpacity(0.3), | backgroundColor: AppColors.primary.withOpacity(0.3), | ||||||
|               backgroundImage: provider.profileImageBytes != null | backgroundImage: provider.profileImageBytes != null | ||||||
|                   ? MemoryImage(provider.profileImageBytes!) | ? MemoryImage(provider.profileImageBytes!) | ||||||
|                   : null, | : null, | ||||||
|               child: provider.profileImageBytes != null | child: provider.profileImageBytes != null | ||||||
|                   ? null // Use backgroundImage for the actual image, so child should be null | ? null // Use backgroundImage for the actual image, so child should be null | ||||||
|                   : SvgPicture.asset( | : SvgPicture.asset( | ||||||
|                       ImageConstant.userProfileImg, // Placeholder SVG asset | ImageConstant.userProfileImg, // Placeholder SVG asset | ||||||
| 
 | 
 | ||||||
| // AppImages.userProfileImg, // Placeholder SVG asset | // AppImages.userProfileImg, // Placeholder SVG asset | ||||||
|                       width: 60, // Adjust to fit the CircleAvatar | width: 60, // Adjust to fit the CircleAvatar | ||||||
|                       height: 60, | height: 60, | ||||||
|                     ), | ), | ||||||
|             ), | ), | ||||||
|             accountName: Text("Hello, $userName"), | accountName: Text("Hello, $userName"), | ||||||
|             accountEmail: Text(email.toString()), | accountEmail: Text(email.toString()), | ||||||
|           ), | ), | ||||||
|           DrawerItem( | DrawerItem( | ||||||
|             color: AppColors.primary, | color: AppColors.primary, | ||||||
|             icon: Icons.person, | icon: Icons.person, | ||||||
|             title: 'Profile', | title: 'Profile', | ||||||
|             onTap: () { | onTap: () { | ||||||
|               Navigator.pushNamed(context, RouteNames.profileView); | Navigator.pushNamed(context, RouteNames.profileView); | ||||||
|             }, | }, | ||||||
|           ), | ), | ||||||
|           DrawerItem( | DrawerItem( | ||||||
|             color: AppColors.primary, | color: AppColors.primary, | ||||||
|             icon: Icons.system_security_update, | icon: Icons.system_security_update, | ||||||
|             title: 'System Parameters', | title: 'System Parameters', | ||||||
|             onTap: () { | onTap: () { | ||||||
| // Add navigation or other logic here | // Add navigation or other logic here | ||||||
|               Navigator.pushNamed(context, RouteNames.systemParamsView); | Navigator.pushNamed(context, RouteNames.systemParamsView); | ||||||
|             }, | }, | ||||||
|           ), | ), | ||||||
|           DrawerItem( | DrawerItem( | ||||||
|             color: AppColors.primary, | color: AppColors.primary, | ||||||
|             icon: Icons.password, | icon: Icons.password, | ||||||
|             title: 'change password', | title: 'change password', | ||||||
|             onTap: () { | onTap: () { | ||||||
|               Navigator.pushNamed(context, RouteNames.changePasswordView); | Navigator.pushNamed(context, RouteNames.changePasswordView); | ||||||
|             }, | }, | ||||||
|           ), | ), | ||||||
| 
 | 
 | ||||||
| // NEW MENU | // NEW MENU | ||||||
| 
 | DrawerItem( | ||||||
|           DrawerItem( |             color: AppColors.primary, | ||||||
|             icon: Icons.logout, |             icon: Icons.chat_bubble, | ||||||
|             color: Colors.red, |             title: 'Test_a', | ||||||
|             title: 'Logout', |             onTap: () { | ||||||
|             onTap: () async { |               Navigator.push( | ||||||
|               await UserManager().clearUser(); |                 context, | ||||||
|               Navigator.pushReplacementNamed(context, RouteNames.splashView); |                 MaterialPageRoute( | ||||||
|             }, |                   builder: (context) => ChangeNotifierProvider( | ||||||
|  |                     create: (context) => Test_aViewModelScreen(), | ||||||
|  |                     child: test_a_entity_list_screen(), | ||||||
|  |                   ), | ||||||
|  |                 ), | ||||||
|  |               ); | ||||||
|  |             }, | ||||||
|           ), |           ), | ||||||
|         ], | 
 | ||||||
|       ), | 
 | ||||||
|     ); | DrawerItem( | ||||||
|   } | icon: Icons.logout, | ||||||
|  | color: Colors.red, | ||||||
|  | title: 'Logout', | ||||||
|  | onTap: () async { | ||||||
|  | await UserManager().clearUser(); | ||||||
|  | Navigator.pushReplacementNamed(context, RouteNames.splashView); | ||||||
|  | }, | ||||||
|  | ), | ||||||
|  | ], | ||||||
|  | ), | ||||||
|  | ); | ||||||
| } | } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user