Итак, у меня есть ChipSet
виджет, которому передается список MyChip
виджетов в конструкторе.
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:hello_world/widgets/chip.dart';
class ChipSet extends StatefulWidget {
final List<MyChip> chips;
ChipSet({
Key key,
@required this.chips,
}) : super(key: key);
@override
_ChipSetState createState() => _ChipSetState();
}
class _ChipSetState extends State<ChipSet> {
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: widget.chips
);
}
}
Код виджета чипа следующий:
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class MyChip extends StatelessWidget {
final bool active;
final Color color;
final IconData icon;
final String text;
final EdgeInsets padding;
MyChip({
Key key,
@required this.color,
@required this.icon,
@required this.text,
this.active = false,
this.padding = const EdgeInsets.all(0)
}) : super(key: key);
void _onTap() {
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: _onTap,
child: Container(
padding: const EdgeInsets.all(4),
margin: const EdgeInsets.only(right: 6),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: active ? color : Colors.white),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Icon( icon, size: 15),
Padding(
padding: padding,
child: Text(text,
style: TextStyle(fontSize: 12, color: Colors.black)),
)
],
)));
}
}
Я хочу следующее: для виджета ChipSet
должен быть только один активный MyChip
в любой момент времени.Щелчок на виджете чипа сделает этот MyChip
активным и, следовательно, сделает все остальные MyChip
в этом ChipSet
неактивными.
Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как получить доступметод на моем родительском виджете ChipSet
из моего виджета чипа, когда, например, MyChip
касается метода _onTap
.Кто-нибудь знает элегантное решение этой проблемы управления государством?Кроме того, я хотел бы, чтобы дочерний виджет MyChip
передавал его значение, то есть когда MyChip
установлен в активное состояние, а остальные в неактивное, родительский элемент получает значение активного MyChip
.(например, value
было бы свойством MyChip
)
Моя главная проблема заключается в том, что этот ChipSet
получает эти чипы в качестве аргументов конструктора.
Мне известен шаблон, в котором родительский объект передает его обратный вызов дочернему элементу (конструктору дочерних виджетов.).Но в этом случае использования я не вижу, как этот шаблон применим, поскольку виджеты передаются в ChipSet
.
. Я был бы очень признателен за помощь в этом.С наилучшими пожеланиями.