Перетаскиваемый прокручиваемый лист Flutter - PullRequest
1 голос
/ 04 августа 2020

кто-нибудь знает, почему мой перетаскиваемый лист с прокруткой не работает или почему я его не вижу? Я пробовал по-другому, это сработало, но SafeArea-Widget я не использовал,

import 'package:flutter/material.dart';
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: Size.fromHeight(100.0),
        child: AppBar(
          //AppBar
      ),
      body: SafeArea(
        child: ListView(
          children: <Widget>[
            Padding(
              padding: EdgeInsets.only(left: 20),
              child: Text(
                dateday,
                style: TextStyle(
                  color: Color(0xff2C8E5D),
                  fontSize: 150,
                ),
              ),
            ),
            SizedBox.expand(
              child: DraggableScrollableSheet(builder:
                  (BuildContext context, ScrollController scrollController) {
                return Container(
                  color: Colors.red,
                  child: ListView.builder(
                      controller: scrollController,
                      itemCount: 25,
                      itemBuilder: (BuildContext context, int index) {
                        return ListTile(title: Text("Item $index"));
                      }),
                );
              }),
            ),
          ],
        ),
      ),
    );
  }
}

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Замените ListView на Stack:

body: SafeArea(
        child: Stack(
          children: <Widget>[
            Padding(
              padding: EdgeInsets.only(left: 20),
              child: Text(
                dateday,
                style: TextStyle(
                  color: Color(0xff2C8E5D),
                  fontSize: 150,
                ),
              ),
            ),
            SizedBox.expand(
              child: DraggableScrollableSheet(
                  builder:
                  (BuildContext context, ScrollController scrollController) {
                return Container(
                  color: Colors.red,
                  child: ListView.builder(
                      controller: scrollController,
                      itemCount: 25,
                      itemBuilder: (BuildContext context, int index) {
                        return ListTile(title: Text("Item $index"));
                      }),
                );
              }),
            ),
          ],
        ),
      ),
0 голосов
/ 05 августа 2020

Вы можете использовать LayoutBuilder и BoxConstraints для предоставления height и использовать Expanded flex для управления областью прокрутки DraggableScrollableSheet
фрагмент кода

SafeArea(
  child: LayoutBuilder(builder: (context, constraints) {    
    return ConstrainedBox(
      constraints: BoxConstraints(maxWidth: constraints.maxWidth),
      child: Column(
        children: <Widget>[
          Expanded(
            flex: 1,
            child: Padding(
              padding: EdgeInsets.only(left: 20),
              child: Text(
                "dateday",
          ...
          Expanded(
            flex: 3,
            child: SizedBox.expand(

рабочая демонстрация

введите описание изображения здесь

полный код

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('DraggableScrollableSheet'),
        ),
        body: SafeArea(
          child: LayoutBuilder(builder: (context, constraints) {
            print(constraints.maxWidth);
            print(constraints.minWidth);
            return ConstrainedBox(
              constraints: BoxConstraints(maxWidth: constraints.maxWidth),
              child: Column(
                children: <Widget>[
                  Expanded(
                    flex: 1,
                    child: Padding(
                      padding: EdgeInsets.only(left: 20),
                      child: Text(
                        "dateday",
                        style: TextStyle(
                          color: Color(0xff2C8E5D),
                          fontSize: 150,
                        ),
                      ),
                    ),
                  ),
                  Expanded(
                    flex: 3,
                    child: SizedBox.expand(
                      child: DraggableScrollableSheet(builder:
                          (BuildContext context,
                              ScrollController scrollController) {
                        return Container(
                          color: Colors.red,
                          child: ListView.builder(
                              controller: scrollController,
                              itemCount: 25,
                              itemBuilder: (BuildContext context, int index) {
                                return ListTile(title: Text("Item $index"));
                              }),
                        );
                      }),
                    ),
                  ),
                ],
              ),
            );
          }),
        ));
  }
}
...