首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >snapshot.hasData返回假

snapshot.hasData返回假
EN

Stack Overflow用户
提问于 2019-07-23 20:40:22
回答 2查看 5K关注 0票数 1

我正在设置一个从API获取数据的应用程序。我想添加一个连接插件来检查用户是否有互联网连接。我不熟悉地图,所以我需要一些帮助

代码语言:javascript
复制
import 'dart:convert';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_t/CONSTANTS.dart';
import 'package:flutter_t/Themes.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'package:connectivity/connectivity.dart';

final String baseurl = "http://xxx.xxx.xxx.xxx/api/v1";
final String imgurl = "http://xxx.xxx.xxx.xxx";



class Specializationgrid extends StatefulWidget {
  @override
  SpecializationgridState createState() => SpecializationgridState();
}

class SpecializationgridState extends State<Specializationgrid> {

  var _connectionStatus = 'Unknown';
  Connectivity connectivity;
  StreamSubscription<ConnectivityResult> subscription;


  List<dynamic> datas =[];


  @override
  void initState() {
    super.initState();
    connectivity = new Connectivity();
    subscription = connectivity.onConnectivityChanged
        .listen((ConnectivityResult result){

      if (result == ConnectivityResult.mobile || result == ConnectivityResult.wifi
      ) {
        setState(() {});
      }
    });


  }

  @override
  void dispose() {
    subscription.cancel();
    super.dispose();

  }


  Future<String> getSpecialData() async{

      var res = await http.get(Uri.encodeFull(baseurl+"/specialization"),headers: {"Accept": "application/json"});
      if (res.statusCode == HttpStatus.OK) {
        var result = json.decode(res.body);
        setState(() { });
       return result;
      }


//    return "Success!";

  }
  @override
  Widget build(BuildContext context) {

    var stateRoutes = ["await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),)"
        'await Navigator.push(context,new MaterialPageRoute( builder: (context) = labTest(),),),await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),'
        'await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),'
        'await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),'
        'await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),await Navigator.push(context,new MaterialPageRoute( builder: (context) = doctors(),),),'
       ];

    return Padding(
      padding: const EdgeInsets.symmetric(horizontal:15.0),
      child: FutureBuilder(
        future: getSpecialData(),
        builder: (context, snapshot){
          print('snapshot: $snapshot');
          if (snapshot.hasData)
            {
              var datas = snapshot.data;
              return new GridView.builder(
                gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3,mainAxisSpacing: 0,crossAxisSpacing: 0),
                itemCount: datas == null ? 0 : datas.length,
                shrinkWrap: true,
                physics: const NeverScrollableScrollPhysics(),
                itemBuilder: (BuildContext context, int index){
                  return Container(
                    child: InkWell(
                        splashColor: Colors.pinkAccent,

                        child: Column(

                          crossAxisAlignment: CrossAxisAlignment.center,
                          mainAxisAlignment: MainAxisAlignment.center,
                          mainAxisSize: MainAxisSize.min,
                          children: <Widget>[

                            Card(
                              elevation: 0,
                              child: Container(

                                child: Image.network(imgurl +datas[index]['img'],width: 50,height: 50,),
                              ),
                            ),
                            Card(
                              elevation: 0,
                              child: Container(
                                child: Text(datas[index]['title'],style: specializationTextStyle,softWrap: true,),
                              ),
                            )
                          ],
                        ),
                        onTap: () async{
                          // ignore: unnecessary_statements
                          stateRoutes[index];

                          /* if(navigationResult == true)
                      {
                        return null;
                      }*/
                        }
                    ),
                  );
                },

              );
            }
          else
            {
              return Padding(
                padding: const EdgeInsets.symmetric(vertical: 100),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  mainAxisSize: MainAxisSize.max,
                  children: <Widget>[
                    Center(
                      child: new CircularProgressIndicator(),
                    ),
                    SizedBox(height: 50,),
                    Text('No internet connectivity')
                  ],
                ),
              );
            }
        },

      ),
    );


    }

}



Flutter Doctor

jake@jake:~/Downloads/OpTicket$ flutter doctor -v
[✓] Flutter (Channel unknown, v1.2.1, on Linux, locale en_IN)
    • Flutter version 1.2.1 at /home/jake/Downloads/flutter
    • Framework revision 8661d8aecd (5 months ago), 2019-02-14 19:19:53 -0800
    • Engine revision 3757390fa4
    • Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /home/jake/Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling
      support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /home/jake/Downloads/android-studio/jre/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_152-release-1343-b16-5323222)
    • All Android licenses accepted.

[✓] Android Studio (version 3.4)
    • Android Studio at /home/jake/Downloads/android-studio
    • Flutter plugin version 37.0.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build
      1.8.0_152-release-1343-b16-5323222)

[✓] Connected device (1 available)
    • ONEPLUS A6000 • 56390e16 • android-arm64 • Android 9 (API 28)

• No issues found!

错误:

快照: AsyncSnapshot(ConnectionState.waiting,null,错误:键入'_InternalLinkedHashMap‘不是’FutureOr‘的子类型)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-24 08:43:55

我修好了!我的getSpecialData()的返回类型是在未来中给出的,但是我的json文件是一个映射,所以我不得不将返回类型更改为未来。

票数 0
EN

Stack Overflow用户

发布于 2019-07-23 20:55:44

你不能把东西还给我

代码语言:javascript
复制
 if (res.statusCode =! HttpStatus.OK)

在getSpecialData()中。

因为您是专门为这种情况编写代码的,所以您将获得null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57171870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档