Флаттер showDialog с загрузкой счетчика и подтверждением - PullRequest
0 голосов
/ 27 февраля 2020

В трепетании у меня есть showDialog () с кнопкой отмены и подтверждения. Кнопка подтверждения вызовет вызов API. Что мне нужно, это показать «загрузка ...» в окне showDialog после щелчка и после завершения вызова API, чтобы показать успех или неудачу. Как я могу справиться с этим? Или я должен закрыть окно в ожидании ответа и открыть новое диалоговое окно с успехом или ложью? Спасибо за любую помощь или лучшее предложение. Вот что у меня так далеко:

void _showAlert(String textLabel, String action, String linkId) {
  showDialog(
    context: context,
    //barrierDismissible: false, // on external click
    builder: (_) => new AlertDialog(
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
      title: new Text(
        'Please confirm:',
        style: TextStyle(color: Colors.deepOrange, fontWeight: FontWeight.bold),
        textAlign: TextAlign.center,
      ),
      content: new Text(
        textLabel,
        style: new TextStyle(fontSize: 20.0),
      ),
      actions: <Widget>[
        new FlatButton(
            onPressed: () {
              Navigator.pop(context);
            },
            child: new Text('CANCEL')),
        new FlatButton(
            onPressed: () {
              _postAction(action, linkId).then((_) => setState(() {}));
              Navigator.pop(context);
            },
            child: new Text('I CONFIRM')),
      ],
    ));
}

1 Ответ

0 голосов
/ 27 февраля 2020

Вы можете попробовать это, это просто идея ..

class _SampleState extends State<Sample> {

  bool isSuccessFromApi = false;
  bool isLoading = false;

  Widget popup() {
    showDialog(context: context, builder: (builder) {
      return AlertDialog(
        content: !isSuccessFromApi ? Container(
          child: Text('Are you Sure???'),
        ) : Container( child: isLoading ? CircularProgressIndicator() : Text('Success'),),
        actions: <Widget>[
          Text('Cancel'),
          InkWell(child: Text('OK'), onTap: apiCall,)
        ],
      );
    });
  }

  void apiCall(){
    setState(() {
      isLoading = true;
    });
    //call the api
    //after success or failure
    setState(() {
      isLoading = false;
      isSuccessFromApi = true;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: popup(),
    );
  }
}
...