【问题标题】:How to divide a webpage into 3 scrollable parts using flutter?如何使用颤振将网页分成 3 个可滚动部分?
【发布时间】:2021-05-21 16:43:59
【问题描述】:

我有一张显示三个灰色滚动条的图像的屏幕截图。你如何使用颤振重新创建它。

【问题讨论】:

  • 您的屏幕截图已损坏。

标签: flutter dart flutter-layout flutter-web


【解决方案1】:

这是你要找的吗?

如果是,您可以使用包含ListViewsGridViewsSingleChildScrollViews 或其他可滚动小部件的Row 来实现。

您会看到我将ListViewsGridView 嵌入到ScrollBar 小部件中。我还将ScrollController 关联到Scrollbars 和关联的ListViewGridView,并将ScrollBar 定义为isAlwaysShown: true

完整的源代码,方便复制粘贴

import 'dart:math' show Random;

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';

void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      home: HomePage(),
    ),
  );
}

class HomePage extends HookWidget {
  @override
  Widget build(BuildContext context) {
    final random = Random();
    final _leftScrollController = useScrollController();
    final _middleScrollController = useScrollController();
    final _rightScrollController = useScrollController();
    return Scaffold(
      body: Row(
        children: [
          Expanded(
            child: Scrollbar(
              controller: _leftScrollController,
              isAlwaysShown: true,
              child: ListView(
                controller: _leftScrollController,
                shrinkWrap: true,
                children: List.generate(
                  20,
                  (index) => ListTile(
                    title: Text('Left $index'),
                  ),
                ),
              ),
            ),
          ),
          Expanded(
            flex: 4,
            child: Scrollbar(
              controller: _middleScrollController,
              isAlwaysShown: true,
              child: GridView.count(
                controller: _middleScrollController,
                shrinkWrap: true,
                crossAxisCount: 4,
                mainAxisSpacing: 8.0,
                crossAxisSpacing: 8.0,
                children: List.generate(
                  20,
                  (index) => AspectRatio(
                    aspectRatio: 2 / 3,
                    child: ColoredBox(
                      color: Color(0xff555555 + random.nextInt(0x777777)),
                    ),
                  ),
                ),
              ),
            ),
          ),
          Expanded(
            child: Scrollbar(
              controller: _rightScrollController,
              isAlwaysShown: true,
              child: ListView(
                controller: _rightScrollController,
                shrinkWrap: true,
                children: List.generate(
                  30,
                  (index) => ListTile(
                    title: Text('Right $index'),
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

【讨论】:

  • 是的,这就是我要找的。它可以提供帮助。谢谢!
猜你喜欢
  • 2018-01-28
  • 2013-10-21
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 2021-03-03
  • 2014-12-09
相关资源
最近更新 更多