【发布时间】:2021-06-22 23:12:58
【问题描述】:
你好,任何人都知道如何在从 api 加载数据之前处理空异常我有一个应用程序,它在加载之前从 api 加载数据显示给我。这个错误
The getter 'length' was called on null.
Receiver: null
Tried calling: length
当加载数据时,错误将消失请帮助我在未加载数据之前如何使用进度条栏我试图从 api 获取数据当 api 获取数据时它在 List userdata 变量中传递数据并调用小部件 webview 问题是在加载它之前显示长度'在加载它工作正常后被调用为 null 请检查我的代码并帮助我
这是我的代码
import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:youtube_player_flutter/youtube_player_flutter.dart';
class Media extends StatefulWidget {
@override
_MediaState createState() => _MediaState();
}
class _MediaState extends State<Media> {
void initState() {
getData();
super.initState();
}
bool _loading=true;
Map data;
List userData=null;
Future getData() async {
http.Response response = await http.get("https://livinghopemobile.com/public/api/fetch-livetv?token=123ab_@_@AbCD");
data = json.decode(response.body);
debugPrint(response.body);
setState(() {
userData = data["data"];
_loading=false;
// print(userData[0]['title']);
});
}
@override
Widget build(BuildContext context) {
return Mediaplayer();
}
Mediaplayer() {
final Completer<WebViewController> _controller = Completer<WebViewController>();
var url =userData[0]['link'];
String externalurl = '''
<!doctype html>
<html>
<head>
<link href="https://vjs.zencdn.net/7.10.2/video-js.css" rel="stylesheet" />
<!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
</head>
<body>
<center>
<video
id="my-video"
class="video-js vjs-big-play-centered"
controls
preload="auto"
width="1000"
height="400"
poster="http://lhtvapp.com/click.png"
data-setup="{}"
>
<source src="$url" type="application/x-mpegURL"/>
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a
web browser that
<a href="https://videojs.com/html5-video-support/" target="_blank"
>supports HTML5 video</a
>
</p>
</video>
</center>
<script src="https://vjs.zencdn.net/7.10.2/video.min.js"></script>
</body>
</body>
</html
''';
if (url.contains('.mp4')||url.contains('.m3u8')) {
return
_loading?Center(
child:CircularProgressIndicator(),
):
Container(
child: WebView(
initialUrl: Uri.dataFromString(externalurl , mimeType: 'text/html').toString(),
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
),
);
}
else if(url.contains('https://www.youtube.com/')){
String videoID= YoutubePlayer.convertUrlToId(url);
String youtube = '''
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdn.plyr.io/3.6.2/plyr.css" />
<script src="https://cdn.plyr.io/3.6.2/plyr.polyfilled.js"></script>
<style>
.container {
margin: 20px auto;
max-width: 100%;
}
</style>
</head>
<body>
<div class="container">
<div id="player" data-plyr-provider="youtube" data-plyr-embed-id="$videoID"></div>
</div>
<script src="path/to/plyr.js"></script>
<script>
const player = new Plyr('#player');
</script>
</body>
</html>
''';
return
_loading?Center(
child:CircularProgressIndicator(),
):
Container(
child: WebView(
initialUrl: Uri.dataFromString(youtube , mimeType: 'text/html').toString(),
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller.complete(webViewController);
},
),
);
}
}
}
【问题讨论】: