Создать многоразовый функциональный компонент в флаттере - PullRequest
0 голосов
/ 13 февраля 2019

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

export async function Service({
  api,
  third_party,
  method,
  params
}) {
  const headers = {};

  set(headers, 'Cache-Control', 'no-cache');
  set(headers, 'Content-Type', 'application/json');

  const reqBody = {
    method,
    headers,
    timeout: 30 * 1000
  };

  if (!isEmpty(params)) {
    reqBody.body = JSON.stringify(params);
  }

  return fetch(path, reqBody)
    .then(response => response.json())
    .then((data) => {
      console.log('response json data = ', data);
      if (data.errors) {
          if (data.code === 403 && data.number === 1006) {
            emitter.emit('AppRoot:VERSION_UPDATED', data.links);
          }
          return {
            result: 'error',
            ...data
          };
      }
      return {
        result: 'ok',
        ...data
      };
    })
    .catch(() => {
      return {
        result: 'error',
        message: 'Please check your internet connection!'
      };
    });
}

Использование сервисного компонента.

OpenMed_Service,
{
    api: 'patients/add-to-account',
    method: 'POST',
    params: payload
}

Service.dart

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

class Service extends StatelessWidget {
  final String api;
  final String method;
  var params;

  Service({
    this.api,
    this.method,
    this.params
  });

  var headers = {};
  final String url = "http://www.adminapi/somee.com/";
  var reqBody = {
    'header': ('Content-Type', 'application/json'),
    timeout: 30 * 1000
  };

  if (!isEmpty(params)) {
    reqBody.body = json.decode(params);
  }


  @override
  Widget build(BuildContext context) {
    if(method == 'post') {
      Future<http.Response> createPost(Post post) async{
        final response = await http.post('$url',
        headers: reqBody.headers,
        body: json.encode(post));
        return json.decode(response.body);
      }
    } else if(method == 'get') {
      Future<http.Response> getPost() async{
        final response = await http.get('$url/$api');
        return postFromJson(response.body);
      }
    }
  }
}

Я пытался создать statlessWidgets, но получаю много ошибок.Я создал класс обслуживания, он должен возвращать виджет, но я хочу 'возвращать данные JSON.

Кто-нибудь знает, как я могу заархивировать то же самое в флаттере.

...