Комбинированный запрос Flutter POST и GET - PullRequest
0 голосов
/ 03 августа 2020

Я хочу создать приложение, в котором я размещаю заказ на такси. Когда я размещаю заказ, я хочу показать карту в ListView. В фоновом режиме у меня происходит два запроса. Первый запрос - это POST запрос, где я заказываю такси. Второй запрос - это запрос GET, в котором я хочу получить информацию о заказе (оставшееся время и c).

Ответ на запрос POST следующий:

{"status": "DONE", "response": {"message": "Your order saved.", "uuid": "fc1d6f52-9aef-11e3-84ae-0015af9e1aa1"}}

Ответ на запрос GET следующий:

{"status": "DONE", "response": {"status": 100, "message": "Заказ выполнен", "driver_id": "d1", "start_time": "2014-08-26 18:15:00", "remaining_time": "5", "amount": 150.00, "rate_id": 1}}

Процесс должен работать следующим образом (я так думаю). Сначала с помощью POST-запроса я размещаю заказ и в ответ получаю UUID. Затем мне нужно использовать UUID (из запроса POST) и поместить его в функцию GET, поэтому на основе уникального UUID я получаю информацию о заказе. Ниже я опубликовал ошибку, которую получаю, я застрял на этом этапе. Любая помощь будет оценена. Я новичок во Flutter, возможно, мне не хватает какой-то точки или концепции.

import 'package:flutter/material.dart';
import 'package:xfit/model/orderTaxi_model.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';

class DemoRequest extends StatefulWidget {
  @override
  _DemoRequestState createState() => _DemoRequestState();
}





class _DemoRequestState extends State<DemoRequest> {
  var _listSection = List<Widget>();
  OrderTaxi _futureOrder;
  String info;

  Future<OrderTaxi> _createOrder() async {
    final http.Response response = await http.post(
      'http://46.20.206.218:10010/api/order',
      headers: <String, String>{
      },
      body: <String, String>{
        'api_key': 'XXXX-XXXX-XXXX-XXXX',
        'phone': '1111',
        'street': 'Testttt',
        'moderation_required': 'yes',
      },
    );
    if (response.statusCode == 200) {
      final Map responseString = jsonDecode(response.body);
      print(responseString);
      return OrderTaxi.fromJson(responseString);
    } else {
      throw Exception('Failed to create order');
    }
  }

  Future<String> getOrderInfo() async {
    var response = await http.get('http://46.20.206.218:10010/api/order/?api_key=XXXX-XXXX-XXXX-XXXX&uuid=${_futureOrder.uuid.toString()}');
    setState(() {
      var extractedInfo = json.decode(response.body);

      info = extractedInfo['response']['message'];
    });
    print(info);

  }

  @override
  void initState() {
    super.initState();
    _listSection.add(listSectionMethod('Title 1', 'Hello I am subtitle one', Icons.forward));
    _listSection.add(listSectionMethod('Title 2', 'Hello I am subtitle two', Icons.forward));

  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Trial #1'),
        centerTitle: true,
      ),
      body: listSection(),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          OrderTaxi response = await _createOrder();
          await getOrderInfo();
          setState(()  {
            // Here we add a new item to the list
            _futureOrder = response;
             _listSection.add(
             listSectionMethod('Order Status is: ', info, Icons.forward),
            );
          });
        },
        child: Icon(Icons.add),
        backgroundColor: Colors.blue,
      ),
    );
  }
  Card listSectionMethod(String title, String subtitle, IconData icon) {
    return new Card(
      child: ListTile(
        title: Text(
          title,
          style: TextStyle(fontWeight: FontWeight.bold),
        ),
        subtitle: Text(subtitle),
        trailing: Icon(
          icon,
          color: Colors.blue,
        ),
      ),
    );
  }
  Widget listSection() {
    return Container(
      margin: EdgeInsets.only(top: 20),
      child: ListView(
        children: [
          Column(
            children: this._listSection, // ----> Add this

          ),
        ],
      ),
    );
  }
}

Это ошибка, которую я получаю:

E/flutter ( 4465): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The method '[]' was called on null.
E/flutter ( 4465): Receiver: null
E/flutter ( 4465): Tried calling: []("message")
E/flutter ( 4465): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter ( 4465): #1      _DemoRequestState.getOrderInfo.<anonymous closure> (package:xfit/getRequest_tutorial.dart:66:39)
E/flutter ( 4465): #2      State.setState (package:flutter/src/widgets/framework.dart:1233:30)
E/flutter ( 4465): #3      _DemoRequestState.getOrderInfo (package:xfit/getRequest_tutorial.dart:63:5)
E/flutter ( 4465): <asynchronous suspension>
E/flutter ( 4465): #4      _DemoRequestState.build.<anonymous closure> (package:xfit/getRequest_tutorial.dart:90:17)
E/flutter ( 4465): #5      _DemoRequestState.build.<anonymous closure> (package:xfit/getRequest_tutorial.dart:88:20)
E/flutter ( 4465): #6      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:779:19)
E/flutter ( 4465): #7      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:862:36)
E/flutter ( 4465): #8      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 4465): #9      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:504:11)
E/flutter ( 4465): #10     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:282:5)
E/flutter ( 4465): #11     BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:217:7)
E/flutter ( 4465): #12     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
E/flutter ( 4465): #13     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:76:12)
E/flutter ( 4465): #14     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:122:9)
E/flutter ( 4465): #15     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
E/flutter ( 4465): #16     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:120:18)
E/flutter ( 4465): #17     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:106:7)
E/flutter ( 4465): #18     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:218:19)
E/flutter ( 4465): #19     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22)
E/flutter ( 4465): #20     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7)
E/flutter ( 4465): #21     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7)
E/flutter ( 4465): #22     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7)
E/flutter ( 4465): #23     _rootRunUnary (dart:async/zone.dart:1196:13)
E/flutter ( 4465): #24     _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter ( 4465): #25     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter ( 4465): #26     _invoke1 (dart:ui/hooks.dart:275:10)
E/flutter ( 4465): #27     _dispatchPointerDataPacket (dart:ui/hooks.dart:184:5)
E/flutter ( 4465): 
I/flutter ( 4465): 0b6eb2b2-2edd-4b28-9fdd-fec2e28530b0

1 Ответ

0 голосов
/ 03 августа 2020

Это может быть ответ: stackoverflow.com/a/51473337/6942599 Проблема в эмуляторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...