Невозможно опубликовать данные формы в URL-адрес веб-перехватчика Discord

avatar
artistAhmed
8 августа 2021 в 20:30
239
1
1

Мой код работает с другим моим проектом, но не с этим?

Это мой экран формы, в котором используется тот же метод, что и в моем предыдущем проекте, и он работал нормально в начале, но не работает сейчас.

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

Проверьте нижнюю часть кода, чтобы увидеть, где я вызываю функцию

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:relationship/services/data_model.dart';

void main() {
  runApp(FormClass());
}

class FormClass extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _FormState();
}

class _FormState extends State<FormClass> {
  final _formKey = GlobalKey<FormState>();

  final _user = DataModel();

  @override
  void initState() {
    super.initState();
  }

  double sliderValA = 0.0;
  double sliderValB = 0.0;
  double sliderValC = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(title: Text('Personal Log')),
        body: Container(
            padding: EdgeInsets.symmetric(horizontal: 10),
            child: Builder(
                builder: (context) => Form(
                    key: _formKey,
                    child: SingleChildScrollView(
                        child: Column(
                            crossAxisAlignment: CrossAxisAlignment.stretch,
                            children: [
                          SizedBox(
                            height: 20,
                          ),
                          TextFormField(
                            decoration: InputDecoration(
                                labelText: "Enter Location",
                                border: OutlineInputBorder()),
                            validator: (value) {
                              if (value!.isEmpty) {
                                return 'Enter Location !!!';
                              }
                              return null;
                            },
                            onSaved: (val) =>
                                setState(() => _user.location = val!),
                          ),
                          SizedBox(
                            height: 20,
                          ),
                          TextFormField(
                            decoration: InputDecoration(
                                labelText: "Enter Logs",
                                border: OutlineInputBorder()),
                            validator: (value) {
                              if (value!.isEmpty) {
                                return 'Enter Logs !!!';
                              }
                              return null;
                            },
                            onSaved: (val) => setState(() => _user.log = val!),
                          ),
                          SizedBox(
                            height: 20,
                          ),
                          Slider(
                              value: sliderValA,
                              min: 0,
                              max: 5,
                              divisions: 5,
                              label: "Alertness",
                              onChanged: (val) {
                                setState(() {
                                  sliderValA = val;
                                  _user.alertness = val;
                                });
                              }),
                          SizedBox(
                            height: 20,
                          ),
                          Slider(
                              value: sliderValB,
                              min: 0,
                              max: 5,
                              divisions: 5,
                              label: "Hunger",
                              onChanged: (val) {
                                setState(() {
                                  sliderValB = val;
                                  _user.hunger = val;
                                });
                              }),
                          SizedBox(
                            height: 20,
                          ),
                          Slider(
                              value: sliderValC,
                              min: 0,
                              max: 5,
                              divisions: 5,
                              label: "Thirst",
                              onChanged: (val) {
                                setState(() {
                                  sliderValC = val;
                                  _user.thirst = val;
                                });
                              }),
                          SizedBox(
                            height: 20,
                          ),
                          Container(
                            child: Text('Achievments'),
                          ),
                          SizedBox(
                            height: 20,
                          ),
                          CheckboxListTile(
                              title: const Text('Job'),
                              value: _user.achievments[DataModel.job],
                              onChanged: (val) {
                                setState(() =>
                                    _user.achievments[DataModel.job] = val!);
                              }),
                          CheckboxListTile(
                              title: const Text('Side Project'),
                              value: _user.achievments[DataModel.sideP],
                              onChanged: (val) {
                                setState(() =>
                                    _user.achievments[DataModel.sideP] = val!);
                              }),
                          CheckboxListTile(
                              title: const Text('Meal'),
                              value: _user.achievments[DataModel.meal],
                              onChanged: (val) {
                                setState(() =>
                                    _user.achievments[DataModel.meal] = val!);
                              }),
                          CheckboxListTile(
                              title: const Text('Exercise'),
                              value: _user.achievments[DataModel.exercise],
                              onChanged: (val) {
                                setState(() => _user
                                    .achievments[DataModel.exercise] = val!);
                              }),
                          CheckboxListTile(
                              title: const Text('Social'),
                              value: _user.achievments[DataModel.social],
                              onChanged: (val) {
                                setState(() =>
                                    _user.achievments[DataModel.social] = val!);
                              }),
                          CheckboxListTile(
                              title: const Text('Study'),
                              value: _user.achievments[DataModel.study],
                              onChanged: (val) {
                                setState(() =>
                                    _user.achievments[DataModel.study] = val!);
                              }),
                          SizedBox(
                            height: 20,
                          ),
                          Container(
                              // ignore: deprecated_member_use
                              child: RaisedButton(
                                  onPressed: () {
                                    final form = _formKey.currentState;
                                    if (form!.validate()) {
                                       form.save();
                                      _user.makePostRequest();
                                    }
                                  },
                                  child: Text('Save'))),
                        ]))))));
  }
}

Это мой класс main.dart

import 'package:flutter/material.dart';
import 'package:relationship/screens/form_screen.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FormClass(),
    );
  }
}

Это метод

