我正在设置一个从API提取数据的应用程序。我想添加一个连接插件,以检查用户是否具有Internet连接。我对地图不熟悉,所以我需要一些帮助
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,Error :type'_InternalLinkedHashMap'不是的子类型 输入“ FutureOr”)。
答案 0 :(得分:0)
您不为之退货
if (res.statusCode =! HttpStatus.OK)
在getSpecialData()中。
由于您是专门针对这种情况编写的,因此您将获得null
答案 1 :(得分:0)
我已修复!我的getSpecialData()的返回类型在Future中给出,但是我的json文件是Map,因此我不得不将Return Type更改为Future。