Невозможно добавить вертикальную линию в flutter

#flutter #layout

#flutter #макет

Вопрос:

У меня следующий макет

 Form(
  onChanged: _updateFormProgress,
  child: Row(       
    children: [
      Expanded(
        flex: 3,
        child: Column(
          children: [
            ....
          ],
        ),
      ),
      Expanded(
        flex: 2,
        child: Column(
          children: [
            ...
          ],
        ),
      )
    ],
  ),
);
  

Мне нужна вертикальная разделительная линия между двумя Expanded

Я пытался:

 Form(
  onChanged: _updateFormProgress,
  child: Row(       
    children: [
      Expanded(
        flex: 3,
        child: Column(
          children: [
            ....
          ],
        ),
      ),
      Container(
        child: VerticalDivider(
          color: Colors.red,
          width: 1,
        )
      ),
      Expanded(
        flex: 2,
        child: Column(
          children: [
            ...
          ],
        ),
      )
    ],
  ),
);
  

И он компилируется, но я не вижу строки. Я также пробовал другие варианты, такие как обертывание развернутого в контейнере и создание границы, но с этим возникли разные проблемы

Ответ №1:

Я изменил код, подобный дереву, которое вы предоставляете, и изменил его, чтобы он работал.

Пожалуйста, оберните ‘Row’ ‘IntrinsicHeight’.

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

Я приложил полный код, который я тестировал.

 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> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: EdgeInsets.all(10),
        child: Center(
          child: Column(
            children: [
              Container(
                child: Form(
                  onChanged: () {},
                  child: IntrinsicHeight(
                    child: Row(
                      children: [
                        Expanded(
                          flex: 3,
                          child: Column(
                            children: [
                              Container(child: Text('a')),
                              Container(child: Text('a')),
                              Container(child: Text('a')),
                            ],
                          ),
                        ),
                        Container(
                          child: VerticalDivider(
                            color: Colors.red,
                            width: 1,
                          ),
                        ),
                        Expanded(
                          flex: 2,
                          child: Column(
                            children: [
                              Container(child: Text('a')),
                              Container(child: Text('a')),
                              Container(child: Text('a')),
                            ],
                          ),
                        )
                      ],
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}


  

Комментарии:

1. Я не вижу этого в своем примере, может быть, то, что его переносит, вызывает проблему? Это полезно знать, поэтому я знаю, где не искать. Спасибо

2. Дерево имеет вид < Контейнер < Столбец < Центр < Заполнение < Каркас . Если я делаю Form < Center < Padding < Scaffold, тогда это работает. Возможно, проблема во вложенных столбцах

3. @user3808307 Я изменил код, подобный дереву, которое вы предоставляете, и изменил его, чтобы он работал.

4. Спасибо, это сработало! Мне действительно понравился flutter, но если мне потребуется несколько часов, чтобы просто добавить строку, я думаю, я мог бы вернуться к react или что-то в этом роде

5. Это мое удовольствие. Скорее, я хочу сказать «Спасибо» через ваш вопрос, я также узнал еще один виджет.