代码之家  ›  专栏  ›  技术社区  ›  Tindona

按下按钮后进行循环,直到完成对API的请求

  •  0
  • Tindona  · 技术社区  · 2 年前

    这是我的密码:

    onPressed: () async {
                      Map data = {
                                //some data
                              };
                      var body = json.encode(data);
                      var response = await http.post(
                          Uri.parse("***MY API URL ***"),
                          headers: {
                            "Content-Type": "application/json",
                            "Accept": "application/json"
                          },
                          body: body);
                          // print(response.body);
                          // print(response.statusCode);
                          if (response.statusCode == 201 || response.statusCode == 200) {
                            print('success');
                            Toast.show("Success", context);
                            
                            Navigator.pushAndRemoveUntil(
                    context,
                    MaterialPageRoute(
                      builder: (BuildContext context) => const HomePage(),
                    ),
                    (route) => false,
                  );
                          } else {
                            Toast.show("ERROR! Please try again.", context);
    
                          }
                      }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Hamid Musayev    2 年前

    就像这样使用。

    如果你想要更多 CircularProgressIndicator https://api.flutter.dev/flutter/material/CircularProgressIndicator-class.html

    还有 LinearProgressIndicator https://api.flutter.dev/flutter/material/LinearProgressIndicator-class.html

    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(home: const MyHomePage());
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({Key? key}) : super(key: key);
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      bool isLoading = false;
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: isLoading
              ? Center(child: CircularProgressIndicator())
              : TextButton(
                  child: Text('Tap me'),
                  onPressed: () async {
                    //progress indicator start show
                    setState(() => isLoading = true);
    
                    //YOU API CALL HERE
                    //await Future.delayed(Duration(seconds: 2), () => () {});
    
                    //progress indicator show
                    var response = await authHandler.sendPasswordResetEmail();
    
    
                    //progress indicator stopped show
                    setState(() => isLoading = false);
                  },
                ),
        );
      }
    }