| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  | import 'package:flutter/material.dart'; | 
					
						
							| 
									
										
										
										
											2022-09-02 17:19:44 +08:00
										 |  |  | import 'package:flutter/services.dart'; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:19:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-02 17:19:44 +08:00
										 |  |  | class IDTextEditingController extends TextEditingController { | 
					
						
							|  |  |  |   IDTextEditingController({String? text}) : super(text: text); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   String get id => trimID(value.text); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   set id(String newID) => text = formatID(newID); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IDTextInputFormatter extends TextInputFormatter { | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   TextEditingValue formatEditUpdate( | 
					
						
							|  |  |  |       TextEditingValue oldValue, TextEditingValue newValue) { | 
					
						
							|  |  |  |     if (newValue.text.isEmpty) { | 
					
						
							|  |  |  |       return newValue.copyWith(text: ''); | 
					
						
							|  |  |  |     } else if (newValue.text.compareTo(oldValue.text) == 0) { | 
					
						
							|  |  |  |       return newValue; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       int selectionIndexFromTheRight = | 
					
						
							|  |  |  |           newValue.text.length - newValue.selection.extentOffset; | 
					
						
							|  |  |  |       String newID = formatID(newValue.text); | 
					
						
							|  |  |  |       return TextEditingValue( | 
					
						
							|  |  |  |         text: newID, | 
					
						
							|  |  |  |         selection: TextSelection.collapsed( | 
					
						
							|  |  |  |           offset: newID.length - selectionIndexFromTheRight, | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String formatID(String id) { | 
					
						
							|  |  |  |   String id2 = id.replaceAll(' ', ''); | 
					
						
							| 
									
										
										
										
											2022-09-20 19:31:32 +08:00
										 |  |  |   if (int.tryParse(id2) == null) return id; | 
					
						
							| 
									
										
										
										
											2022-09-02 17:19:44 +08:00
										 |  |  |   String newID = ''; | 
					
						
							|  |  |  |   if (id2.length <= 3) { | 
					
						
							|  |  |  |     newID = id2; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     var n = id2.length; | 
					
						
							|  |  |  |     var a = n % 3 != 0 ? n % 3 : 3; | 
					
						
							|  |  |  |     newID = id2.substring(0, a); | 
					
						
							|  |  |  |     for (var i = a; i < n; i += 3) { | 
					
						
							|  |  |  |       newID += " ${id2.substring(i, i + 3)}"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return newID; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String trimID(String id) { | 
					
						
							|  |  |  |   return id.replaceAll(' ', ''); | 
					
						
							|  |  |  | } |