fluuter AlertDialog 将应用程序背景更改为黑色,想要保持最后的背景

问题描述 投票:0回答:1

我有这个小部件:

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(),
                ),
              )

无需按下按钮,应用程序看起来像这样:

1

当我按下按钮时,它看起来像这样:

2

我希望它看起来像这样:

3

我希望some1能帮我解决这个问题。

flutter bluetooth-lowenergy
1个回答
0
投票

问题是你实际上并没有创建一个对话框,你正在将小部件

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()
    );        
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.