flutter_api 0.0.2+2 copy "flutter_api: ^0.0.2+2" to clipboard
flutter_api: ^0.0.2+2 copied to clipboard

A REST API Connector, you can connect your Flutter Project to any endpoint easily.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_api/api.dart';
import 'package:flutter_api/api_builders.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<String> _currencys = ["USDARS", "USDCAD", "USDJPY", "USDMXN", "USDEUR"];

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

    Api.baseUri = Uri.parse('https://query1.finance.yahoo.com/v8/finance/');

    Api.get<num>(
            'chart/${_currencys[0]}=X?includePrePost=false&interval=1d&corsDomain=finance.yahoo.com&.tsrc=finance',
            dataPath: 'chart/result/meta/regularMarketPrice')
        .then((value) {
      print(_currencys[0] + ': ' + value.data.toString());
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Flutter Api example')),
        body: RefreshIndicator(
          onRefresh: () async => setState(() {}),
          child: ListView.builder(
            itemCount: _currencys.length,
            itemBuilder: (BuildContext context, int index) {
              return ApiBuilder(
                url:
                    'chart/${_currencys[index]}=X?includePrePost=false&interval=1d&corsDomain=finance.yahoo.com&.tsrc=finance',
                dataPath: 'chart/result/meta',
                showLoading: false,
                builder: (value) {
                  if (!value.hasData) return Text("No Data");
                  var title = 'USD - ' + value.data['currency'];
                  return ListTile(
                    title: Text(title),
                    subtitle: Text(
                      DateTime.fromMillisecondsSinceEpoch(
                                  value.data['regularMarketTime'] * 1000)
                              .toString() +
                          ' (${value.data['timezone']})',
                      textScaleFactor: .8,
                    ),
                    trailing: Text(
                        value.data['regularMarketPrice'].toString() + ' \$'),
                    onTap: () =>
                        _dialogMap(context, 'Map $title', _currencys[index]),
                    onLongPress: () =>
                        _dialogList(context, 'List $title', _currencys[index]),
                  );
                },
              );
            },
          ),
        ),
      ),
    );
  }

  void _dialogList(BuildContext context, String title, String currency) {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('Cierres $title'),
        content: ApiListBuilder<double>(
          url:
              'chart/$currency=X?includePrePost=false&interval=1m&corsDomain=finance.yahoo.com&.tsrc=finance',
          dataPath: 'chart/result/indicators/quote/close',
          builder: (data) {
            List<Widget> list = [];

            for (var i = 0; i < data.items.length; i++) {
              var item = data.items[i];
              if (item == null) continue;
              if (i > 0 && data.items[i - 1] == item) continue;
              list.add(ListTile(
                trailing: Text(item.toString()),
              ));
            }

            return Scrollbar(
              child: SingleChildScrollView(child: Column(children: list)),
            );
          },
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: Text('OK'),
          ),
        ],
      ),
    );
  }

  void _dialogMap(BuildContext context, String title, String currency) {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text(title),
        content: ApiMapBuilder<String, dynamic>(
          url:
              'chart/$currency=X?includePrePost=false&interval=1m&corsDomain=finance.yahoo.com&.tsrc=finance',
          dataPath: 'chart',
          builder: (data) {
            List<Widget> list = [];

            var timestamps =
                List.castFrom<dynamic, int>(data.map['result'][0]['timestamp']);
            var quotes = List.castFrom<dynamic, double>(
                data.map['result'][0]['indicators']['quote'][0]['close']);

            for (var i = 0; i < timestamps.length; i++) {
              var time =
                  DateTime.fromMillisecondsSinceEpoch(timestamps[i] * 1000);
              list.add(ListTile(
                title: Text(
                  time.toString(),
                  textScaleFactor: .8,
                ),
                trailing: Text(
                    (quotes[i] == null ? '-' : quotes[i].toStringAsFixed(4)) +
                        ' \$'),
              ));
            }

            return Scrollbar(
              child: SingleChildScrollView(child: Column(children: list)),
            );
          },
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: Text('ACEPTAR'),
          ),
        ],
      ),
    );
  }
}
13
likes
90
pub points
22%
popularity

Publisher

unverified uploader

A REST API Connector, you can connect your Flutter Project to any endpoint easily.

Repository (GitHub)
View/report issues

Documentation

API reference

License

unknown (LICENSE)

Dependencies

flutter, flutter_web_plugins, http

More

Packages that depend on flutter_api