首页 > 解决方案 > 当我使构建版本颤动时,http请求停止

问题描述

我的应用程序有问题,当我在模拟器中运行时,一切正常。就在我构建apk时,应用程序停止从 API URL 获取数据,我尝试使用调试版本,一切正常。所以发布版本的问题。当然,我在 Android 清单文件中拥有 Internet 权限。我正在使用package:dio/dio.dart处理 HTTP 请求

飞镖代码

import 'package:caro_app/restaurant.dart';
import 'package:caro_app/screens/FadeAnimation.dart';
import 'package:caro_app/screens/restaurant.dart';
import 'package:dio/dio.dart' as http_dio;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'card.dart';

class HomePageApp extends StatefulWidget {
  @override
  _HomePageAppState createState() => _HomePageAppState();
}

class _HomePageAppState extends State<HomePageApp> {
  Future<List<Restaurant>> _getRestaurantDio() async {
    http_dio.Dio dio = http_dio.Dio();
    http_dio.Response response = await dio
        .get("myurl");
    List data = response.data;
    return data.map((e) => Restaurant.fromJson(e)).toList();
  }

  List<Food> food = [];
  int sum = 0;
  bool isDone = false;
  List<Restaurant> allRestaurant = [];
  @override
  void initState() {
    super.initState();
    getData();
  }

