Как мне обернуть содержимое PageView, чтобы индикаторы отображались прямо под тем местом, где заканчивается PageView? - PullRequest
0 голосов
/ 30 апреля 2018

Как мне обернуть содержимое PageView, чтобы индикаторы появлялись прямо под тем местом, где заканчивается PageView? Прямо сейчас PageView заполняет весь экран, а индикаторы находятся внизу экрана. Ниже описано, как создается каждый дочерний элемент в PageView. У каждого ребенка у меня есть изображение с высотой по умолчанию 200 и TextView с maxLines 2. Хотя фактическая высота каждого дочернего элемента в PageView составляет половину экрана устройства, она занимает весь экран.

final List<Widget> _pages = <Widget>[
new Column(
  mainAxisSize: MainAxisSize.min,
  crossAxisAlignment: CrossAxisAlignment.start,
  children: <Widget>[
    new Image.network(
      'imageurl',
      height: 200.0,
      fit: BoxFit.fitWidth,
    ),
    new Padding(
      padding: EdgeInsets.all(20.0),
      child: new Text(
        "Order from wide range of restaurants",
        maxLines: 2,
        style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
        textAlign: TextAlign.center,
      ),
    )
  ],
),
new Column(
  mainAxisSize: MainAxisSize.min,
  crossAxisAlignment: CrossAxisAlignment.start,
  children: <Widget>[
    new Image.network(
      'imageurl',
      height: 200.0,
      fit: BoxFit.fitWidth,
    ),
    new Padding(
      padding: EdgeInsets.all(20.0),
      child: new Text(
        "Order from wide range of restaurants",
        maxLines: 2,
        style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
        textAlign: TextAlign.center,
      ),
    ),
  ],
),
new Column(
  mainAxisSize: MainAxisSize.min,
  crossAxisAlignment: CrossAxisAlignment.start,
  children: <Widget>[
    new Image.network(
      'imageurl',
      height: 200.0,
      fit: BoxFit.fitWidth,
    ),
    new Padding(
      padding: EdgeInsets.all(20.0),
      child: new Text(
        "Order from wide range of restaurants",
        maxLines: 2,
        style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
        textAlign: TextAlign.center,
      ),
    )
  ],
)
];

Метод построителя Stateful Widget

Widget build(BuildContext context) {
return new Column(
  mainAxisSize: MainAxisSize.min,
  crossAxisAlignment: CrossAxisAlignment.start,
  mainAxisAlignment: MainAxisAlignment.start,
  children: <Widget>[
    new Flexible(
      child: new PageView.builder(
        physics: new AlwaysScrollableScrollPhysics(),
        controller: _controller,
        itemCount: _pages.length,
        itemBuilder: (BuildContext context, int index) {
          return _pages[index % _pages.length];
        },
      ),
      fit: FlexFit.loose,
    ),
    new Container(
      color: Colors.black,
      padding: const EdgeInsets.all(20.0),
      child: new Center(
        child: new DotsIndicator(
          controller: _controller,
          itemCount: _pages.length,
          onPageSelected: (int page) {
            _controller.animateToPage(
              page,
              duration: _kDuration,
              curve: _kCurve,
            );
          },
        ),
      ),
    )
  ],
);
}

1 Ответ

0 голосов
/ 30 апреля 2018

Здесь мое решение, так как вы не вставили весь исходный код, я пропустил раздел точек

    import 'package:flutter/material.dart';

    class PageViewIssue extends StatefulWidget {
      PageViewIssue({Key key, this.title}) : super(key: key);

      static const String routeName = "/PageViewIssue";

      final String title;

      @override
      _PageViewIssueState createState() => new _PageViewIssueState();
    }

    class _PageViewIssueState extends State<PageViewIssue> {
      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text(widget.title),
          ),
          body: _getBodyContent(),
          floatingActionButton: new FloatingActionButton(
            onPressed: _onFloatingActionButtonPressed,
            tooltip: 'Add',
            child: new Icon(Icons.add),
          ),
        );
      }

      void _onFloatingActionButtonPressed() {}

      List<Widget> _getPageViews() {
        final String imgUrl =
            "https://images.pexels.com/photos/45201/kitty-cat-kitten-pet-45201.jpeg?auto=compress&cs=tinysrgb&h=320&w=320";
        final List<Widget> _pages = <Widget>[
          new Center(
              child: new Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              new Center(
                  child: new Image.network(
                imgUrl,
                height: 200.0,
                fit: BoxFit.fitWidth,
              )),
              new Padding(
                padding: EdgeInsets.all(20.0),
                child: new Text(
                  "Order from wide range of restaurants",
                  maxLines: 2,
                  style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
                  textAlign: TextAlign.center,
                ),
              )
            ],
          )),
          new Center(
              child: new Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              new Center(
                  child: new Image.network(
                imgUrl,
                height: 200.0,
                fit: BoxFit.fitWidth,
              )),
              new Padding(
                padding: EdgeInsets.all(20.0),
                child: new Text(
                  "Order from wide range of restaurants",
                  maxLines: 2,
                  style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
                  textAlign: TextAlign.center,
                ),
              ),
            ],
          )),
          new Center(
              child: new Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              new Center(
                  child: new Image.network(
                imgUrl,
                height: 200.0,
                fit: BoxFit.fitWidth,
              )),
              new Padding(
                padding: EdgeInsets.all(20.0),
                child: new Text(
                  "Order from wide range of restaurants",
                  maxLines: 2,
                  style: new TextStyle(fontSize: 25.0, fontWeight: FontWeight.bold),
                  textAlign: TextAlign.center,
                ),
              )
            ],
          ))
        ];

        return _pages;
      }

      Widget _getBodyContent() {
    var controller = new PageController(initialPage: 0);
    var pageView = new PageView(
        children: _getPageViews(), pageSnapping: true, controller: controller);

    var width = MediaQuery.of(context).size.width;

    var expansion1 = new Expanded(
        child:
            new Container(width: width, child: pageView, color: Colors.green),
        flex: 9);

    var expansion2 = new Expanded(
        child: new Container(
            width: width,
            child: new Center(child: new Text("Text 2")),
            color: Colors.redAccent),
        flex: 1);
    return new Column(children: <Widget>[expansion1, expansion2]);
  }
    }

То, что вы искали, это Ограниченная коробка . enter image description here

...