не меняйте цвет моего контейнера с помощью метода setstate в GestureDetector

#android #flutter #dart #flutter-layout #flutter-dependencies

Вопрос:

я собираюсь изменить цвет контейнера при нажатии на GestureDetector, но ничего не изменится… как на этом изображении:и я нажимаю на векторных мужчин и женщин . . и ничего не меняется…я использую линейный градиент и список цветов, пожалуйста, помогите мне решить эту проблему

мое приложение

 import 'package:flutter/material.dart'; import 'icon_content.dart'; import 'reusable_card.dart';  const BottomContainerHeight = 80.0;  Listlt;Colorgt; inactiveCardColoursFemale = [Color(0xFF42A5F5), Color(0xFF039BE5)]; Listlt;Colorgt; activeCardColoursFemale = [Color(0xFF303F9F), Color(0xFF283593)]; Listlt;Colorgt; inactiveCardColoursMale = [Color(0xFFFBC02D), Color(0xFFFFB300)]; Listlt;Colorgt; activeCardColoursMale = [Color(0xFFFF6F00), Color(0xFFE65100)];  enum Gender {  male,  female,  }   class InputPage extends StatefulWidget {  const InputPage({Key? key}) : super(key: key);   @override  _InputPageState createState() =gt; _InputPageState();  }   class _InputPageState extends Statelt;InputPagegt; {  Gender selectedGender=Gender.female;   @override  Widget build(BuildContext context) {  return Scaffold(  appBar: AppBar(  backgroundColor: Colors.deepOrangeAccent,  title: const Text("Iman Bmi"),  centerTitle: true,  ),  body: Column(  children: [  Expanded(  child: Expanded(  child: Row(  children: [  Expanded(  child: GestureDetector(  onTap: () {  setState(() {  selectedGender = Gender.female;  });  },  child: ReusableCard(  colour: selectedGender == Gender.female  ? inactiveCardColoursFemale  : activeCardColoursFemale,  cardChild: IconContent(  svgPicture: 'assets/2.svg',  label: 'women',  ),  ),  ),  ),  Expanded(  child: GestureDetector(  onTap: () {  setState(() {  selectedGender = Gender.male;  });  },  child: ReusableCard(  colour: selectedGender == Gender.male  ? activeCardColoursMale  : inactiveCardColoursMale,  cardChild: IconContent(  svgPicture: 'assets/3.svg',  label: 'men',  )),  ),  ),  ],  ),  )),  Expanded(  child: ReusableCard(  colour: [Colors.deepPurple, Colors.purple],  //colour: Color(0xFF65E655),  cardChild: Row(  children: [],  ),  ),  ),  Expanded(  child: Row(  children: [  Expanded(  child: ReusableCard(  colour: [Colors.teal, Colors.tealAccent],  //colour: Color(0xFF65E655),  cardChild: Column(  children: [],  ),  ),  ),  Expanded(  child: ReusableCard(  colour: [Colors.amber, Colors.yellow],  //colour: Color(0xFF65E655),  cardChild: Column(  children: [],  ),  ),  ),  ],  )),  Container(  margin: EdgeInsets.only(top: 20.0),  width: double.infinity,  height: BottomContainerHeight,  decoration: BoxDecoration(  gradient: LinearGradient(  begin: Alignment.topRight,  end: Alignment.bottomLeft,  colors: [Colors.deepOrange, Colors.deepOrangeAccent]),  borderRadius: BorderRadius.circular(10.0)),  ),  ],  ));  

} }

и мой код класса многоразовой карты: я использую линейный градиент и список цветов

 import 'package:flutter/material.dart';  class ReusableCard extends StatelessWidget { ReusableCard({required this.colour, required this.cardChild});  //required this.colour final Listlt;Colorgt; colour;  final Widget cardChild;   @override Widget build(BuildContext context) { return Container(  child: cardChild,  margin: EdgeInsets.all(10.0),  decoration: BoxDecoration(  //color: colour,  gradient: LinearGradient(  begin: Alignment.topRight,  end: Alignment.bottomLeft,  colors: colour,  ),  //Color(0xFF65E655)  borderRadius: BorderRadius.circular(10.0)), );  

} }

Комментарии:

1. переключитесь ReusableCard на виджет с отслеживанием состояния.

Ответ №1:

Удаление первого Expanded виджета внутри вас Column должно решить вашу проблему.

 // Change this Column(children: [Expanded(child: Expanded(child: Row()))])  // to this Column(children: [Expanded(child: Row())])  

Комментарии:

1. Большое спасибо!