我有这个小部件:
class DeviceNotRecognizedDialog extends StatelessWidget {
Widget build(BuildContext context) {
return AlertDialog(
backgroundColor: Colors.redAccent,
title: Text('Dispositivo No Reconocido'),
content: Text(
'El dispositivo seleccionado no cumple con las normas de comunicacion establecidas para esta aplicación'
),
actions: [
TextButton(
child: Text('OK'),
onPressed: () => Navigator.pop(context),
)
],
);
}
}
嵌套在蓝牙应用程序的这部分代码中:
StreamBuilder<List<ScanResult>>(
stream: FlutterBlue.instance.scanResults,
initialData: [],
builder: (c, snapshot) => Column( //Filter bl device nam
children: snapshot.data!
.where((r) => DeepCollectionEquality().equals(r.advertisementData.manufacturerData, oakTecManufacturer)).toList().map(
(r) => ScanResultTile(
result: r,
onTap: () => Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
if(r.advertisementData.serviceData.length == 1){
r.device.connect();
return DeviceScreen(device: r.device,program: PROGRAM_SELECTED); //conecta con el dispositivo y habre device screen
}
else {
return DeviceNotRecognizedDialog();
}
})),
),
)
.toList(),
),
)
无需按下按钮,应用程序看起来像这样:
当我按下按钮时,它看起来像这样:
我希望它看起来像这样:
我希望some1能帮我解决这个问题。
问题是你实际上并没有创建一个对话框,你正在将小部件
DeviceScreen
或DeviceNotRecognizedDialog
推入导航堆栈,具体取决于你的数据,你需要做的是首先执行你的逻辑,然后决定是否你需要推送或打开对话框:
onTap: () async {
if(r.advertisementData.serviceData.length == 1) {
r.device.connect();
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => return DeviceScreen(device: r.device,program: PROGRAM_SELECTED),
); //conecta con el dispositivo y habre device screen
} else {
showDialog(
context: context,
barrierDismissible: true,
barrierColor: Colors.transparent, /// Aqui es donde escoges el color de fondo detras del dialogo
builder: (_) => DeviceNotRecognizedDialog()
);
}
}