Желтые линии под текстовыми виджетами во Flutter?

132

Работаю над своим первым приложением для флаттера. На главном экране приложения этой проблемы нет, все тексты отображаются так, как должны.

Однако на этом новом экране, который я разрабатываю, у всех текстовых виджетов есть какая-то странная желтая линия / двойная линия внизу.

Есть идеи, почему это происходит?

Желтые линии

дасфима
источник
Вы можете добавить свой код?
aziza
17
Я подозреваю, что причина в том, что на этой странице нет эшафота.
aziza
@aziza Думаю, ты прав. На этой странице нет эшафота. Я подозревал, что это может быть проблема, но не стал ее проверять. Есть идеи, почему это происходит, когда у меня нет эшафота? Я не понимал, что это необходимо. Должен ли я просто использовать Scaffold, даже если я буду использовать только параметр the_body_?
dasfima 05
2
Каждая страница нуждается в Scaffold, даже если вы реорганизуете меньшие виджеты в отдельные классы, они должны где-то иметь родительский Scaffold. Я не уверен, предназначено ли это для подчеркивания текста или это проблема, в любом случае вам придется создавать любую страницу в Scaffold.
aziza 05
3
Или , если вы хотите DONOT Scaffold, вы можете просто окружить Textс Materialвиджетом
realpac

Ответы:

164

Проблема не в том, есть Scaffoldили нет. Scaffoldявляется помощником для Materialприложений ( AppBar, Drawerи тому подобного). Но вас не заставляют использовать Material.

Вам не хватает экземпляра Themeродительского элемента .

Почему это важно знать? Потому что, когда вы будете разрабатывать модальное окно ( showDialogнапример, используя ), вы столкнетесь с той же проблемой. НО Scaffold - это непрозрачный полноэкранный виджет! И вы, очевидно, не хотите этого в вашем модальном окне.

Есть много способов представить экземпляр темы. В приложении Material это обычно достигается путем создания экземпляра Materialвиджета. И угадайте, что? Scaffoldсоздает для вас. Но Dialogтоже!

Реми Русселе
источник
3
Также имейте в виду, что для Героя он отключен от родителя во время «полета», поэтому добавление Material(или любой темы) в качестве дочернего элемента Героя (ОБЕИХ сторон) исправляет его при переходе. См github.com/flutter/flutter/issues/30647
aaronvargas
81

Добавить Materialвиджет как корневой элемент.

@override
  Widget build(BuildContext context) {
    return Material(
        type: MaterialType.transparency,
        child: new Container(
Дивокер
источник
1
Мне помогли окружающие textили widgetс Materialвиджетом. Добавление Материала в качестве корневого элемента не помогло в моем случае
ММК
1
работает как с ними, так type: MaterialType.transparencyи без них.
sassman
30

Вы можете использовать Scaffold(как правило, лучше) или любой другой компонент, который предоставляет материальную тему, например, простой Materialвиджет.

Вот пример, используйте любой из них:

var text = Scaffold(body: Text("Hi"),);
var text2 = Material(child: Text("Hi"),);

В качестве обходного пути вы можете использовать:

Text(
  'Your text',
  style: TextStyle(decoration: TextDecoration.none), // removes yellow line
)
CopsOnRoad
источник
16

У стиля текста есть аргумент оформления, которому можно присвоить значение none

Text("My Text",
  style: TextStyle(
    decoration: TextDecoration.none,
  )
);

Кроме того, как уже упоминалось, если ваш виджет Text находится в дереве виджета Scaffold или Material, вам не понадобится стиль текста оформления.

Аарон Халворсен
источник
11

Также вы можете использовать украшение: TextDecoration.none, чтобы удалить подчеркивание

Анирудх Шарма
источник
7

Просто добавляю еще один способ, с которым я сталкиваюсь, к этим ответам.

Оберните корневой виджет вокруг виджета DefaultTextStyle . Здесь нет необходимости изменять каждый текстовый виджет.

DefaultTextStyle(
    style: TextStyle(decoration: TextDecoration.none), 
    child : Your_RootWidget
)

Надеюсь, это кому-то поможет.

Нихилешвар
источник
3

Вы должны добавить виджеты Material и Scaffold в файл main.dart.

 MaterialApp(
  home: Scaffold(
    body: Text('Hello world'),
  ),
);
кокэмомуке
источник
2

Для этого есть другое решение, особенно если вы используете несколько страниц, заключенных в файл main.dart. Вы можете сделать что-то вроде этого:

  child: MaterialApp(
    home: Material(child: Wrapper()),
  ),

Это удалит желтые линии под текстом, который присутствует на всех страницах, на которые есть ссылки / которые используются в оболочке.

Абдулманан
источник
1

Вам просто нужно добавить корневой виджет Material.

      @override
       Widget build(BuildContext context) {
      return Material(
         child: new Container(),
        );
       }
Парас Шарма
источник
0

Доступны 2 способа:

использовать scaffuld в родительском элементе экрана

Scaffold(body: Container(child:Text("My Text")))

использовать материал для родительского элемента виджета

Material(child: Text("My Text"))
Милад Джалали
источник