Android 颤振-无法发出POST请求

Android 颤振-无法发出POST请求,android,ios,json,dart,flutter,Android,Ios,Json,Dart,Flutter,我正在使用flatter开发一个移动应用程序。现在我正在尝试创建一个新用户。为此,我需要将插入寄存器页面的数据放入restapi,并向restapi发出POST请求 这是我的注册页面-注册页面。dart import 'package:flutter/material.dart'; import '../models/user.dart'; import '../models/user_language.dart'; import '../models/user_right.dart'; im

我正在使用
flatter
开发一个移动应用程序。现在我正在尝试创建一个新用户。为此,我需要将插入寄存器页面的数据放入restapi,并向restapi发出
POST
请求

这是我的注册页面-注册页面。dart

import 'package:flutter/material.dart';

import '../models/user.dart';
import '../models/user_language.dart';
import '../models/user_right.dart';
import '../custom_functions/data_fetch.dart';
import '../common_functions/app_navigation.dart';

class RegisterPage extends StatelessWidget {


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Register"),
      ),

      body: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage("assets/images/background_login_5.jpg"),
            fit: BoxFit.cover,
          ),
        ),
        child: RegisterForm(),
      ),
    );
  }


}


class RegisterForm extends StatefulWidget
{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return RegisterFormState();
  }

}

class RegisterFormState extends State<RegisterForm>
{
  final borderColorGreen = const Color(0xff339966);

  bool passwordVisible, confirmPasswordVisible;

  TextEditingController nameTxtController =TextEditingController();
  TextEditingController emailTxtController =TextEditingController();
  TextEditingController mobileTxtController =TextEditingController();
  TextEditingController passwordTxtController =TextEditingController();
  TextEditingController confirmPasswordTxtController =TextEditingController();

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    passwordVisible=false;
    confirmPasswordVisible=false;

    return ListView(
          children: <Widget>[
            _buildTitleSection(),
            _buildInputFields("Name",nameTxtController, TextInputType.text, Icons.border_color, Colors.white),
            _buildInputFields("Email",emailTxtController,TextInputType.emailAddress, Icons.email, Colors.white),
            _buildInputFields("Mobile",mobileTxtController, TextInputType.phone, Icons.phone, Colors.white),
            _buildPasswordFields("Password",passwordTxtController,TextInputType.text),
            _buildPasswordFields("Confirm Password",confirmPasswordTxtController, TextInputType.text),
            _buildRegisterButton(),
          ],
        );
  }

  Widget _buildTitleSection() {
    return Container(
        margin: EdgeInsets.only(top: 20),
        padding: EdgeInsets.all(32),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "manningmarket.lk",
              style: TextStyle(
                color: borderColorGreen,
                fontWeight: FontWeight.w900,
                fontSize: 25,
              ),
            ),
          ],
        ));
  }

  Widget _buildInputFields(String label, TextEditingController textController, TextInputType textInputType, IconData icon, Color iconColor) {
    return Container(
        margin: EdgeInsets.only(left: 20, bottom: 20),
        child: Column(
          children: <Widget>[

            Container(
              padding: EdgeInsets.only(right: 20),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextFormField(
                      controller: textController,
                      style: new TextStyle(color: Colors.white),
                      keyboardType: textInputType,
                      decoration: InputDecoration(
                        labelText: label,
                        fillColor: Colors.white,
                        labelStyle: TextStyle(
                            color: Colors.white, fontWeight: FontWeight.w600),
                        enabledBorder: OutlineInputBorder(
                          borderSide: const BorderSide(
                              color: Colors.white30, width: 2.0),
                          borderRadius: BorderRadius.circular(25.0),
                        ),
                        suffixIcon: IconButton(
                        icon: Icon(
                          icon,
                          color: iconColor
                        ),
                        onPressed: (){},
                      )
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ));
  }

    Widget _buildPasswordFields(String label, TextEditingController textController, TextInputType textInputType) {
    return Container(
        margin: EdgeInsets.only(left: 20, bottom: 20),
        child: Column(
          children: <Widget>[

            Container(
              padding: EdgeInsets.only(right: 20),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextFormField(
                      controller: textController,
                      style: new TextStyle(color: Colors.white),
                      keyboardType: textInputType,
                      decoration: InputDecoration(
                        labelText: label,
                        fillColor: Colors.white,
                        labelStyle: TextStyle(
                            color: Colors.white, fontWeight: FontWeight.w600),
                        enabledBorder: OutlineInputBorder(
                          borderSide: const BorderSide(
                              color: Colors.white30, width: 2.0),
                          borderRadius: BorderRadius.circular(25.0),
                        ),
                        suffixIcon: IconButton(
                        icon: Icon(
                          // Based on passwordVisible state choose the icon
                          passwordVisible
                              ? Icons.visibility
                              : Icons.visibility_off,
                          color: Theme.of(context).primaryColorDark,
                        ),
                        onPressed: () {
                          // Update the state i.e. toogle the state of passwordVisible variable
                          setState(() {
                            passwordVisible
                                ? passwordVisible = false
                                : passwordVisible = true;
                          });
                        },
                      )
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ));
  }

  Widget _buildRegisterButton() {
    return Container(
      margin: EdgeInsets.only(top: 10, right: 20, left: 20),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Flexible(
              child: SizedBox(
                  width: double.infinity, // match_parent
                  child: RaisedButton(
                    child: Text(
                      "Create Account",
                      style: TextStyle(
                          color: Colors.white,
                          fontSize: 18,
                          fontWeight: FontWeight.normal),
                    ),
                    shape: RoundedRectangleBorder(
                        borderRadius: new BorderRadius.circular(30.0)),
                    color: borderColorGreen,
                    onPressed: () {
                      setState(() {
                        _createUser();
                      });

                    },
                  )))
        ],
      ),
    );
  }

  void _createUser()
  {

    UserRight userRight = UserRight(
      iduserRight: 2
    );

    UserLanguage userLanguage = UserLanguage(
      iduserLanguage: 1
    );

    User user = User(
      name: nameTxtController.text,
      email: emailTxtController.text,
      phone: mobileTxtController.text,
      userLanguage: userLanguage,
      userRights: userRight

    );

    DataFetch().createUser(AppNavigation.getAPIUrl() +
          "user/saveUser", user).then((String result){
            print("RESULT IS: "+result);
          });
  }

}
import 'package:json_annotation/json_annotation.dart';

import './user_language.dart';
import './user_right.dart';


part 'user.g.dart';


@JsonSerializable()

class User {
  int iduser;
  UserLanguage userLanguage;
  UserRight userRights;
  String name;
  String address;
  String phone;
  String email;
  int dob;
  int deleteTimestamp;
  int dateCreated;
  int lastUpdated;

  User(
      {this.iduser,
      this.userLanguage,
      this.userRights,
      this.name,
      this.address,
      this.phone,
      this.email,
      this.dob,
      this.deleteTimestamp,
      this.dateCreated,
      this.lastUpdated});


  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) {
  return User(
      iduser: json['iduser'] as int,
      userLanguage: json['userLanguage'] == null
          ? null
          : UserLanguage.fromJson(json['userLanguage'] as Map<String, dynamic>),
      userRights: json['userRights'] == null
          ? null
          : UserRight.fromJson(json['userRights'] as Map<String, dynamic>),
      name: json['name'] as String,
      address: json['address'] as String,
      phone: json['phone'] as String,
      email: json['email'] as String,
      dob: json['dob'] as int,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'iduser': instance.iduser,
      'userLanguage': instance.userLanguage,
      'userRights': instance.userRights,
      'name': instance.name,
      'address': instance.address,
      'phone': instance.phone,
      'email': instance.email,
      'dob': instance.dob,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
import 'package:json_annotation/json_annotation.dart';

part 'user_right.g.dart';

@JsonSerializable()

class UserRight
{
   int iduserRight;
   String userRight;
   int deleteTimestamp;
   int dateCreated;
   int lastUpdated;

   UserRight({this.iduserRight, this.userRight, this.deleteTimestamp, this.dateCreated, this.lastUpdated});

  factory UserRight.fromJson(Map<String, dynamic> json) =>
      _$UserRightFromJson(json);

  Map<String, dynamic> toJson() => _$UserRightToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user_right.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

UserRight _$UserRightFromJson(Map<String, dynamic> json) {
  return UserRight(
      iduserRight: json['iduserRight'] as int,
      userRight: json['userRight'] as String,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserRightToJson(UserRight instance) => <String, dynamic>{
      'iduserRight': instance.iduserRight,
      'userRight': instance.userRight,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
import 'package:json_annotation/json_annotation.dart';

part 'user_language.g.dart';

@JsonSerializable()

class UserLanguage {
  int iduserLanguage;
  String language;
  int deleteTimestamp;
  int dateCreated;
  int lastUpdated;

  UserLanguage({this.iduserLanguage, this.language, this.deleteTimestamp,
      this.dateCreated, this.lastUpdated});

  factory UserLanguage.fromJson(Map<String, dynamic> json) =>
      _$UserLanguageFromJson(json);

  Map<String, dynamic> toJson() => _$UserLanguageToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user_language.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

UserLanguage _$UserLanguageFromJson(Map<String, dynamic> json) {
  return UserLanguage(
      iduserLanguage: json['iduserLanguage'] as int,
      language: json['language'] as String,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserLanguageToJson(UserLanguage instance) =>
    <String, dynamic>{
      'iduserLanguage': instance.iduserLanguage,
      'language': instance.language,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) {
  return User(
      iduser: json['iduser'] as int,
      userLanguage: json['userLanguage'] == null
          ? null
          : UserLanguage.fromJson(json['userLanguage'] as Map<String, dynamic>),
      userRights: json['userRights'] == null
          ? null
          : UserRight.fromJson(json['userRights'] as Map<String, dynamic>),
      name: json['name'] as String,
      address: json['address'] as String,
      phone: json['phone'] as String,
      email: json['email'] as String,
      dob: json['dob'] as int,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'iduser': instance.iduser,
      'userLanguage': instance.userLanguage,
      'userRights': instance.userRights,
      'name': instance.name,
      'address': instance.address,
      'phone': instance.phone,
      'email': instance.email,
      'dob': instance.dob,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
最后是模型。首先让我们看看
用户
模型

User.dart

import 'package:flutter/material.dart';

import '../models/user.dart';
import '../models/user_language.dart';
import '../models/user_right.dart';
import '../custom_functions/data_fetch.dart';
import '../common_functions/app_navigation.dart';

class RegisterPage extends StatelessWidget {


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Register"),
      ),

      body: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage("assets/images/background_login_5.jpg"),
            fit: BoxFit.cover,
          ),
        ),
        child: RegisterForm(),
      ),
    );
  }


}


class RegisterForm extends StatefulWidget
{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return RegisterFormState();
  }

}

class RegisterFormState extends State<RegisterForm>
{
  final borderColorGreen = const Color(0xff339966);

  bool passwordVisible, confirmPasswordVisible;

  TextEditingController nameTxtController =TextEditingController();
  TextEditingController emailTxtController =TextEditingController();
  TextEditingController mobileTxtController =TextEditingController();
  TextEditingController passwordTxtController =TextEditingController();
  TextEditingController confirmPasswordTxtController =TextEditingController();

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    passwordVisible=false;
    confirmPasswordVisible=false;

    return ListView(
          children: <Widget>[
            _buildTitleSection(),
            _buildInputFields("Name",nameTxtController, TextInputType.text, Icons.border_color, Colors.white),
            _buildInputFields("Email",emailTxtController,TextInputType.emailAddress, Icons.email, Colors.white),
            _buildInputFields("Mobile",mobileTxtController, TextInputType.phone, Icons.phone, Colors.white),
            _buildPasswordFields("Password",passwordTxtController,TextInputType.text),
            _buildPasswordFields("Confirm Password",confirmPasswordTxtController, TextInputType.text),
            _buildRegisterButton(),
          ],
        );
  }

  Widget _buildTitleSection() {
    return Container(
        margin: EdgeInsets.only(top: 20),
        padding: EdgeInsets.all(32),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "manningmarket.lk",
              style: TextStyle(
                color: borderColorGreen,
                fontWeight: FontWeight.w900,
                fontSize: 25,
              ),
            ),
          ],
        ));
  }

  Widget _buildInputFields(String label, TextEditingController textController, TextInputType textInputType, IconData icon, Color iconColor) {
    return Container(
        margin: EdgeInsets.only(left: 20, bottom: 20),
        child: Column(
          children: <Widget>[

            Container(
              padding: EdgeInsets.only(right: 20),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextFormField(
                      controller: textController,
                      style: new TextStyle(color: Colors.white),
                      keyboardType: textInputType,
                      decoration: InputDecoration(
                        labelText: label,
                        fillColor: Colors.white,
                        labelStyle: TextStyle(
                            color: Colors.white, fontWeight: FontWeight.w600),
                        enabledBorder: OutlineInputBorder(
                          borderSide: const BorderSide(
                              color: Colors.white30, width: 2.0),
                          borderRadius: BorderRadius.circular(25.0),
                        ),
                        suffixIcon: IconButton(
                        icon: Icon(
                          icon,
                          color: iconColor
                        ),
                        onPressed: (){},
                      )
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ));
  }

    Widget _buildPasswordFields(String label, TextEditingController textController, TextInputType textInputType) {
    return Container(
        margin: EdgeInsets.only(left: 20, bottom: 20),
        child: Column(
          children: <Widget>[

            Container(
              padding: EdgeInsets.only(right: 20),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextFormField(
                      controller: textController,
                      style: new TextStyle(color: Colors.white),
                      keyboardType: textInputType,
                      decoration: InputDecoration(
                        labelText: label,
                        fillColor: Colors.white,
                        labelStyle: TextStyle(
                            color: Colors.white, fontWeight: FontWeight.w600),
                        enabledBorder: OutlineInputBorder(
                          borderSide: const BorderSide(
                              color: Colors.white30, width: 2.0),
                          borderRadius: BorderRadius.circular(25.0),
                        ),
                        suffixIcon: IconButton(
                        icon: Icon(
                          // Based on passwordVisible state choose the icon
                          passwordVisible
                              ? Icons.visibility
                              : Icons.visibility_off,
                          color: Theme.of(context).primaryColorDark,
                        ),
                        onPressed: () {
                          // Update the state i.e. toogle the state of passwordVisible variable
                          setState(() {
                            passwordVisible
                                ? passwordVisible = false
                                : passwordVisible = true;
                          });
                        },
                      )
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ));
  }

  Widget _buildRegisterButton() {
    return Container(
      margin: EdgeInsets.only(top: 10, right: 20, left: 20),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Flexible(
              child: SizedBox(
                  width: double.infinity, // match_parent
                  child: RaisedButton(
                    child: Text(
                      "Create Account",
                      style: TextStyle(
                          color: Colors.white,
                          fontSize: 18,
                          fontWeight: FontWeight.normal),
                    ),
                    shape: RoundedRectangleBorder(
                        borderRadius: new BorderRadius.circular(30.0)),
                    color: borderColorGreen,
                    onPressed: () {
                      setState(() {
                        _createUser();
                      });

                    },
                  )))
        ],
      ),
    );
  }

  void _createUser()
  {

    UserRight userRight = UserRight(
      iduserRight: 2
    );

    UserLanguage userLanguage = UserLanguage(
      iduserLanguage: 1
    );

    User user = User(
      name: nameTxtController.text,
      email: emailTxtController.text,
      phone: mobileTxtController.text,
      userLanguage: userLanguage,
      userRights: userRight

    );

    DataFetch().createUser(AppNavigation.getAPIUrl() +
          "user/saveUser", user).then((String result){
            print("RESULT IS: "+result);
          });
  }

}
import 'package:json_annotation/json_annotation.dart';

import './user_language.dart';
import './user_right.dart';


part 'user.g.dart';


@JsonSerializable()

class User {
  int iduser;
  UserLanguage userLanguage;
  UserRight userRights;
  String name;
  String address;
  String phone;
  String email;
  int dob;
  int deleteTimestamp;
  int dateCreated;
  int lastUpdated;

  User(
      {this.iduser,
      this.userLanguage,
      this.userRights,
      this.name,
      this.address,
      this.phone,
      this.email,
      this.dob,
      this.deleteTimestamp,
      this.dateCreated,
      this.lastUpdated});


  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) {
  return User(
      iduser: json['iduser'] as int,
      userLanguage: json['userLanguage'] == null
          ? null
          : UserLanguage.fromJson(json['userLanguage'] as Map<String, dynamic>),
      userRights: json['userRights'] == null
          ? null
          : UserRight.fromJson(json['userRights'] as Map<String, dynamic>),
      name: json['name'] as String,
      address: json['address'] as String,
      phone: json['phone'] as String,
      email: json['email'] as String,
      dob: json['dob'] as int,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'iduser': instance.iduser,
      'userLanguage': instance.userLanguage,
      'userRights': instance.userRights,
      'name': instance.name,
      'address': instance.address,
      'phone': instance.phone,
      'email': instance.email,
      'dob': instance.dob,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
import 'package:json_annotation/json_annotation.dart';

part 'user_right.g.dart';

@JsonSerializable()

class UserRight
{
   int iduserRight;
   String userRight;
   int deleteTimestamp;
   int dateCreated;
   int lastUpdated;

   UserRight({this.iduserRight, this.userRight, this.deleteTimestamp, this.dateCreated, this.lastUpdated});

  factory UserRight.fromJson(Map<String, dynamic> json) =>
      _$UserRightFromJson(json);

  Map<String, dynamic> toJson() => _$UserRightToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user_right.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

UserRight _$UserRightFromJson(Map<String, dynamic> json) {
  return UserRight(
      iduserRight: json['iduserRight'] as int,
      userRight: json['userRight'] as String,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserRightToJson(UserRight instance) => <String, dynamic>{
      'iduserRight': instance.iduserRight,
      'userRight': instance.userRight,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
import 'package:json_annotation/json_annotation.dart';

part 'user_language.g.dart';

@JsonSerializable()

class UserLanguage {
  int iduserLanguage;
  String language;
  int deleteTimestamp;
  int dateCreated;
  int lastUpdated;

  UserLanguage({this.iduserLanguage, this.language, this.deleteTimestamp,
      this.dateCreated, this.lastUpdated});

  factory UserLanguage.fromJson(Map<String, dynamic> json) =>
      _$UserLanguageFromJson(json);

  Map<String, dynamic> toJson() => _$UserLanguageToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user_language.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

UserLanguage _$UserLanguageFromJson(Map<String, dynamic> json) {
  return UserLanguage(
      iduserLanguage: json['iduserLanguage'] as int,
      language: json['language'] as String,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserLanguageToJson(UserLanguage instance) =>
    <String, dynamic>{
      'iduserLanguage': instance.iduserLanguage,
      'language': instance.language,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) {
  return User(
      iduser: json['iduser'] as int,
      userLanguage: json['userLanguage'] == null
          ? null
          : UserLanguage.fromJson(json['userLanguage'] as Map<String, dynamic>),
      userRights: json['userRights'] == null
          ? null
          : UserRight.fromJson(json['userRights'] as Map<String, dynamic>),
      name: json['name'] as String,
      address: json['address'] as String,
      phone: json['phone'] as String,
      email: json['email'] as String,
      dob: json['dob'] as int,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'iduser': instance.iduser,
      'userLanguage': instance.userLanguage,
      'userRights': instance.userRights,
      'name': instance.name,
      'address': instance.address,
      'phone': instance.phone,
      'email': instance.email,
      'dob': instance.dob,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
下面是由
flatterpackages pub run build\u runner build
命令生成的代码

user.g.dart

import 'package:flutter/material.dart';

import '../models/user.dart';
import '../models/user_language.dart';
import '../models/user_right.dart';
import '../custom_functions/data_fetch.dart';
import '../common_functions/app_navigation.dart';

class RegisterPage extends StatelessWidget {


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Register"),
      ),

      body: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage("assets/images/background_login_5.jpg"),
            fit: BoxFit.cover,
          ),
        ),
        child: RegisterForm(),
      ),
    );
  }


}


class RegisterForm extends StatefulWidget
{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return RegisterFormState();
  }

}

class RegisterFormState extends State<RegisterForm>
{
  final borderColorGreen = const Color(0xff339966);

  bool passwordVisible, confirmPasswordVisible;

  TextEditingController nameTxtController =TextEditingController();
  TextEditingController emailTxtController =TextEditingController();
  TextEditingController mobileTxtController =TextEditingController();
  TextEditingController passwordTxtController =TextEditingController();
  TextEditingController confirmPasswordTxtController =TextEditingController();

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    passwordVisible=false;
    confirmPasswordVisible=false;

    return ListView(
          children: <Widget>[
            _buildTitleSection(),
            _buildInputFields("Name",nameTxtController, TextInputType.text, Icons.border_color, Colors.white),
            _buildInputFields("Email",emailTxtController,TextInputType.emailAddress, Icons.email, Colors.white),
            _buildInputFields("Mobile",mobileTxtController, TextInputType.phone, Icons.phone, Colors.white),
            _buildPasswordFields("Password",passwordTxtController,TextInputType.text),
            _buildPasswordFields("Confirm Password",confirmPasswordTxtController, TextInputType.text),
            _buildRegisterButton(),
          ],
        );
  }

  Widget _buildTitleSection() {
    return Container(
        margin: EdgeInsets.only(top: 20),
        padding: EdgeInsets.all(32),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "manningmarket.lk",
              style: TextStyle(
                color: borderColorGreen,
                fontWeight: FontWeight.w900,
                fontSize: 25,
              ),
            ),
          ],
        ));
  }

  Widget _buildInputFields(String label, TextEditingController textController, TextInputType textInputType, IconData icon, Color iconColor) {
    return Container(
        margin: EdgeInsets.only(left: 20, bottom: 20),
        child: Column(
          children: <Widget>[

            Container(
              padding: EdgeInsets.only(right: 20),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextFormField(
                      controller: textController,
                      style: new TextStyle(color: Colors.white),
                      keyboardType: textInputType,
                      decoration: InputDecoration(
                        labelText: label,
                        fillColor: Colors.white,
                        labelStyle: TextStyle(
                            color: Colors.white, fontWeight: FontWeight.w600),
                        enabledBorder: OutlineInputBorder(
                          borderSide: const BorderSide(
                              color: Colors.white30, width: 2.0),
                          borderRadius: BorderRadius.circular(25.0),
                        ),
                        suffixIcon: IconButton(
                        icon: Icon(
                          icon,
                          color: iconColor
                        ),
                        onPressed: (){},
                      )
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ));
  }

    Widget _buildPasswordFields(String label, TextEditingController textController, TextInputType textInputType) {
    return Container(
        margin: EdgeInsets.only(left: 20, bottom: 20),
        child: Column(
          children: <Widget>[

            Container(
              padding: EdgeInsets.only(right: 20),
              child: Row(
                children: <Widget>[
                  Flexible(
                    child: TextFormField(
                      controller: textController,
                      style: new TextStyle(color: Colors.white),
                      keyboardType: textInputType,
                      decoration: InputDecoration(
                        labelText: label,
                        fillColor: Colors.white,
                        labelStyle: TextStyle(
                            color: Colors.white, fontWeight: FontWeight.w600),
                        enabledBorder: OutlineInputBorder(
                          borderSide: const BorderSide(
                              color: Colors.white30, width: 2.0),
                          borderRadius: BorderRadius.circular(25.0),
                        ),
                        suffixIcon: IconButton(
                        icon: Icon(
                          // Based on passwordVisible state choose the icon
                          passwordVisible
                              ? Icons.visibility
                              : Icons.visibility_off,
                          color: Theme.of(context).primaryColorDark,
                        ),
                        onPressed: () {
                          // Update the state i.e. toogle the state of passwordVisible variable
                          setState(() {
                            passwordVisible
                                ? passwordVisible = false
                                : passwordVisible = true;
                          });
                        },
                      )
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ));
  }

  Widget _buildRegisterButton() {
    return Container(
      margin: EdgeInsets.only(top: 10, right: 20, left: 20),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Flexible(
              child: SizedBox(
                  width: double.infinity, // match_parent
                  child: RaisedButton(
                    child: Text(
                      "Create Account",
                      style: TextStyle(
                          color: Colors.white,
                          fontSize: 18,
                          fontWeight: FontWeight.normal),
                    ),
                    shape: RoundedRectangleBorder(
                        borderRadius: new BorderRadius.circular(30.0)),
                    color: borderColorGreen,
                    onPressed: () {
                      setState(() {
                        _createUser();
                      });

                    },
                  )))
        ],
      ),
    );
  }

  void _createUser()
  {

    UserRight userRight = UserRight(
      iduserRight: 2
    );

    UserLanguage userLanguage = UserLanguage(
      iduserLanguage: 1
    );

    User user = User(
      name: nameTxtController.text,
      email: emailTxtController.text,
      phone: mobileTxtController.text,
      userLanguage: userLanguage,
      userRights: userRight

    );

    DataFetch().createUser(AppNavigation.getAPIUrl() +
          "user/saveUser", user).then((String result){
            print("RESULT IS: "+result);
          });
  }

}
import 'package:json_annotation/json_annotation.dart';

import './user_language.dart';
import './user_right.dart';


part 'user.g.dart';


@JsonSerializable()

class User {
  int iduser;
  UserLanguage userLanguage;
  UserRight userRights;
  String name;
  String address;
  String phone;
  String email;
  int dob;
  int deleteTimestamp;
  int dateCreated;
  int lastUpdated;

  User(
      {this.iduser,
      this.userLanguage,
      this.userRights,
      this.name,
      this.address,
      this.phone,
      this.email,
      this.dob,
      this.deleteTimestamp,
      this.dateCreated,
      this.lastUpdated});


  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) {
  return User(
      iduser: json['iduser'] as int,
      userLanguage: json['userLanguage'] == null
          ? null
          : UserLanguage.fromJson(json['userLanguage'] as Map<String, dynamic>),
      userRights: json['userRights'] == null
          ? null
          : UserRight.fromJson(json['userRights'] as Map<String, dynamic>),
      name: json['name'] as String,
      address: json['address'] as String,
      phone: json['phone'] as String,
      email: json['email'] as String,
      dob: json['dob'] as int,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'iduser': instance.iduser,
      'userLanguage': instance.userLanguage,
      'userRights': instance.userRights,
      'name': instance.name,
      'address': instance.address,
      'phone': instance.phone,
      'email': instance.email,
      'dob': instance.dob,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
import 'package:json_annotation/json_annotation.dart';

part 'user_right.g.dart';

@JsonSerializable()

class UserRight
{
   int iduserRight;
   String userRight;
   int deleteTimestamp;
   int dateCreated;
   int lastUpdated;

   UserRight({this.iduserRight, this.userRight, this.deleteTimestamp, this.dateCreated, this.lastUpdated});

  factory UserRight.fromJson(Map<String, dynamic> json) =>
      _$UserRightFromJson(json);

  Map<String, dynamic> toJson() => _$UserRightToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user_right.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

UserRight _$UserRightFromJson(Map<String, dynamic> json) {
  return UserRight(
      iduserRight: json['iduserRight'] as int,
      userRight: json['userRight'] as String,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserRightToJson(UserRight instance) => <String, dynamic>{
      'iduserRight': instance.iduserRight,
      'userRight': instance.userRight,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
import 'package:json_annotation/json_annotation.dart';

part 'user_language.g.dart';

@JsonSerializable()

class UserLanguage {
  int iduserLanguage;
  String language;
  int deleteTimestamp;
  int dateCreated;
  int lastUpdated;

  UserLanguage({this.iduserLanguage, this.language, this.deleteTimestamp,
      this.dateCreated, this.lastUpdated});

  factory UserLanguage.fromJson(Map<String, dynamic> json) =>
      _$UserLanguageFromJson(json);

  Map<String, dynamic> toJson() => _$UserLanguageToJson(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user_language.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

UserLanguage _$UserLanguageFromJson(Map<String, dynamic> json) {
  return UserLanguage(
      iduserLanguage: json['iduserLanguage'] as int,
      language: json['language'] as String,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserLanguageToJson(UserLanguage instance) =>
    <String, dynamic>{
      'iduserLanguage': instance.iduserLanguage,
      'language': instance.language,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'user.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

User _$UserFromJson(Map<String, dynamic> json) {
  return User(
      iduser: json['iduser'] as int,
      userLanguage: json['userLanguage'] == null
          ? null
          : UserLanguage.fromJson(json['userLanguage'] as Map<String, dynamic>),
      userRights: json['userRights'] == null
          ? null
          : UserRight.fromJson(json['userRights'] as Map<String, dynamic>),
      name: json['name'] as String,
      address: json['address'] as String,
      phone: json['phone'] as String,
      email: json['email'] as String,
      dob: json['dob'] as int,
      deleteTimestamp: json['deleteTimestamp'] as int,
      dateCreated: json['dateCreated'] as int,
      lastUpdated: json['lastUpdated'] as int);
}

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
      'iduser': instance.iduser,
      'userLanguage': instance.userLanguage,
      'userRights': instance.userRights,
      'name': instance.name,
      'address': instance.address,
      'phone': instance.phone,
      'email': instance.email,
      'dob': instance.dob,
      'deleteTimestamp': instance.deleteTimestamp,
      'dateCreated': instance.dateCreated,
      'lastUpdated': instance.lastUpdated
    };
我得到下面的错误

flutter (21372): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: Exception: Error while fetching data
E/flutter (21372): #0      DataFetch.createUser.<anonymous closure>
E/flutter (21372): #1      _rootRunUnary (dart:async/zone.dart:1132:38)
E/flutter (21372): #2      _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter (21372): #3      _FutureListener.handleValue (dart:async/future_impl.dart:126:18)
E/flutter (21372): #4      Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)
E/flutter (21372): #5      Future._propagateToListeners (dart:async/future_impl.dart:668:32)
E/flutter (21372): #6      Future._complete (dart:async/future_impl.dart:473:7)
E/flutter (21372): #7      _SyncCompleter.complete (dart:async/future_impl.dart:51:12)
E/flutter (21372): #8      _AsyncAwaitCompleter.complete (dart:async/runtime/libasync_patch.dart:28:18)
E/flutter (21372): #9      _completeOnAsyncReturn (dart:async/runtime/libasync_patch.dart:294:13)
E/flutter (21372): #10     _withClient (package:http/http.dart)
E/flutter (21372): <asynchronous suspension>
E/flutter (21372): #11     post
E/flutter (21372): #12     DataFetch.createUser
E/flutter (21372): <asynchronous suspension>
E/flutter (21372): #13     RegisterFormState._createUser
E/flutter (21372): #14     RegisterFormState._buildRegisterButton.<anonymous closure>.<anonymous closure>
E/flutter (21372): #15     State.setState 
E/flutter (21372): #16     RegisterFormState._buildRegisterButton.<anonymous closure>
E/flutter (21372): #17     _InkResponseState._handleTap 
E/flutter (21372): #18     _InkResponseState.build.<anonymous closure> 
E/flutter (21372): #19     GestureRecognizer.invokeCallback 
E/flutter (21372): #20     TapGestureRecognizer._checkUp 
E/flutter (21372): #21     TapGestureRecognizer.acceptGesture 
E/flutter (21372): #22     GestureArenaManager.sweep 
E/flutter (21372): #23     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent 
E/flutter (21372): #24     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent 
E/flutter (21372): #25     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent 
E/flutter (21372): #26     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue 
E/flutter (21372): #27     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket 
E/flutter (21372): #28     _rootRunUnary (dart:async/zone.dart:1136:13)
E/flutter (21372): #29     _CustomZone.runUnary (dart:async/zone.dart:1029:19)
E/flutter (21372): #30     _CustomZone.runUnaryGuarded (dart:async/zone.dart:931:7)
E/flutter (21372): #31     _invoke1 (dart:ui/hooks.dart:223:10)
E/flutter (21372): #32     _dispatchPointerDataPacket (dart:ui/hooks.dart:144:5)
E/flutter (21372):
flatter(21372):[ERROR:flatter/lib/ui/ui\u dart\u state.cc(148)]未处理的异常:异常:获取数据时出错
E/flatter(21372):#0 DataFetch.createUser。
E/flatter(21372):#1 rootrunnary(dart:async/zone.dart:1132:38)
E/flatter(21372):#2_CustomZone.runUnary(dart:async/zone.dart:1029:19)
E/flatter(21372):#3 FutureListener.handleValue(dart:async/future_impl.dart:126:18)
E/flatter(21372):#4 Future._-propagateToListeners.handleValueCallback(dart:async/Future_-impl.dart:639:45)
E/flatter(21372):#5未来。#传播给监听器(dart:async/Future\u impl.dart:668:32)
E/颤振(21372):#6个未来。(dart:async/Future(未来)完成(dart:473:7)
E/flatter(21372):#7 SyncCompleter.complete(dart:async/future_impl.dart:51:12)
E/flatter(21372):#8 AsyncAwaitCompleter.complete(dart:async/runtime/libasync_patch.dart:28:18)
E/flatter(21372):#9完成同步返回(dart:async/runtime/libasync_patch.dart:294:13)
E/flatter(21372):#10 withClient(包:http/http.dart)
E/颤振(21372):
E/Flatter(21372):#11个员额
E/flatter(21372):#12 DataFetch.createUser
E/颤振(21372):
E/颤振(21372):#13状态
E/颤振(21372):#14注册执行状态。#构建注册按钮。。
E/颤振(21372):#15 State.setState
E/颤振(21372):#16注册执行状态。"构建注册按钮。
E/颤振(21372):#17#
E/颤振(21372):#18#InkResponse.build。
E/颤振(21372):#19手势识别器.invokeCallback
E/颤振(21372):#20 TapGestureRecognitor.U检查
E/颤振(21372):#21 TapGestureRecognitor.Accept手势
E/颤振(21372):#22手势管理器
E/颤振(21372):#23#WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent
E/颤振(21372):#24#WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent
E/颤振(21372):#25#WidgetsFlutterBinding&BindingBase&GestureBinding.#手点事件
E/颤振(21372):#26#WidgetsFlutterBinding&BindingBase&GestureBinding.#冲洗点设置
E/颤振(21372):#27#WidgetsFlutterBinding&BindingBase&GestureBinding.#HandlePointer数据包
E/颤振(21372):#28 _根运行单位(dart:async/zone.dart:1136:13)
E/flatter(21372):#29 _CustomZone.runUnary(dart:async/zone.dart:1029:19)
E/flatter(21372):#30 _CustomZone.runUnaryGuarded(dart:async/zone.dart:931:7)
E/颤振(21372):#31 _调用1(省道:ui/挂钩。省道:223:10)
E/flatter(21372):#32 dispatchPointerDataPacket(dart:ui/hooks.dart:144:5)
E/颤振(21372):
打印下面给出的响应

<!doctype html><html lang="en"><head><title>HTTP Status 415 – Unsupported Media Type</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 415 – Unsupported Media Type</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Unsupported Media Type</p><p><b>Description</b> The origin server is refusing to service the request because the payload is in a format
HTTP状态415–不支持的媒体类型H1{font-family:Tahoma,Arial,无衬线;颜色:白色;背景色:525D76;字体大小:22px;}h2{font-family:Tahoma,Arial,无衬线;颜色:白色;背景色:525D76;字体大小:16px;}h3{font-family:Tahoma,Arial,无衬线;颜色:白色;背景色:525D76;字体大小:14px;}{字体系列:Tahoma,Arial,无衬线;颜色:黑色;背景色:白色;}b{字体系列:Tahoma,Arial,无衬线;颜色:白色;背景色:}p{字体系列:Tahoma,Arial,无衬线;背景色:白色;颜色:黑色;字体大小:12px;}a{颜色:黑色;}a.name{颜色:黑色;}线条{高度:1px;背景色:#d76;边框:无;}HTTP Status 415–不支持的媒体类型
类型状态报告

消息不支持的媒体类型

说明源服务器拒绝为请求提供服务,因为负载的格式为
在发送数据之前,必须对
正文进行编码

更改此项:

return http.post(url, body: body.toJson())
为此:

return http.post(url, body: json.encode(body.toJson()))
更新

根据上一个错误,我认为您忘记了解析
toJson
用户语言和用户权限

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
  'iduser': instance.iduser,
  'userLanguage': instance.userLanguage.toJson(),
  'userRights': instance.userRights.toJson(),
Map\u$UserToJson(用户实例)=>{
“iduser”:instance.iduser,
“userLanguage”:instance.userLanguage.toJson(),
“userRights”:instance.userRights.toJson(),

在发送数据之前,必须对
正文进行编码

更改此项:

return http.post(url, body: body.toJson())
为此:

return http.post(url, body: json.encode(body.toJson()))
更新

根据上一个错误,我认为您忘记了解析
toJson
用户语言和用户权限

Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
  'iduser': instance.iduser,
  'userLanguage': instance.userLanguage.toJson(),
  'userRights': instance.userRights.toJson(),
Map\u$UserToJson(用户实例)=>{
“iduser”:instance.iduser,
“userLanguage”:instance.userLanguage.toJson(),
“userRights”:instance.userRights.toJson(),

谢谢你的回复。我尝试了你的建议,然后又出现了另一个错误。请检查我帖子中的更新。打印回复、状态代码和正文,可能url/数据/标题不正确。我已经更新了我的帖子,请检查。当我打印
body.toJSON()时
它显示了一些明显不正确的地方。这是因为我对模型使用了
命名参数
,并使用
flatter-packages-pub-run-build\u-runner-build
来构建
something.g.dart
类吗?我这样做是因为这样我就可以只填充模型类的必需字段,而不是填充n执行
post
。对不起,我不明白。你是指我的
user.dart
类吗?我可以看到我有
Map-to-json()=>$UserToJson(this);
。你的建议是用你的代码替换它?是的,因为你需要像json一样的用户语言和用户权限