source

FlatButton 클릭 시 AlertDialog를 해제하는 방법은 무엇입니까?

manysource 2023. 7. 19. 21:27

FlatButton 클릭 시 AlertDialog를 해제하는 방법은 무엇입니까?

나는 다음을 가지고 있습니다.AlertDialog.

showDialog(
            context: context,
            child: new AlertDialog(
              title: const Text("Location disabled"),
              content: const Text(
                  """
Location is disabled on this device. Please enable it and try again.
                  """),
              actions: [
                new FlatButton(
                  child: const Text("Ok"),
                  onPressed: _dismissDialog,
                ),
              ],
            ),
        );

어떻게 만드나요?_dismissDialog()기각합니다.AlertDialog?

Navigator.pop() 그 묘기를 부려야 합니다.이를 사용하여 대화 상자의 결과를 반환할 수도 있습니다(사용자에게 선택사항이 표시된 경우).

Navigator.of(context, rootNavigator: true).pop('dialog')

저와 함께 일했습니다.

Navigator.pop(_)

Floating Team의 갤러리에는 다음을 사용하는 예제가 포함되어 있습니다.

Navigator.of(context, rootNavigator: true).pop()

그것도 효과가 있고, 저는 그들의 선례를 따르고 싶습니다.

결과를 반환하지 않으려면 다음 중 하나를 사용합니다.

Navigator.of(context).pop();
Navigator.pop(context);

그러나 결과를 반환하려면 이 항목을 참조하십시오.

예:

showDialog(
    context: context,
    builder: (_) {
      return AlertDialog(
        title: Text('Wanna Exit?'),
        actions: [
          FlatButton(
            onPressed: () => Navigator.pop(context, false), // passing false
            child: Text('No'),
          ),
          FlatButton(
            onPressed: () => Navigator.pop(context, true), // passing true
            child: Text('Yes'),
          ),
        ],
      );
    }).then((exit) {
  if (exit == null) return;

  if (exit) {
    // user pressed Yes button
  } else {
    // user pressed No button
  }
});

일반적으로.Navigator.pop(context);작동하다.

그러나 응용프로그램에 여러 Navigator 개체가 있는 경우dialogBox닫히지 않습니다, 그럼 이것을 시도해 보세요.

Navigator.of(context, rootNavigator: true).pop();

결과 호출을 통과하려면 시도하십시오.

Navigator.pop(context,result);

OR

Navigator.of(context, rootNavigator: true).pop(result);

Navigator.of(dialogContext).pop()그렇지 않으면 마스터에서 세부 페이지로 이동한 경우 페이지를 닫을 수 있습니다.

                showDialog(
                  context: context,
                  builder: (dialogContext) {
                    return Dialog(
                      child: Column(
                        children: [
                          Text("Content"),
                          RaisedButton(
                            onPressed: () => Navigator.of(dialogContext).pop(),
                            child: Text("Close"),
                          )
                        ],
                      ),
                    );
                  },
                );

플랫 버튼 클릭 시 경고 대화 상자 해제 예제

RaisedButton(
        onPressed: () {
          showDialog(
              context: context,
              builder: (context) => AlertDialog(
                    title: Text('Are you sure?'),
                    content: Text('Do you want to remove item?'),
                    actions: <Widget>[
                      FlatButton(
                          onPressed: () => Navigator.of(context).pop(false),//  We can return any object from here
                           child: Text('NO')),
                      FlatButton(
                          onPressed: () => Navigator.of(context).pop(true), //  We can return any object from here
                          child: Text('YES'))
                    ],
                  )).then((value) =>
              print('Selected Alert Option: ' + value.toString()));
        },
        child: Text('Show Alert Dialog'),
      ),

위 코드에는 대화 상자의 콜백 결과를 제공하는 데 사용되는 두 가지 고유한 것이 있습니다.

네비게이터.of(컨텍스트).pop(false) - Navigator.of(context)를 누를 때 잘못된 값을 반환합니다.pop(true) - YES를 눌렀을 때 true 값을 반환합니다.

이러한 반환 값을 기반으로 외부에서 일부 작업을 수행하거나 대화 상자 상태 값을 유지할 수 있습니다.

현재 작동합니다.

      RaisedButton(
                child: Text(
                  "Cancel",
                  style: TextStyle(color: Colors.white),
                ),
                color: Colors.blue,
                onPressed: () => Navigator.pop(context),
              ),

효과가 있었습니다.for me Navigator.of(context, rootNavigator: true).pop('dialog').

