Флаттер: оборачивать PageViews без ограничений по размеру в ListViews? - PullRequest
0 голосов
/ 20 октября 2018

Is:

В приведенном ниже коде пример с GridView на верхнем уровне работает, но не с ListView.

Требуется:

Я пытаюсь понять, что это scrollable page, в котором есть число Containers, а затем PageView в конце, в котором есть два GridViews вit.

Все Widgets в этом сценарии должны сжиматься до их содержимого / потомков, поэтому я также не могу использовать GridView на верхнем уровне.Это наиболее важно для структуры PageView -> GridView.

Вопросы:

Почему пример ListView не работает, а пример GridView работает?Как я мог реализовать желаемый сценарий, описанный выше?

Спасибо за ваше внимание.

import "package:flutter/material.dart";

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: MyHomePage() /* MyHomePage2() */,
      );
    }
}

class MyHomePage extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: GridView(
          scrollDirection: Axis.vertical,
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 1,
          ),
          children: [
            GridView.builder(
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 2,
              ),
              itemCount: 10,
              itemBuilder: (context, item) {
                return Text("I am a text in a GridView in a GridView.");
              },
            ),
            PageView.builder(
              itemBuilder: (context, item) {
                return GridView.builder(
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    crossAxisCount: 2,
                  ),
                  itemCount: 10,
                  itemBuilder: (context, item) {
                    return Text("I am text in a GridView in a PageView in a GridView.");
                  },
                );
              },
              itemCount: 2,
            )
          ]
        )
      );
    }
}

class MyHomePage2 extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return Scaffold(
        body: ListView(
          scrollDirection: Axis.vertical,
          children: [
            GridView.builder(
              gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                crossAxisCount: 2,
              ),
              itemCount: 10,
              itemBuilder: (context, item) {
                return Text("I am a text in a GridView in a ListView.");
              },
            ),
            PageView.builder(
              itemBuilder: (context, item) {
                return GridView.builder(
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    crossAxisCount: 2,
                  ),
                  itemCount: 10,
                  itemBuilder: (context, item) {
                    return Text("I am text in a GridView in a PageView in a ListView.");
                  },
                );
              },
              itemCount: 2,
            )
          ]
        )
      );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...