  getData() async {
    allRestaurant = await _getRestaurantDio();
    isDone = true;
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 0,
        backgroundColor: Colors.transparent,
        leading: Container(
          child: Icon(
            Icons.menu,
            color: Colors.orange,
          ),
        ),
        title: Text(
          "Bogota",
          style: TextStyle(color: Colors.white, fontSize: 25),
        ),
        brightness: Brightness.light,
        actions: <Widget>[
          IconButton(
            icon: Icon(
              Icons.notifications_none,
              color: Colors.orange,
            ),
            onPressed: () {},
          ),
          IconButton(
            icon: Icon(
              Icons.shopping_cart,
              color: Colors.orange,
            ),
            onPressed: () {
              Route route =
                  MaterialPageRoute(builder: (context) => CartScreen());
              Navigator.push(context, route);
            },
          )
        ],
      ),
      body: Stack(
        children: <Widget>[
          Container(
            child: Container(
              height: 40,
              child: ListView(
                scrollDirection: Axis.horizontal,
                children: <Widget>[
                  AspectRatio(
                    aspectRatio: 2.2 / 1,
                    child: FadeAnimation(
                        1,
                        Container(
                          margin: EdgeInsets.only(right: 10),
                          decoration: BoxDecoration(
                              color: Colors.grey[200],
                              borderRadius: BorderRadius.circular(20)),
                          child: Center(
                            child: Text(
                              "All",
                              style:
                                  TextStyle(fontSize: 20, color: Colors.orange),
                            ),
                          ),
                        )),
                  ),
                  AspectRatio(
                    aspectRatio: 2.2 / 1,
                    child: FadeAnimation(
                        1.1,
                        Container(
                          margin: EdgeInsets.only(right: 10),
                          child: Center(
                            child: Text(
                              "Shaorma",
                              style:
                                  TextStyle(fontSize: 17, color: Colors.orange),
                            ),
                          ),
                        )),
                  ),
                  AspectRatio(
                    aspectRatio: 2.2 / 1,
                    child: FadeAnimation(
                        1.2,
                        Container(
                          margin: EdgeInsets.only(right: 10),
                          child: Center(
                            child: Text(
                              "Falafel",
                              style:
                                  TextStyle(fontSize: 17, color: Colors.orange),
                            ),
                          ),
                        )),
                  ),
                  AspectRatio(
                    aspectRatio: 2.2 / 1,
                    child: FadeAnimation(
                        1.3,
                        Container(
                          margin: EdgeInsets.only(right: 10),
                          child: Center(
                            child: Text(
                              "Burger",
                              style:
                                  TextStyle(fontSize: 17, color: Colors.orange),
                            ),
                          ),
                        )),
                  ),
                  AspectRatio(
                    aspectRatio: 2.2 / 1,
                    child: FadeAnimation(
                        1.4,
                        Container(
                          margin: EdgeInsets.only(right: 10),
                          child: Center(
                            child: Text(
                              "Pizza",
                              style:
                                  TextStyle(fontSize: 17, color: Colors.orange),
                            ),
                          ),
                        )),
                  ),
                ],
              ),
            ),
          ),
          Container(
            child: Container(
              width: MediaQuery.of(context).size.width,
              height: MediaQuery.of(context).size.height,
              padding: EdgeInsets.only(
                  left: 8.0, right: 8.0, top: 75.0, bottom: 0.0),
              child: FutureBuilder(
                future: _getRestaurantDio(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  print(snapshot.data);
                  if (snapshot.data == null) {
                    return Container(
                      child: Center(
                        child: Text('Loading..',style: TextStyle(color:Colors.white),),
                      ),
                    );
                  } else {
                    List<Restaurant> restaurant = snapshot.data;
                    return GridView.builder(
                      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                          crossAxisCount: 1),
                      itemCount: snapshot.data.length,
                      itemBuilder: (BuildContext context, int index) {
                        return Container(
                          child: InkWell(
                            onTap: () {
                              Navigator.push(
                                  context,
                                  new MaterialPageRoute(
                                      builder: (context) => ItemScreen(
                                          user: restaurant[index],
                                          valueSetter: (selectedProducts) {
                                            setState(() {
                                              restaurant
                                                  .add(snapshot.data[index]);
                                              sum = 0;
                                              food.forEach((item) {
                                                sum = sum + item.price;
                                                print(sum);
                                              });
                                            });
                                          })));
                            },
                            child: FadeAnimation(
                              1,
                              Container(
//                                height: 250,
                                width: double.infinity,
                                padding: EdgeInsets.all(20),
                                margin: EdgeInsets.only(bottom: 20),
                                decoration: BoxDecoration(
                                  borderRadius: BorderRadius.circular(20),
                                  image: DecorationImage(
                                      image:
                                          NetworkImage(restaurant[index].img),
                                      fit: BoxFit.cover),
                                ),
                                child: Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: <Widget>[
                                    Row(
                                      crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                      children: <Widget>[
                                        Expanded(
                                          child: Column(
                                            crossAxisAlignment:
                                                CrossAxisAlignment.start,
                                            children: <Widget>[
                                              FadeAnimation(
                                                  1,
                                                  Text(
                                                    restaurant[index].name,
                                                    style: TextStyle(
                                                        color: Colors.orange,
                                                        fontSize: 30,
                                                        fontWeight:
                                                            FontWeight.bold),
                                                  )),
                                              SizedBox(
                                                height: 10,
                                              ),
                                              FadeAnimation(
                                                  1.1,
                                                  Container(
                                                      padding:
                                                          EdgeInsets.all(8),
                                                      decoration: BoxDecoration(
                                                          color: Colors.orange,
                                                          borderRadius:
                                                              BorderRadius
                                                                  .circular(
                                                                      20)),
                                                      child: Text(
                                                        restaurant[index]
                                                            .family,
                                                        style: TextStyle(
                                                            color: Colors.white,
                                                            fontSize: 20),
                                                      ))),
                                            ],
                                          ),
                                        ),
                                        FadeAnimation(
                                            1.2,
                                            Container(
                                              width: 35,
                                              height: 35,
                                              decoration: BoxDecoration(
                                                  shape: BoxShape.circle,
                                                  color: Colors.orange),
                                              child: Center(
                                                child: Icon(
                                                  Icons.favorite_border,
                                                  size: 20,
                                                  color: Colors.white,
                                                ),
                                              ),
                                            ))
                                      ],
                                    ),
                                    FadeAnimation(
                                        1.2,
                                        Container(
                                            child: Container(
                                          padding: EdgeInsets.all(9),
                                          width: 200,
                                          decoration: BoxDecoration(
                                              color: Colors.deepOrange,
                                              borderRadius:
                                                  BorderRadius.circular(20)),
                                          child: Row(
                                            children: <Widget>[
                                              Icon(Icons.location_on),
                                              SizedBox(
                                                width: 10,
                                              ),
                                              Text(
                                                restaurant[index].city,
                                                style: TextStyle(
                                                    color: Colors.white,
                                                    fontSize: 30,
                                                    fontWeight:
                                                        FontWeight.bold),
                                              ),
                                            ],
                                          ),
                                        ))),
                                  ],
                                ),
                              ),
                            ),
                          ),
                        );
                      },
                    );
                  }
                },
              ),
            ),
          ),
        ],
      ),
    );
  }
}

class User {
  final String name;
  final String family;
  final String city;
  final String img;
  List<String> food;

  User(this.name, this.family, this.city, this.img);
}

标签: androidflutterdart

解决方案


将互联网权限添加到 android 文件夹内的 Manifest 文件,如果您从非 https 地址获取数据,则将使用明文流量设为真实;

<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

推荐阅读