Я создал Two pages
горизонтального просмотра. - Первая страница - это значение API. Вертикальный просмотр страницы. - Вторая страница - подробный вид.
Проблема заключается в вертикальной прокрутке страницы до двух или трех страниц. затем горизонтальный просмотр страницы до второй страницы. затем снова горизонтальная прокрутка просмотра первой позиции, вертикальная позиция просмотра страницы автоматически обновляется проблема. как решить ??
class MyPageView extends StatefulWidget {
MyPageView({Key key}) : super(key: key);
_MyPageViewState createState() => _MyPageViewState();
}
class _MyPageViewState extends State<MyPageView> {
List<News> _list = List<News>();
PageController _pageController;
@override
void initState() {
super.initState();
_pageController = PageController();
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
Future<List<News>> fetchNews() async {
//Use your own api key if this stops working
final response = await http.get(
'https://newsapi.org/v2/top-headlines?country=in&apiKey=f8c15ba22b0b4ec08dd9f84c3480d709');
Map map = json.decode(response.body);
final responseJson = json.decode(response.body);
//print(map['articles'][0]);
//print(responseJson['articles'][1]);
for (int i = 0; i < map['articles'].length; i++) {
if (map['articles'][i]['author'] != null) {
_list.add(News.fromJson(map['articles'][i]));
}
}
return _list;
}
@override
Widget build(BuildContext context) {
var futureBuilder = new FutureBuilder(
future: fetchNews(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
//return new Text('loading...');
default:
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
else
return _buildPageViewContainer(context, snapshot);
}
},
);
return MaterialApp(
home: Scaffold(
body: PageView(
controller: _pageController,
children: <Widget>[
futureBuilder,
Container(
color: Colors.white,
child: Container(
child: Padding(
padding: EdgeInsets.all(4.0),
child: Center(
child: Text("Hiii", style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold, fontSize: 24.0),)
),
),
),
)
],
),
),
);
}
Widget _buildPageViewContainer(BuildContext context, AsyncSnapshot snapshot){
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: PageView.builder(
controller: _pageController,
itemBuilder: (context, position) {
return _buildPage(context, position);
},
scrollDirection: Axis.vertical,
itemCount: _list.length,
),
),
]
);
}
Widget _buildPage(BuildContext context, int index) {
return Container(
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16.0),
),
elevation: 10,
child: Column(children: <Widget>[
Container(
child: Padding(
padding: EdgeInsets.all(4.0),
child: Image.network(
'${_list[index].urlToImage}',
),
),
),
Container(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text(
'${_list[index].title}',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20.0),
),
),
),
Container(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text(
'${_list[index].description}',
softWrap: true,
overflow: TextOverflow.fade,
)),
),
]),
),
);
}
}
class News {
Source source;
String author;
String title;
String description;
String url;
String urlToImage;
String publishedAt;
News({this.source, this.author, this.title, this.description, this.url, this.urlToImage, this.publishedAt});
factory News.fromJson(Map<String, dynamic> json){
return new News(
// source: (json['source'] as List)
// ?.map((e) =>
// e == null ? null : new Source.fromJson(e as Map<String, dynamic>))
// ?.toList(),
source: new Source.fromJson(json['source']),
author: json['author'],
title: json['title'],
description: json['description'],
url: json['url'],
urlToImage: json['urlToImage'],
publishedAt: json['publishedAt']
);
}
}
class Source{
String name;
String id;
Source({this.name, this.id});
factory Source.fromJson(Map<String, dynamic> json){
return new Source(name: json['name'],
id: json['id']);
}
Map<String, dynamic> toJson() =>
<String, dynamic>{'name': name, 'id': id};
}