美国宇航局APIFlutter与pub.dev

vsnjm48y  于 2022-12-14  发布在  Flutter
关注(0)|答案(1)|浏览(103)

| 我曾经在flutter上创建了一个应用程序,但我只得到字符串,但我想在我的应用程序中有图片,我如何从这个字符串中得到图片?我已经试过了,但我没有找到一点,我可以改变程序,给予我有机会从这个字符串中获取照片

import 'package:flutter/material.dart';
import 'package:nasa_apis/nasa_apis.dart';
import 'package:tuple/tuple.dart';

class ApodScreen extends StatefulWidget {
  const ApodScreen({super.key, required this.title});

  final String title;

  @override
  State<ApodScreen> createState() => _ApodScreenState();
}

class _ApodScreenState extends State<ApodScreen> {
  static const String _widgetNasaApod = "APOD";

  String _selected = _widgetNasaApod;
  String _apodTestDescription =
      "The request will appear here.";
  List<ApodItem> _apodTestResults = <ApodItem>[];

  @override
  void initState() {
  super.initState();
  init();
  }
  void init() async {
    await Nasa.init(
        logReceiver: (String msg, String name) {
        },
        apodSupport: true,
        apodCacheSupport: true,
        apodDefaultCacheExpiration: const Duration(seconds: 20));
  }

  @override
  Widget build(BuildContext context) {
    List<Widget> widgets = <Widget>[];
    if (_selected == _widgetNasaApod) {
      widgets.add(
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
              onPressed: () async {
                _apodTestResults.clear();
                DateTime date = DateTime.now();
                Tuple2<int, ApodItem?> result =
                await NasaApod.requestByDate(date);
                _apodTestDescription =
                "requestByDate()\ndate[${date.toString()}]\nhttp response code: ${result.item1.toString()}";
                if (result.item2 != null) {
                  _apodTestResults.add(result.item2!);
                }
                setState(() {});
              },
              child: const Text("Today"),
            ),

            TextButton(
              onPressed: () async {
                _apodTestResults.clear();
                Tuple2<int, List<ApodItem>?> result =
                await NasaApod.requestByRandom(5);
                _apodTestDescription =
                "requestByRandom()\ncount[5]\nhttp response code: ${result.item1.toString()}";
                if (result.item2 != null) {
                  _apodTestResults = result.item2!;
                }
                setState(() {});
              },
              child: const Text("Random"),
            ),
            TextButton(
              onPressed: () async {
                _apodTestResults.clear();
                DateTime startDate = DateTime(2022, 10, 1);
                DateTime endDate = DateTime(2022, 10, 31);
                Tuple2<int, List<MediaType>?> result =
                (await NasaApod.requestByRange(startDate, endDate)) as Tuple2<int, List<MediaType>?>;
                _apodTestDescription =
                "requestByOctober()\n$startDate - $endDate\nhttp response code: ${result.item1.toString()}";
                if (result.item2 != null) {
                  _apodTestResults = result.item2!.cast<ApodItem>();
                }
                setState(() {});
              },
              child: const Text("October"),
            ),

          ],
        ),
      );
      widgets.add(Text(_apodTestDescription));
      for (ApodItem apodItem in _apodTestResults) {
        widgets.add(
          Padding(
            padding: const EdgeInsets.all(15),
            child: Text(
              apodItem.toString(),
            ),
          ),
        );
      }
    }
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          onPressed: (){
            Navigator.of(context).pop();
          }, icon: const BackButtonIcon(),
        ),
        title: Text(widget.title),

        ),

      body: SingleChildScrollView(
        child: Column(
          children: widgets,
        ),

      ),
    );
  }
}
anauzrmj

anauzrmj1#

查看the NASA API code,可以看到类ApodItem的定义(Here)。因此,在代码的这一部分:

for (ApodItem apodItem in _apodTestResults) {
  widgets.add(
    Padding(
      padding: const EdgeInsets.all(15),
      //Here you create a text widget
      child: Text(
        apodItem.toString(),
      ),
    ),
  );
}

使用ApodItemgetImageUrl方法将Text小部件替换为Image.network。如下所示:

for (ApodItem apodItem in _apodTestResults) {
  widgets.add(
    Padding(
      padding: const EdgeInsets.all(15),
      //Here you get the url from you APOD item and create an image widget
      child: Image.network(
        apodItem.getImageUrl(),
      ),
    ),
  );
}

getImageUrl将为您提供图像的url(或视频的缩略图,如果相关的话)。Image.network将从所述url构建小工具。

相关问题