Горизонтальная страница внутри вертикальной страницы в флаттере - PullRequest
0 голосов
/ 17 февраля 2020

Я создал 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};
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...