Navigator.pop()현재 페이지/화면을 닫습니다.

알림 대화 상자에 대한 별도의 컨텍스트를 만드는 것이 도움이 됩니다.

showDialog(
  context: context,
  builder: (alertContext) => AlertDialog(
    title: const Text("Location disabled"),
    content: const Text(
        """Location is disabled on this device. Please enable it and try again."""),
    actions: [
      new FlatButton(
        child: const Text("Ok"),
        onPressed: () => Navigator.pop(alertContext),
      ),
    ],
  ),
);

대화 상자를 닫는 코드에 대해 다음을 사용하십시오.

RaisedButton(
     onPressed: () { Navigator.of(context).pop();},
     child: Text("Close",style: TextStyle(color: Colors.white), ),
                color: Colors.black,
           )

사용하다Navigator.pop(context);

showDialog(
            context: context,
            child: new AlertDialog(
              title: const Text("Location disabled"),
              content: const Text(
                  """
Location is disabled on this device. Please enable it and try again.
                  """),
              actions: [
                new FlatButton(
                  child: const Text("Ok"),
                  onPressed: () {
                      Navigator.pop(context);
                    },
                ),
              ],
            ),
        );

이 대답은 대화 상자를 열고 다른 보기로 이동하려는 경우에 사용할 수 있습니다.이 부분'current_user_location라우터가 탐색할 뷰를 알아야 하는 문자열입니다.

FlatButton(
           child: Text('NO'),
           onPressed: () {
             Navigator.popAndPushNamed(context, 'current_user_location');
              },
           ),

이 정도면 대화 상자를 해제할 수 있습니다. 내부에 추가합니다. 다음과 같은 콜백.
급지, 급지, 급지, 급지, 급지, 급지.

Navigator.of(context).pop();

    AlertDialog(
          title: Center(child: Text("$title")),
          insetPadding: EdgeInsets.zero,
          titlePadding: EdgeInsets.only(top: 14.0, bottom: 4),
          content: Container(
            height: 50,
            child: TextFormField(
              controller: find_controller,
              decoration: InputDecoration(
                suffixIcon: context.watch<MediaProvider>().isChangeDialog
                    ? IconButton(
                        onPressed: () {
                          clearController(find_controller);
                        },
                        icon: Icon(Icons.clear))
                    : null,
                border: OutlineInputBorder(
                    borderSide: BorderSide(color: Colors.deepPurpleAccent)),
                hintText: 'Id',
              ),
              onChanged: (val) {
                if (val.isNotEmpty)
                  context.read<MediaProvider>().isChangeDialog = true;
                else
                  context.read<MediaProvider>().isChangeDialog = false;
              },
            ),
          ),
          actions: [
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: OutlinedButton(
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Align(
                            child: Padding(
                              padding: const EdgeInsets.symmetric(horizontal: 12.0),
                              child: Icon(Icons.clear),
                            ),
                          ),
                          Text("Cancel")
                        ],
                      ),
                      onPressed: () {
                        context.read<MediaProvider>().isChangeDialog = false;
//========================this enough to dismisss dialog
                        Navigator.of(context).pop();
                      }),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: ElevatedButton(
                      onPressed: context.watch<MediaProvider>().isChangeDialog
                          ? () {
                              context.read<MediaProvider>().isChangeDialog = false;
                              okCallback;
                            }
                          : null,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Align(
                            child: Padding(
                              padding: const EdgeInsets.symmetric(horizontal: 12.0),
                              child: Icon(Icons.check),
                            ),
                          ),
                          Text("OK")
                        ],
                      )),
                )
              ],
            ),
          ],
        );

enter image description here

닫기 대화 상자용

void cancelClick() {
    Navigator.pop(context);
  }

showDialog에 전달barrierDismissible : true

get package를 사용합니다.그런 다음 Get.back()을 클릭하여 Modal을 닫습니다.

허용된 답변에는 네비게이터 클래스를 사용하여 대화상자를 해제하는 방법이 나와 있습니다.Navigator를 사용하지 않고 대화상자를 닫으려면 버튼의 onPressed 이벤트를 다음과 같이 설정할 수 있습니다.

setState((){
  thisAlertDialog = null; 
});

위의 코드가 설명할 수 없는 경우 기본적으로 FlatButton의 Parent AlertDialog를 null로 설정하여 해제합니다.

언급URL : https://stackoverflow.com/questions/44159819/how-to-dismiss-an-alertdialog-on-a-flatbutton-click