feita a exibição dos dados dos cidadãos e a pesquisa

This commit is contained in:
Reginaldo
2023-04-10 11:56:38 -03:00
parent 8487b3dbba
commit c583038c30
10 changed files with 194 additions and 126 deletions

View File

@@ -1,7 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:line_icons/line_icons.dart';
import 'package:rkm/utils/const_variable.dart'; import 'package:rkm/utils/const_variable.dart';
import 'package:rkm/widgets/icon_button_default.dart'; import 'package:rkm/widgets/icon_button_default.dart';
import 'package:rkm/widgets/input_search_text.dart'; import 'package:rkm/widgets/input_search_text.dart';
import '../service/db/db_sqlite_load.dart';
import '../widgets/appbar_default.dart'; import '../widgets/appbar_default.dart';
import '../widgets/item_citizen.dart'; import '../widgets/item_citizen.dart';
import 'registers_citizen/main_register_citizen_screen.dart'; import 'registers_citizen/main_register_citizen_screen.dart';
@@ -16,6 +18,56 @@ class HomeScreen extends StatefulWidget {
class _HomeScreenState extends State<HomeScreen> { class _HomeScreenState extends State<HomeScreen> {
var inputSearch = TextEditingController(); var inputSearch = TextEditingController();
List dataCitizen = [];
List showResults = [];
loadCitizen()async{
await DbSqliteLoad().intialDB().then((db)async {
dataCitizen = await db.query('CIDADAOS ORDER BY NOME_CIDADAO');
});
searchCitizen();
return 'complete';
}
searchCitizen()async{
if(inputSearch.text.isNotEmpty){
showResults =[];
for (int i =0;dataCitizen.length>i;i++) {
String NOME_CIDADAO = dataCitizen[i]['NOME_CIDADAO'];
if(NOME_CIDADAO.startsWith(inputSearch.text.toUpperCase())){
print('ok $i');
if(showResults.length<10){
showResults.add(dataCitizen[i]);
}
}
}
setState(() {
print(showResults);
});
}else{
setState(() {
for(int i = 0;i<10;i++){
showResults.add(dataCitizen[i]);
}
});
}
}
_searchInit(){
searchCitizen();
}
@override
void initState() {
super.initState();
loadCitizen();
inputSearch.addListener(_searchInit);
}
@override
void dispose() {
super.dispose();
inputSearch.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -28,7 +80,7 @@ class _HomeScreenState extends State<HomeScreen> {
width: width, width: width,
height: height, height: height,
decoration: ConstVariable().backgroundGradient, decoration: ConstVariable().backgroundGradient,
child: Column( child: ListView(
children: [ children: [
Row( Row(
children: [ children: [
@@ -36,7 +88,7 @@ class _HomeScreenState extends State<HomeScreen> {
hint: 'Busca cidadão (Por NOME ou CNS ou PRONTUÁRIO ou DATA NASCIMENTO)', hint: 'Busca cidadão (Por NOME ou CNS ou PRONTUÁRIO ou DATA NASCIMENTO)',
fontSize: 10, fontSize: 10,
controller: inputSearch, controller: inputSearch,
width: width*0.72 width: width*0.72,
), ),
IconButtonDefault( IconButtonDefault(
icon: Icons.person_add, icon: Icons.person_add,
@@ -50,7 +102,7 @@ class _HomeScreenState extends State<HomeScreen> {
onPressed: ()=>Navigator.pushNamed(context, '/attendance_list') onPressed: ()=>Navigator.pushNamed(context, '/attendance_list')
), ),
IconButtonDefault( IconButtonDefault(
icon: Icons.edit_note, icon: LineIcons.edit,
onPressed: ()=>Navigator.pushNamed(context, '/edit_procedure') onPressed: ()=>Navigator.pushNamed(context, '/edit_procedure')
), ),
], ],
@@ -58,15 +110,15 @@ class _HomeScreenState extends State<HomeScreen> {
Container( Container(
width: width, width: width,
height: height*0.8, height: height*0.8,
child: ListView.builder( child: showResults.length == 0?Container():ListView.builder(
itemCount: 10, itemCount: showResults.length,
itemBuilder: (context,index){ itemBuilder: (context,index){
return ItemCitizen( return ItemCitizen(
date: '00/00/0000', date: '${showResults[index]['DT_NASCIMENTO']}',
name: 'JOÃO DA SILVA', name: '${showResults[index]['NOME_CIDADAO']}',
mother: 'MARIA DA SILVA', mother:'${showResults[index]['NOME_MAE']}',
numberCNS: '123456789', numberCNS: '${showResults[index]['CNS']}'=='null'?'999999999999999':'${showResults[index]['CNS']}',
numberMedicalRecord: '012345', numberMedicalRecord: '${showResults[index]['NUM_PRONTUARIO']}',
onTap: ()=> Navigator.push( onTap: ()=> Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => MainRegisterCitizenScreen(screens: 3,)), MaterialPageRoute(builder: (context) => MainRegisterCitizenScreen(screens: 3,)),

View File

@@ -107,7 +107,6 @@ class _LoadInitScreenState extends State<LoadInitScreen> {
setState(() { setState(() {
finish = true; finish = true;
}); });
// Navigator.pushReplacementNamed(context, '/home');
}); });
}); });
}); });

View File

@@ -2,6 +2,8 @@ import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:rkm/models/args_load_init_model.dart'; import 'package:rkm/models/args_load_init_model.dart';
import 'package:rkm/screens/home_screen.dart';
import 'package:rkm/screens/login/sync_login_screen.dart';
import 'package:rkm/service/api/url_api_const.dart'; import 'package:rkm/service/api/url_api_const.dart';
import 'package:rkm/service/db/db_sqlite_load.dart'; import 'package:rkm/service/db/db_sqlite_load.dart';
import 'package:rkm/utils/color_palette.dart'; import 'package:rkm/utils/color_palette.dart';
@@ -17,10 +19,12 @@ import '../../service/api/encrypt_password.dart';
import '../load_init_screen.dart'; import '../load_init_screen.dart';
class LoginSavedScreen extends StatefulWidget { class LoginSavedScreen extends StatefulWidget {
List listControl; List listControl;
ArgsLoadInitModel args;
LoginSavedScreen({ LoginSavedScreen({
required this.listControl required this.listControl,
}); required this.args
});
@override @override
State<LoginSavedScreen> createState() => _LoginSavedScreenState(); State<LoginSavedScreen> createState() => _LoginSavedScreenState();
@@ -32,36 +36,24 @@ class _LoginSavedScreenState extends State<LoginSavedScreen> {
var inputPassword = TextEditingController(); var inputPassword = TextEditingController();
String error = ''; String error = '';
String? now; String? now;
String? selectCity;
bool validatorDropDown= false; bool validatorDropDown= false;
int contLogo = 0; int contLogo = 0;
String mode = 'homologacao';
String urlAPI = UrlApiConst.ModeHomologacao;
bool loading = false; bool loading = false;
checkLogin()async{ checkLogin()async{
CityLoadModel? model;
ArgsLoadInitModel? args; ArgsLoadInitModel? args;
if(inputUser.text.isNotEmpty && inputPassword.text.isNotEmpty && inputUser.text.length>3 && inputPassword.text.length>3){ if(inputUser.text.isNotEmpty && inputPassword.text.isNotEmpty && inputUser.text.length>3 && inputPassword.text.length>3){
if(selectCity!=null){
setState(() { setState(() {
error = ''; error = '';
loading = true; loading = true;
for(int i=0;ConstVariable().itensCity.length > i;i++){
if(ConstVariable().itensCity[i].nameCityFront == selectCity!){
model = ConstVariable().itensCity[i];
}
}
}); });
if(model!=null){
args = ArgsLoadInitModel( args = ArgsLoadInitModel(
mode: mode, mode: widget.args.mode,
model:model!, model:widget.args.model,
user: inputUser.text, user: inputUser.text,
password: inputPassword.text, password: inputPassword.text,
urlAPI: urlAPI urlAPI: widget.args.urlAPI
); );
}
if(args!=null){ if(args!=null){
await ApiDataLoad().apiConect(args!).then((response) async { await ApiDataLoad().apiConect(args!).then((response) async {
if(inputUser.text == inputPassword.text || response['bloqueio']==1){ if(inputUser.text == inputPassword.text || response['bloqueio']==1){
@@ -84,17 +76,12 @@ class _LoginSavedScreenState extends State<LoginSavedScreen> {
}); });
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => LoadInitScreen(args: args!)), MaterialPageRoute(builder: (context) => HomeScreen()),
); );
} }
} }
}); });
} }
}else{
setState(() {
error = 'Selecione sua cidade';
});
}
}else{ }else{
setState(() { setState(() {
error = 'Usuário/senha inválido(s)'; error = 'Usuário/senha inválido(s)';
@@ -102,16 +89,6 @@ class _LoginSavedScreenState extends State<LoginSavedScreen> {
} }
} }
@override
void initState() {
super.initState();
setState(() {
if(widget.listControl.length!=0){
mode = widget.listControl[0]['AMBIENTE'];
}
});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -121,7 +98,21 @@ class _LoginSavedScreenState extends State<LoginSavedScreen> {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
centerTitle: true, centerTitle: true,
title: TextDefault(text: 'RKM AB - Carga Inicial',fontSize: ConstVariable().fontSizeTitleAppBar,color: ColorPalette.white), title: TextDefault(text: 'RKM AB - Login',fontSize: ConstVariable().fontSizeTitleAppBar,color: ColorPalette.white),
actions: [
ButtonDefault(
width: width*0.35,
borderColor: ColorPalette.appBar,
textColor: ColorPalette.white,
title: 'Sincronizar outra unidade',
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SyncLoginScreen(args: widget.args)),
);
}
)
],
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
child: Container( child: Container(
@@ -134,8 +125,8 @@ class _LoginSavedScreenState extends State<LoginSavedScreen> {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Image.asset('assets/images/logo.PNG',width: width*0.4), Image.asset('assets/images/logo.PNG',width: width*0.4),
mode == 'homologacao'?Image.asset('assets/images/homologacao.png',width: width*0.4):Container(), widget.args.mode == 'homologacao'?Image.asset('assets/images/homologacao.png',width: width*0.4):Container(),
mode == 'desenvolvimento'?Image.asset('assets/images/desenvolvimento.png',width: width*0.4):Container(), widget.args.mode == 'desenvolvimento'?Image.asset('assets/images/desenvolvimento.png',width: width*0.4):Container(),
SizedBox(height: 10), SizedBox(height: 10),
loading?Center( loading?Center(
child: Column( child: Column(
@@ -197,7 +188,7 @@ class _LoginSavedScreenState extends State<LoginSavedScreen> {
padding: EdgeInsets.symmetric(vertical: 5), padding: EdgeInsets.symmetric(vertical: 5),
width: width*0.6, width: width*0.6,
child: TextDefault( child: TextDefault(
text: 'Unidade: '+widget.listControl[0]['UNIDADE'].toString(), text: 'Unidade: '+widget.listControl[0]['NOME_UNIDADE'].toString(),
fontWeigth: FontWeight.bold, fontWeigth: FontWeight.bold,
color: Colors.black, color: Colors.black,
textAlign: TextAlign.center, textAlign: TextAlign.center,

View File

@@ -18,37 +18,48 @@ class SplashScreen extends StatefulWidget {
class _SplashScreenState extends State<SplashScreen> { class _SplashScreenState extends State<SplashScreen> {
CityLoadModel? model;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
DbSqliteLoad().intialDB(); DbSqliteLoad().intialDB();
timer(); final PrefService _prefService = PrefService();
_prefService.readCacheModel('user', 'password', 'city', 'mode').then((list){
for(int i=0;ConstVariable().itensCity.length > i;i++){
if(ConstVariable().itensCity[i].nameCityFront == list[2]!){
model = ConstVariable().itensCity[i];
}
}
timer(list);
});
} }
timer()async{ timer(List list)async{
await DbSqliteLoad().intialDB().then((db)async{ await DbSqliteLoad().intialDB().then((db)async{
List dataControl = await db.query('MUNICIPIOS'); List dataControl = await db.query('MUNICIPIOS');
List dataCitizen = await db.query('CIDADAOS'); List dataCitizen = await db.query('CIDADAOS');
if(dataControl.length != 0){ if(dataControl.length != 0){
var query = "SELECT * FROM CONTROLE_INTERNO"; var query = "SELECT * FROM CONTROLE_INTERNO";
dataControl = await db.rawQuery(query); dataControl = await db.rawQuery(query);
print(dataCitizen); // print(dataCitizen);
if(dataCitizen.length != 0){ if(dataCitizen.length != 0){
String? url;
if(list[3]=='desenvolvimento'){
url = UrlApiConst.ApiUrlDesenvolvimento;
}else if(list[3]=='online'){
url = UrlApiConst.ApiUrlOnline;
}else if(list[3]=='homologacao'){
url = UrlApiConst.ApiUrlHomologacao;
}
ArgsLoadInitModel args = ArgsLoadInitModel(mode: list[3], model: model!, user: list[0], password: list[1], urlAPI: url!);
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute(builder: (context) => LoginSavedScreen(listControl: dataControl)), MaterialPageRoute(builder: (context) => LoginSavedScreen(listControl: dataControl,args: args,)),
); );
}else{ }else{
CityLoadModel? model;
String? url; String? url;
final PrefService _prefService = PrefService();
_prefService.readCacheModel('user', 'password', 'city', 'mode').then((list){
print('list $list');
for(int i=0;ConstVariable().itensCity.length > i;i++){
if(ConstVariable().itensCity[i].nameCityFront == list[2]!){
model = ConstVariable().itensCity[i];
}
}
if(list[3]=='desenvolvimento'){ if(list[3]=='desenvolvimento'){
url = UrlApiConst.ApiUrlDesenvolvimento; url = UrlApiConst.ApiUrlDesenvolvimento;
}else if(list[3]=='online'){ }else if(list[3]=='online'){
@@ -63,7 +74,6 @@ class _SplashScreenState extends State<SplashScreen> {
MaterialPageRoute(builder: (context) => SyncLoginScreen(args: args)), MaterialPageRoute(builder: (context) => SyncLoginScreen(args: args)),
); );
} }
});
} }
}else{ }else{
Navigator.pushReplacementNamed(context, '/login_load'); Navigator.pushReplacementNamed(context, '/login_load');

View File

@@ -122,7 +122,9 @@ class _SyncInitScreenState extends State<SyncInitScreen> {
setState(()=> messageSteps = "Etapa 10 de 10 - Gravando os Cadastros Individuais no Aplicativo"); setState(()=> messageSteps = "Etapa 10 de 10 - Gravando os Cadastros Individuais no Aplicativo");
} }
await DbSqliteSync().insertCadastrosIndividuais(value).then((value)async{ await DbSqliteSync().insertCadastrosIndividuais(value).then((value)async{
//agora salvar controle interno await DbSqliteSync().saveSync(widget.args,idUnidade,area,microarea).then((value)async{
Navigator.pushNamed(context, '/home');
});
}); });
}); });
}); });

View File

@@ -235,7 +235,7 @@ class DbSqliteLoad{
int id = await db.insert('CIAPS', row); int id = await db.insert('CIAPS', row);
// print('id increment $id CIAPS'); // print('id increment $id CIAPS');
} }
print(await db.query('CIAPS')); // print(await db.query('CIAPS'));
return db; return db;
} }
Future saveCity(var value)async{ Future saveCity(var value)async{
@@ -253,7 +253,7 @@ class DbSqliteLoad{
int id = await db.insert('MUNICIPIOS', row); int id = await db.insert('MUNICIPIOS', row);
// print('id increment $id PROCEDIMENTOS_SIGTAP_REGISTRO'); // print('id increment $id PROCEDIMENTOS_SIGTAP_REGISTRO');
} }
print(await db.query('MUNICIPIOS')); // print(await db.query('MUNICIPIOS'));
return db; return db;
} }
Future saveTeam(var value)async{ Future saveTeam(var value)async{
@@ -273,7 +273,7 @@ class DbSqliteLoad{
int id = await db.insert('EQUIPES', row); int id = await db.insert('EQUIPES', row);
// print('id increment $id EQUIPES'); // print('id increment $id EQUIPES');
} }
print(await db.query('EQUIPES')); // print(await db.query('EQUIPES'));
return db; return db;
} }
Future saveTeamComponents(var value)async{ Future saveTeamComponents(var value)async{
@@ -292,25 +292,4 @@ class DbSqliteLoad{
print(await db.query('PROFISSIONAIS_EQUIPE')); print(await db.query('PROFISSIONAIS_EQUIPE'));
return db; return db;
} }
Future saveCityInit(ArgsLoadInitModel args)async{
Database db = await intialDB();
//refatorar cidade_load e nome_cidade
'parameters = [{"carga_inicial": 1, "cidade_load": cidade, "nome_cidade": vm.nomeCidade[cidade], "cidade_id": cidadeID, "estado": estado, "ibge": ibge, "ambiente": ambiente, "competencia": competencia.replace(/\D/g, '')}]';
"INSERT OR REPLACE INTO CONTROLE_INTERNO (rowid, CARGA_INICIAL, CIDADE_LOAD, NOME_CIDADE, ID_MUNICIPIO, UF_ESTADO, CODIGO_IBGE, AMBIENTE, COMPETENCIA) VALUES (1,?,?,?,?,?,?,?,?)";
Map<String, dynamic> row = {
'CARGA_INICIAL' : 1,
'CIDADE_LOAD' : args.model.nameCityApi,
'NOME_CIDADE' : args.model.nameCityFront,
'ID_MUNICIPIO' : args.model.codCity,
'UF_ESTADO' : args.model.codState,
'CODIGO_IBGE' : args.model.codCityIbge,
'AMBIENTE' : args.mode,
'ULTIMA_SINCRONIZACAO' : DateTime.now().toString(),
'COMPETENCIA' : '${DateTime.now().year}${DateTime.now().month<10?'0':''}${DateTime.now().month-1}',
};
int id = await db.insert('CONTROLE_INTERNO', row);
print(await db.query('CONTROLE_INTERNO'));
return db;
}
} }

View File

@@ -1,6 +1,8 @@
import 'package:rkm/service/db/db_sqlite_load.dart'; import 'package:rkm/service/db/db_sqlite_load.dart';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
import '../../models/args_load_init_model.dart';
class DbSqliteSync{ class DbSqliteSync{
Future deleteSync()async{ Future deleteSync()async{
@@ -408,8 +410,33 @@ class DbSqliteSync{
}; };
int id = await db.insert('CADASTROS_INDIVIDUAIS', row); int id = await db.insert('CADASTROS_INDIVIDUAIS', row);
// print('id increment $id PROCEDIMENTOS_SIGTAP_REGISTRO'); // print('id increment $id PROCEDIMENTOS_SIGTAP_REGISTRO');
print(await db.query('CADASTROS_INDIVIDUAIS')); // print(await db.query('CADASTROS_INDIVIDUAIS'));
} }
return db; return db;
} }
Future saveSync(ArgsLoadInitModel args,idUnidade,area,microarea)async{
Database db = await DbSqliteLoad().intialDB();
//refatorar cidade_load e nome_cidade
'parameters = [{"carga_inicial": 1, "cidade_load": cidade, "nome_cidade": vm.nomeCidade[cidade], "cidade_id": cidadeID, "estado": estado, "ibge": ibge, "ambiente": ambiente, "competencia": competencia.replace(/\D/g, '')}]';
"INSERT OR REPLACE INTO CONTROLE_INTERNO (rowid, CARGA_INICIAL, CIDADE_LOAD, NOME_CIDADE, ID_MUNICIPIO, UF_ESTADO, CODIGO_IBGE, AMBIENTE, COMPETENCIA) VALUES (1,?,?,?,?,?,?,?,?)";
Map<String, dynamic> row = {
'CARGA_INICIAL' : 1,
'CIDADE_LOAD' : args.model.nameCityApi,
'NOME_CIDADE' : args.model.nameCityFront,
'ID_MUNICIPIO' : args.model.codCity,
'UF_ESTADO' : args.model.codState,
'CODIGO_IBGE' : args.model.codCityIbge,
'AMBIENTE' : args.mode,
'SYNC_UNIDADE' : idUnidade,
'NOME_UNIDADE' : args.model.nameCityFront,
'AREA' : area,
'MICROAREA' : microarea,
'ULTIMA_SINCRONIZACAO' : DateTime.now().toString(),
'COMPETENCIA' : '${DateTime.now().year}${DateTime.now().month<10?'0':''}${DateTime.now().month-1}',
};
int id = await db.insert('CONTROLE_INTERNO', row);
print(await db.query('CONTROLE_INTERNO'));
return db;
}
} }

View File

@@ -1,12 +1,14 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:rkm/models/args_load_init_model.dart';
import 'package:rkm/widgets/alert_dialog_settings.dart'; import 'package:rkm/widgets/alert_dialog_settings.dart';
import '../screens/login/sync_login_screen.dart';
import '../utils/color_palette.dart'; import '../utils/color_palette.dart';
import 'icon_button_default.dart'; import 'icon_button_default.dart';
class AppBarDefault{ class AppBarDefault{
@override @override
PreferredSize appbar(BuildContext context,String title) { PreferredSize appbar(BuildContext context,String title,{ArgsLoadInitModel? args}) {
return PreferredSize( return PreferredSize(
preferredSize: Size.fromHeight(50), preferredSize: Size.fromHeight(50),
child: AppBar( child: AppBar(
@@ -21,7 +23,12 @@ class AppBarDefault{
IconButtonDefault( IconButtonDefault(
icon: Icons.logout, icon: Icons.logout,
color: ColorPalette.white, color: ColorPalette.white,
onPressed: ()=>Navigator.pushNamedAndRemoveUntil(context, '/login',(Route<dynamic> route) => false)), onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SyncLoginScreen(args: args!)),
);
}),
], ],
), ),
); );

View File

@@ -16,7 +16,7 @@ class InputSearchText extends StatelessWidget {
this.fontSize = 15.0, this.fontSize = 15.0,
this.hint = '', this.hint = '',
this.color = ColorPalette.white, this.color = ColorPalette.white,
this.border = true this.border = true,
}); });
@override @override

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:line_icons/line_icons.dart';
import 'package:rkm/utils/color_palette.dart'; import 'package:rkm/utils/color_palette.dart';
import 'package:rkm/utils/const_variable.dart'; import 'package:rkm/utils/const_variable.dart';
import 'package:rkm/widgets/alert_dialog_default.dart'; import 'package:rkm/widgets/alert_dialog_default.dart';
@@ -30,10 +31,10 @@ class ItemCitizen extends StatelessWidget {
margin: ConstVariable().marginHightInput, margin: ConstVariable().marginHightInput,
color: ColorPalette.white, color: ColorPalette.white,
child: ListTile( child: ListTile(
title: TextDefault(text: name,fontWeigth: FontWeight.bold), title: TextDefault(text: name,fontWeigth: FontWeight.bold,color: Colors.black54,fontSize: 18,),
subtitle: TextDefault(text: '$numberCNS - $numberMedicalRecord - $date - $mother',fontSize: 16), subtitle: TextDefault(text: '$numberCNS - $numberMedicalRecord - $date - $mother',fontSize: 13,color: Colors.black54),
trailing: IconButton( trailing: IconButton(
icon: Icon(Icons.assignment_rounded,size: 35,), icon: Icon(LineIcons.clipboard,size: 35,),
onPressed: ()=>AlertDialogDefault().alertSelect(context), onPressed: ()=>AlertDialogDefault().alertSelect(context),
), ),
onTap: onTap, onTap: onTap,