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


125

Працюю над моїм першим флетер-додатком. На головному екрані програми немає цієї проблеми, усі тексти відображаються як слід.

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

Будь-які ідеї, чому це відбувається?

Жовті лінії


Чи можете ви додати свій код?
азіза

14
Я підозрюю, що причина полягає в тому, що у вас немає лісу на цій сторінці.
азіза

@aziza Я думаю, ти маєш рацію. На цій сторінці немає ешафота. Я підозрював, що це може бути проблемою, але не перевіряв її перевірку. Будь-які ідеї, чому це відбувається, коли у мене немає ешафота? Я не усвідомлював, що це потрібно. Чи повинен я просто використовувати ешафти в будь-якому випадку, хоча я буду використовувати лише параметр_body_?
дасфіма

2
Кожна сторінка потребує ешафот, навіть якщо ви переробляєте менші віджети на окремі класи, вони повинні десь мати батьківський підхід. Я не впевнений, чи мається на увазі саме так, щоб текст був підкреслений, або це проблема, незалежно, вам в кінцевому підсумку потрібно буде створити будь-яку сторінку в ешафоті.
азіза

3
Або , якщо ви хочете DONOT Scaffold, ви можете просто оточити Textз Materialвіджетом
realpac

Відповіді:


154

Проблема полягає в тому, що немає Scaffoldчи ні. Scaffoldє помічником для Materialдодатків ( AppBar, Drawer, такого роду речі). Але ви не змушені користуватися Material.

Те, що вам не вистачає, це екземпляр Themeбатьків.

Чому це важливо знати? Тому що коли ви розробляєте Модал ( showDialogнаприклад, наприклад), ви зіткнетеся з тією ж проблемою. АЛЕ Ліси - це непрозорий віджет на повноекранному екрані! І ти, очевидно, цього не хочеш у своєму Модалі.

Існує багато способів ввести екземпляр теми. У додатку Матеріал це зазвичай досягається за допомогою інстанції Materialвіджета. І вгадайте, що? Scaffoldстворює один для вас. Але Dialogтеж!


3
Також пам’ятайте про героя, він відключається від батьків під час «у польоті», тому додаючи Material(або будь-яку Тему), оскільки дитина-герой (БОЛІ сторони) фіксує це під час переходу. Дивіться github.com/flutter/flutter/isissue/30647
aaronvargas

79

Додати Materialвіджет як елемент кореня.

@override
  Widget build(BuildContext context) {
    return Material(
        type: MaterialType.transparency,
        child: new Container(

1
навколишні textабо widgetз Materialвіджетом мені допоміг. Додавання матеріалу як елемента кореня не допомогло в моєму випадку
MMK

1
працює як з type: MaterialType.transparencyбудь-яким, так і без нього.
сассман

28

Ви можете використовувати 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
)

16

У текстовому стилі є аргумент декорування, який можна встановити жодним

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

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


10

Також ви можете використовувати оформлення: TextDecoration.none, щоб видалити підкреслення


6

Просто додаю ще один спосіб, з яким я стикаюся до цих відповідей.

Оберніть кореневий віджет навколо віджета DefaultTextStyle . Зміна кожного текстового віджета тут не є необхідністю.

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

Сподіваюся, це комусь допоможе.


2

Ви повинні додати віджети Матеріал та ліси в файл main.dart

 MaterialApp(
  home: Scaffold(
    body: Text('Hello world'),
  ),
);

2

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

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

Це видалить жовті рядки під текстом, які є на будь-яких сторінках, на які посилаються / використовуються під обгорткою.


1

Вам просто потрібно додати віджет Material root.

      @override
       Widget build(BuildContext context) {
      return Material(
         child: new Container(),
        );
       }

0

Є два способи:

використовувати scaffuld у батьківському екрані

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

використовувати матеріал для батьків віджета

Material(child: Text("My Text"))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.