Флаттер: оборачивать PageViews без ограничений по размеру в ListViews?

Является:

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

В розыске:

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

Все 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,
            )
          ]
        )
      );
    }
}

0 ответов

Другие вопросы по тегам