Flutter:构建APK之后,API的数据不会出现

问题描述 投票:2回答:1

我正在尝试创建一个显示一些来自API的数据的应用。问题是,尽管App在使用模拟器或智能手机的调试模式下运行良好,但未显示任何错误。如果我构建APK,则该应用不会下载数据或至少不会显示数据。我该如何解决这个问题?

更多详细信息:

  • 我建立了APK多次
  • 我在三个不同品牌的智能手机中安装了APK
import 'dart:convert';

import 'package:apiitest2/models/Obj.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;


class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  List<Obj> dataDef = List<Obj>();

  void getData() {
    List<Obj> dataDef0 = List<Obj>();
    http.get(Uri.encodeFull("https://jsonplaceholder.typicode.com/posts"),
        headers: {"Accept": "application/json"}).then((resp) {
      List data = json.decode(resp.body);
      for (var item in data) {
        Obj obj = Obj(item["userId"], item["id"], item["title"], item["body"]);
        dataDef0.add(obj);
      }
      setState(() {
        dataDef = dataDef0;
      });
    });//.catchError((onError){});
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: CustomScrollView(slivers: <Widget>[
          SliverAppBar(
            backgroundColor: Colors.red,
            floating: false,
            pinned: true,
            expandedHeight: 200.0,
            flexibleSpace: FlexibleSpaceBar(
                centerTitle: true,
                title: Text(
                  "Title",
                  style: TextStyle(
                    color: Colors.black87,
                    fontSize: 20.0,
                    fontWeight: FontWeight.bold,
                  ),
                ),
                background: Container(
                  color: Colors.amber,
                )
            ),
          ),
          body()
        ]
        )
    );
  }

  Widget body() {
    if (dataDef.isEmpty)
      return SliverToBoxAdapter(
          child: SizedBox(
            height: MediaQuery.of(context).size.height - 200,
            child: Center(
                child: Container(
                    height: 70,
                    width: 70,
                    child: CircularProgressIndicator()
                )
            ),
          )
      );
    else {
      return SliverList(delegate:
      SliverChildBuilderDelegate((BuildContext context, int index) {
        if (index > dataDef.length - 1) return null;
        return Container(
          child: Text(dataDef[index].title),
          height: 50,
        );
      }));
    }
  }
}
android json api flutter apk
1个回答
1
投票

您面临的问题,因为当您处于调试模式时,调试模式具有默认情况下具有互联网许可的Android清单文件,但是src中有一个主文件夹,其中还有另一个清单文件您未授予Internet权限的位置。正如MePo所说,您应该授予互联网许可

<uses-permission android:name="android.permission.INTERNET"/>
© www.soinside.com 2019 - 2024. All rights reserved.