繁体   English   中英

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

[英]Flutter: After build APK, data from API doesn't appear

我正在尝试创建一个应用程序来显示来自 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,
        );
      }));
    }
  }
}

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

<uses-permission android:name="android.permission.INTERNET"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM