РЕДАКТИРОВАТЬ 2: Потратив на это целый день. Мне наконец удалось работать с ListView.builder, и моя первоначальная проблема больше не является проблемой ... :). Но теперь появилась более конкретная проблема c. Очевидно, все проблемы, с которыми я столкнулся, были связаны с использованием DrawerHeader и ListView.builder вместе в одном ящике. Все мои попытки приводят к множеству разных типов ошибок. Кто-нибудь может сказать мне, как вставить заголовок выдвижного ящика в код ниже без ошибок?
import 'package:flutter/material.dart';
class MyHomePage extends StatelessWidget {
List<String> items = [
'Alimentação', 'Artigos para o lar', 'Beleza', 'Carros',
'Computadores', 'Consertos', 'Construção', 'Ensino',
'Esporte', 'Pet', 'Presentes', 'Religião',
'Saúde', 'Serviços Gráficos', 'Serviços para o lar', 'Serviços profissionais',
];
List<IconData> icones = [
Icons.play_arrow, Icons.list, Icons.create_new_folder, Icons.add_alarm,
Icons.insert_comment, Icons.drag_handle, Icons.ac_unit, Icons.adjust,
Icons.airline_seat_recline_extra, Icons.forum, Icons.gamepad, Icons.hd,
Icons.format_align_justify, Icons.keyboard, Icons.list, Icons.mail,
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Teste de app',
),
),
drawer: Drawer(
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, i){
return ListTile(
title: Text(items[i]),
leading: Icon(icones[i]),
trailing: Icon(Icons.chevron_right),
onTap: (){
Navigator.pop(context);
},
);
},
),
),
body: Container(
child: Text(
'Texto'
),
),
);
}
}
РЕДАКТИРОВАТЬ 1: После первой помощи мне удалось поместить списки, используя ScrollView.builder, но меню больше не прокручивается. После некоторых исследований я обернул ScrollView внутри SizedBox с фиксированной высотой, и это сработало. Единственная проблема заключается в том, что фиксированная высота. Я уверен, что это не самый подходящий способ сделать это, но когда я изменяю фиксированную высоту для double.infinity, я получаю ошибку:
Следующее утверждение было брошено во время executeLayout (): BoxConstraints вызывает бесконечное число рост.
Ребята, скажите, что я делаю не так?
//----------------TEST--------------------------------
class TestDrawer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
SizedBox(
height: double.infinity,
child: ListView.builder(
itemCount: kCategorias.length,
itemBuilder: (_, int index){
return ListTile(
title: Text(
kCategorias[index],
),
leading: Icon(kIcones[index]),
trailing: Icon(Icons.play_arrow),
onTap: (){
Navigator.pop(context);
},
);
},
),
),
],
);
}
}
ОРИГИНАЛЬНАЯ ПОЧТА:
Для контекста я начал изучать Flutter и, наконец, почувствовал себя достаточно уверенно, чтобы «поиграть» в мой самый первый проект. Это простой каталог учетных записей Instagram компаний, которые работают с доставкой. Если мне удастся закончить sh, я запусту приложение в магазине, чтобы помочь местным компаниям справиться с пандемией и социальной изоляцией.
Банкомат Я работаю над ящиком приложения и все работает довольно хорошо. Но я застрял. Я хочу создать меню категорий. Пунктами меню являются ListTiles. У меня есть два списка для управления этим меню. Один список с названиями категорий и другой с иконками каждой из категорий. В будущем мне понадобится третий список со ссылками для каждого элемента меню.
Что ж, все, что мне нужно сделать, - это перебрать каждый из этих списков внутри каждого элемента ListTile. Список категорий работал на 100%. Проблема началась, когда я попытался перебрать второй список в том же виджете ListTile.
Первое, что пришло мне в голову, чтобы решить эту проблему, это, конечно, создать сингл для l oop и внутри него использовать столько списков, сколько я хотел с тем же индексом. Я протестировал эту возможность в DartPad, и она отлично работала! Он вернулся именно так, как я хотел. Проблема в том, что для работы мне нужно использовать for ... l oop, и когда я перенес ту же идею в код приложения, он работал только с однострочной структурой (без фигурных скобок). Как только я поставил фигурные скобки, он возвращает ошибку (тип элемента 'Set<ListTile>'
не может быть назначен типу списка 'Widget'.) Но если я использую однострочную структуру, я не возможность повторять более одного списка. Единственный возможный (на мой взгляд) способ перебора двух или более списков - это использование фигурных скобок.
Я не знаю, достаточно ли я ясен, но как я могу решить эту проблему? Как я могу перебрать 2 или более списков внутри одного виджета - в моем случае ListTile () - используя for для l oop?
Ниже я приложу исходный код класса, у которого проблемы с. Если вы хотите увидеть весь проект и проверить , здесь - это ссылка на репозиторий проекта на github.
Заранее спасибо!
//Builds a Drawer item using ListTile()
class BuildDrawerTile extends StatelessWidget {
List<String> list;
BuildDrawerTile({@required this.list});
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
for(String item in list ) ListTile( //HERE EVERYTHING WORKS WELL AS I'M NOT USING CURLY BRACKETS
title: Text(
item,
style: GoogleFonts.quicksand(
textStyle: TextStyle(
color: Color(0xFF808080),
fontWeight: FontWeight.w300,
),
),
),
leading: Icon(Icons.play_arrow), //HERE I NEEDED TO ITERATE SPECIFIC ICONS FOR EACH ITEM
trailing: Icon(Icons.play_arrow),
onTap: (){
Navigator.pop(context); //IN THE FUTURE HERE I'LL ITERATE A THIRD LIST WITH THE DESTINATIONS
},
),
],
);
}
}