Я создал список веб-страниц для использования в просмотре страниц. Первый запуск работает хорошо. Ошибка возникает, если экран запускается во второй раз.
Я считаю, что решение состоит в том, чтобы уничтожить веб-просмотр в методе dispose (), но я не знаю, как это сделать.
Future<Null> getDetails() async {
var _sharedPreferences = await SharedPreferences.getInstance();
_userId = _sharedPreferences.getInt('USERID') ?? 0;
final String url =
'$URL_SONGS/readSongs.php?song=${widget.songid}&order=${widget.orderid}&playlist=${widget.playlistid}&singer=${_userId}';
final mapResponse = await http.get(url);
final responseJson = json.decode(mapResponse.body);
setState(() {
for (var i = 0; i < _songDetails.length; i++) {
_pagesContainer.add(_pages(i));
}
});
}
_pages(int index) {
return SingleChildScrollView(
controller: _scrollController,
child: Container(
height: MediaQuery.of(context).size.height * 2,
width: MediaQuery.of(context).size.width,
child: WebView(
key: UniqueKey(),
initialUrl: '${URL_VIEW_SONG}?id=${_songDetails[index].songId}',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_webviewController.complete(webViewController);
},
// TODO(iskakaushik): Remove this when collection literals makes it to stable.
// ignore: prefer_collection_literals
javascriptChannels: <JavascriptChannel>[].toSet(),
onPageStarted: (String url) {
print('Page started loading: $url');
print(
'${_songDetails[index].songId} name: ${_songDetails[index].name} index: ${index}');
},
onPageFinished: (String url) {
print('Page finished loading: $url');
print(
'${_songDetails[index].songId} name: ${_songDetails[index].name} index: ${index}');
},
gestureNavigationEnabled: true,
),
),
);
}
![enter image description here](https://i.stack.imgur.com/eur3N.png)