FLUTTER- ДОСТУП К ДАННЫМ НА МЕСТНОМ - PullRequest
0 голосов
/ 13 июля 2020

У меня есть проблема, которую очень трудно объяснить ... Я создаю приложение для социальных сетей. Я написал страницу входа с помощью SharedPreferences, и пока я это делаю, я отправил адрес электронной почты и пароль по URL-адресу. URL-адрес, по которому я опубликовал данные, содержит некоторые значения идентификаторов. Когда я хочу получить эти значения id, флаттер выдает ошибку. Я добавлю код и ошибку ниже. пожалуйста, помогите мне ...

Страница входа и отправьте адрес электронной почты и пароль:

PostValuesModel postEmailAndPasswordValuesFromJson(String str) =>
    PostValuesModel.fromJson(json.decode(str));

String postEmailAndPassword(PostValuesModel data) => json.encode(data.toJson());

class PostValuesModel {
  String email;
  String password;
  int servisLogin;
  String servisId;

  PostValuesModel({
    this.email,
    this.password,
    this.servisLogin,
    this.servisId,
  });

  factory PostValuesModel.fromJson(Map<String, dynamic> json) =>
      PostValuesModel(
        email: json["email"],
        password: json["password"],
        servisLogin: json["login"],
        servisId: json["servis_id"],
      );

  Map<String, dynamic> toJson() => {
        "email": email,
        "password": password,
        "login": servisLogin,
        "servis_id": servisId,
      };
}

Future<PostValuesModel> postEmailAndPasswordValues(
  String emailTitle,
  String passwordTitle,
) async {
  final String apiUrl = "https://rsad.com//dart.php";

  final response = await http.post(apiUrl, body: {
    "email": emailTitle,
    "password": passwordTitle,
  });

  if (response.statusCode == 200) {
    final String responseString = response.body;

    return postEmailAndPasswordValuesFromJson(responseString);
  } else {
    print('Error');
  }
}


class _LoginScreenState extends State<LoginScreen> {
  TextEditingController emailController = TextEditingController();
  TextEditingController passwordController = TextEditingController();

  bool isLoggedIn = false;
  String emailSession = '';

  PostValuesModel _email;
  PostValuesModel _password;
  PostValuesModel _servisLogin;
  PostValuesModel _servisId;

Widget _buildLoginButton() {
    Widget _buildChild() {
        return CupertinoButton(
          onPressed: () async {
            final String emailTitle = emailController.text.toString();
            final String passwordTitle = passwordController.text.toString();

            final PostValuesModel user = await postEmailAndPasswordValues(
              emailTitle,
              passwordTitle,
            );

            setState(() {
              _email = user;
              _password = user;
              _servisLogin = user;
              _servisId = user;
            });

            print(_servisId.servisId.toString());

            if (_servisLogin.servisLogin == 0) {
              Navigator.of(context);
            } else {
              Navigator.of(context).push(_routeServisLogin());
            }

            isLoggedIn ? logout() : loginUser();

            //Navigator.of(context).push(_routeLogin());
          },
          padding: EdgeInsets.all(15.0),
          color: Colors.red,
          child: Text(
            'Giriş Yap',
            style: TextStyle(
              color: Colors.white,
            ),
          ),
        );
    }

    return Container(
      padding: EdgeInsets.symmetric(vertical: 25.0),
      width: double.infinity,
      child: _buildChild(),
    );
  }
}

И я хочу получить значения сюда:

BekliyorModel bekliyorModelFromJson(String str) =>
    BekliyorModel.fromJson(json.decode(str));

String bekliyorModelToJson(BekliyorModel data) => json.encode(data.toJson());

class BekliyorModel {
  String servis_id;
  String kategori;

  BekliyorModel({this.servis_id, this.kategori});

  factory BekliyorModel.fromJson(Map<String, dynamic> json) => BekliyorModel(
        servis_id: json["servis_id"],
        kategori: json["kategori"],
      );

  Map<String, dynamic> toJson() => {
        "servis_id": servis_id,
        "kategori": kategori,
      };
}

Future<BekliyorModel> postAndFetchBekliyorDatas(
  String servisIdTitle,
  String kategoriTitle,
) async {
  final String apiUrl =
      "https://www.rsad.com/dart.php";

  final response = await http.post(apiUrl, body: {
    "kategori": kategoriTitle,
    "servis_id": servisIdTitle,
  });

  if (response.statusCode == 200) {
    final String responseString = response.body;

    return bekliyorModelFromJson(responseString);
  } else {
    return null;
  }
}

class _ServisProfilState extends State<ServisProfil> {
  BekliyorModel _servisId;
  BekliyorModel _kategori;

 Widget _buildBekliyor() {
    return Container(
      height: 60,
      child: RaisedButton(
          highlightElevation: 0,
          splashColor: Colors.transparent,
          elevation: 0,
          color: Colors.white,
          child: Container(
            alignment: Alignment.centerLeft,
            child: Text(
              'Bekliyor/Sonuçlanan',
              style: TextStyle(fontSize: 18, color: Colors.black),
            ),
          ),
          onPressed: () async {
            PostValuesModel deneme;

            final String servisIdTitle = deneme.servisId.toString();
            final String kategoriTitle = 3.toString();

            final BekliyorModel user = await postAndFetchBekliyorDatas(
              kategoriTitle,
              servisIdTitle,
            );

            setState(() {
              _kategori = user;
              _servisId = user;
            });

            print(servisIdTitle.toString());

            // Navigator.of(context).push(
            //   CupertinoPageRoute(
            //     builder: (context) => Bekliyor(),
            //   ),
            // );
          }),
      decoration: BoxDecoration(
        border: Border(
          bottom: BorderSide(
            width: 1,
            color: Colors.black12,
          ),
        ),
      ),
    );
  }
}

это дает мне эту ошибку :

[VERBOSE-2:ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The getter 'servisId' was called on null.
Receiver: null
Tried calling: servisId
#0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:51:5)
#1      _ServisProfilState._buildBekliyor.<anonymous closure> 
package:ekspar/Servis/service_profile.dart:116
#2      _InkResponseState._handleTap 
package:flutter/…/material/ink_well.dart:992
#3      _InkResponseState.build.<anonymous closure> 
package:flutter/…/material/ink_well.dart:1098
#4      GestureRecognizer.invokeCallback 
package:flutter/…/gestures/recognizer.dart:184
#5      TapGestureRecognizer.handleTapUp 
package:flutter/…/gestures/tap.dart:524
#6      BaseTapGestureRecognizer._checkUp 
package:flutter/…/gestures/tap.dart:284
#7      BaseTapGestureRecognizer.acceptGesture 
package:flutter/…/gestures/tap.dart:256
#8      GestureArenaManager.sweep 
package:flutter/…/gestures/arena.dart:158
#9      GestureBinding.handleEvent (<…>

Думаю, тут надо править:

   final String servisIdTitle = deneme.servisId.toString();

помогите пожалуйста ...

1 Ответ

0 голосов
/ 13 июля 2020

Это из-за этой части кода ..

PostValuesModel deneme;
final String servisIdTitle = deneme.servisId.toString();

Вы только что объявили переменную deneme в первой строке, не присвоив ей значения, а затем во второй строке вы пытается вызвать на нем геттер servisId, в то время как ваша переменная deneme все еще имеет значение null, как и сказано в ошибке.

...