Как редактировать определенные элементы в GridView?
Как мне отредактировать / настроить конкретный элемент в этом GridView. Этот Gridview показывает дни января 2020 года в каждом контейнере. Как изменить границу контейнера определенной даты? Пример... Я хочу изменить границу на красную вместо черной у второго элемента в первой строке (01-02-2020)
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = 'Grid List';
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: GridView.count(
// Create a grid with 2 columns. If you change the scrollDirection to
// horizontal, this produces 2 rows.
crossAxisCount: 4,
// Generate 100 widgets that display their index in the List.
children: getDayInWeek(),
),
),
);
}
}
List<Widget> getDayInWeek() {
var list = <DateTime>[];
DateTime start = DateTime(2020, 01, 01);
final end = DateTime(2020, 01, 31);
while (start.isBefore(end)) {
list.add(start);
start = start.add(const Duration(days: 1));
}
return list.map((DateTime time) {
return Container(
margin: const EdgeInsets.all(2.0),
padding: const EdgeInsets.all(.0),
decoration: myBoxDecoration(),
child: Column(
children: <Widget>[
Text(
new DateFormat("MM-dd-yyyy").format(time),
style: TextStyle(fontSize: 15.0, backgroundColor: Colors.white),
textAlign: TextAlign.center,
),
],
),
);
}).toList();
}
BoxDecoration myBoxDecoration() {
return BoxDecoration(
border: Border.all(width: .1),
);
}
2 ответа
Решение
Вы можете использовать индекс и тернарное условие для изменения цвета границы в вашем BoxDecoration(). как я использую в своем приложении.
Container(
height: 30,
width: 155,
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: BorderSide(
color: index == 7
? dateDifference
? Colors.red
: lightGrey
: lightGrey),
borderRadius:
BorderRadius.all(Radius.circular(3.0)),
),
),
Вы можете использовать разницу:
int diffDays = date1.difference(date2).inDays;