makePostRequest() async {
    final uri = Uri.parse(
        'My URL');
    final header = {'Content-Type': 'application/json'};
    Map<String, dynamic> body = {
      "content": json.encode([
        DateTime.now(),
        location,
        log,
        achievments,
        "Alertness $alertness",
        "Hunger $hunger",
        "Thirst $thirst"
      ]) // Change this line
    };
    String jsonBody = json.encode(body);
    Response response = await post(
      uri,
      headers: header,
      body: jsonBody,
    );

    int statusCode = response.statusCode;
    String responseBody = response.body;

    print(statusCode);
    print(responseBody);
  }

P.S. Я проверил URL-адрес, отправив сообщение из предыдущего apk, и он отправляет данные в течение секунды

Вот код ответа

`Launching lib\main.dart on vivo 1906 in debug mode...
√  Built build\app\outputs\flutter-apk\app-debug.apk.
I/flutter (24141): Observatory listening on ************************************
I/flutter (24588): Observatory listening on ************************************
E/flutter (24588): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: Converting object to an encodable object failed: Instance of 'DateTime'
E/flutter (24588): #0      _JsonStringifier.writeObject (dart:convert/json.dart:688:7)
E/flutter (24588): #1      _JsonStringifier.writeList (dart:convert/json.dart:736:7)
E/flutter (24588): #2      _JsonStringifier.writeJsonValue (dart:convert/json.dart:718:7)
E/flutter (24588): #3      _JsonStringifier.writeObject (dart:convert/json.dart:679:9)
E/flutter (24588): #4      _JsonStringStringifier.printOn (dart:convert/json.dart:877:17)
E/flutter (24588): #5      _JsonStringStringifier.stringify (dart:convert/json.dart:862:5)
E/flutter (24588): #6      JsonEncoder.convert (dart:convert/json.dart:262:30)
E/flutter (24588): #7      JsonCodec.encode (dart:convert/json.dart:172:45)
E/flutter (24588): #8      DataModel.makePostRequest
E/flutter (24588): #9      _FormState.build.<anonymous closure>.<anonymous closure>
E/flutter (24588): #10     _InkResponseState._handleTap
E/flutter (24588): #11     GestureRecognizer.invokeCallback
E/flutter (24588): #12     TapGestureRecognizer.handleTapUp
E/flutter (24588): #13     BaseTapGestureRecognizer._checkUp
E/flutter (24588): #14     BaseTapGestureRecognizer.acceptGesture
E/flutter (24588): #15     GestureArenaManager.sweep
E/flutter (24588): #16     GestureBinding.handleEvent
E/flutter (24588): #17     GestureBinding.dispatchEvent
E/flutter (24588): #18     RendererBinding.dispatchEvent
E/flutter (24588): #19     GestureBinding._handlePointerEventImmediately
E/flutter (24588): #20     GestureBinding.handlePointerEvent
E/flutter (24588): #21     GestureBinding._flushPointerEventQueue
E/flutter (24588): #22     GestureBinding._handlePointerDataPacket
E/flutter (24588): #23     _rootRunUnary (dart:async/zone.dart:1370:13)
E/flutter (24588): #24     _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (24588): #25     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter (24588): #26     _invoke1 (dart:ui/hooks.dart:182:10)
E/flutter (24588): #27     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:282:7)
E/flutter (24588): #28     _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)
E/flutter (24588):
Exited (1)```
Источник
Huthaifa Muayyad
8 августа 2021 в 20:35
0

Какой ответ, какой код состояния? Каков результат этого звонка?

artistAhmed
8 августа 2021 в 20:46
0

В этом проблема, я должен каждый раз собирать apk и устанавливать его, консоль отладки зависает при запуске lib\main.dart на vivo 1906 в режиме отладки...

artistAhmed
8 августа 2021 в 20:51
0

я отредактировал свой вопрос

Ответы (1)

avatar
Huthaifa Muayyad
8 августа 2021 в 21:13
0

Это вызывает вашу ошибку, прочтите вывод консоли отладки:

 Unhandled Exception: Converting object to an encodable object failed: Instance of 'DateTime'

Это вызвано этой строкой:

"content": json.encode([
        DateTime.now(),

Попробуйте:

DateTime.now().toIsoString()

Вы также можете столкнуться с другой ошибкой после того, как пройдете эту, в зависимости от того, как вы сохранили location и achievements.

.
artistAhmed
9 августа 2021 в 09:49
0

местоположение — это просто текст в строке, а достижения выглядят следующим образом: `Map<String, bool> achievments = { job: false, sideP: false, food: false, training: false, social: false, Study: false, };

artistAhmed
9 августа 2021 в 09:55
0

Спасибо, теперь все работает нормально, я сделал это с toString(), как я могу сделать индикатор прогресса? При нажатии кнопки, если успешно опубликованы какие-либо идеи?

Huthaifa Muayyad
9 августа 2021 в 10:13
0

Пожалуйста, отметьте это как правильный ответ на ваш вопрос. Спасибо!

Huthaifa Muayyad
9 августа 2021 в 11:27
0

Возможно, вам придется изменить его на виджет с отслеживанием состояния и использовать setState для отображения CircularProgressIndicator или в зависимости от результата, например, если код состояния равен 200.

artistAhmed
9 августа 2021 в 19:33
0

Почему для виджета с отслеживанием состояния? Я уже преобразовал свой main.dart в виджет с отслеживанием состояния, не вызовет ли это ошибку многих состояний

Huthaifa Muayyad
9 августа 2021 в 19:34
0

Вы не можете изменить пользовательский интерфейс без использования setState или решения для управления состоянием.