如何使用 Dio 包将数据发送到后端(heroku)以获取多页注册页面?

How to send data to backend (heroku) for a multi-page signup page using Dio package?

我正在尝试使用 Flutter 的 Dio 包编写一个注册页面。它是多页的,包括:选择您的电子邮件、学校、兴趣类别和出生日期。用户将在完成上一页后进入下一页。一旦用户完成最后一页,即 dob 页面,我希望将所有数据发布到用户 API 的 /user/register API。我应该如何实现这样的注册页面?有没有例子?我需要你的帮助。谢谢。

如果您可以分享更多关于您想要的内容的详细信息或屏幕截图,您可以获得更健康、更准确的答案。我仍然会尽力提供帮助。

点击注册页面的'Save'按钮即可触发以下代码

  Future<bool> userSave(String email, String school, String interestCategories,
  DateTime dateOfBirth) async {
try {
  const String apiUrl = "your-api-url";
  var params = {
    "email": email,
    "school": school,
    "interestCategories": interestCategories,
    "dateOfBirth": dateOfBirth
  };
  Response response = await Dio().post(
    apiUrl,
    options: Options(headers: {
      HttpHeaders.contentTypeHeader: "application/json",
    }),
    data: jsonEncode(params),
  );
  if (response.statusCode == 200) {
    return true;
  } else {
    return false;
  }
} catch (e) {
  return false;
}
}

我准备了一个兼容你的屏幕的例子,你可以从这里得到你需要的地方

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController interestCategoriesController = TextEditingController();
  TextEditingController emailController = TextEditingController();
  TextEditingController schoolController = TextEditingController();
  DateTime dateOfBirth = DateTime.now();
  bool apiResponse = false;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: mainArea(),
    );
  }

  Widget mainArea() {
    return Center(
      child: ElevatedButton(
        child: const Text("Save"),
        onPressed: () async {
          apiResponse = await userSave(
              emailController.text,
              schoolController.text,
              interestCategoriesController.text,
              dateOfBirth);
          if (apiResponse == true) {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => const SecondPage()),
            );
          } else {
            //You can show alerDialog for response is false
          }
        },
      ),
    );
  }

  Future<bool> userSave(String email, String school, String interestCategories,
      DateTime dateOfBirth) async {
    try {
      const String apiUrl = "your-api-url";
      var params = {
        "email": email,
        "school": school,
        "interestCategories": interestCategories,
        "dateOfBirth": dateOfBirth
      };
      Response response = await Dio().post(
        apiUrl,
        options: Options(headers: {
          HttpHeaders.contentTypeHeader: "application/json",
        }),
        data: jsonEncode(params),
      );
      if (response.statusCode == 200) {
        return true;
      } else {
        return false;
      }
    } catch (e) {
      return false;
    }
  }
}