#flutter #dart
Вопрос:
Я пытаюсь отфильтровать значения между(от 350 до 750). Я использую два виджета с отслеживанием состояния, ползунок диапазона помещен в «ShowModalBottomSheet». Пользователь нажмет кнопку, чтобы открыть модальный ползунок диапазона. Как только пользователь выберет значение и даст «Применить», я хочу обновить состояние в другом виджете с отслеживанием состояния. К сожалению, я не смог обновить второй виджет с отслеживанием состояния, в котором у меня есть значение. Я не пользуюсь услугами какого-либо провайдера. Я новичок в flutter, я пытаюсь достичь этого с помощью setstate. Когда я нажимаю кнопку Применить, состояние не обновляется, но когда я даю горячую перезагрузку, фильтр применяется. Любой может указать мне, где я совершаю ошибки. Заранее спасибо!
@override Widget build(BuildContext context) { return SafeArea( child: Scaffold( body: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Align( alignment: Alignment.topLeft, child: IconButton( onPressed: () { setState(() { for (var i = 0; i lt; listObject.length; i ) { listObject[i].isSelected = false; } }); _FluorsCardState.selectedCheckbox = []; Navigator.of(context).pop(); }, icon: Icon(Icons.arrow_back)), ), Padding( padding: EdgeInsets.only(left: 24, right: 24, bottom: 18), child: Container( decoration: BoxDecoration( gradient: LinearGradient(colors: [ ZookaAppTheam.nearlyDarkBlue, HexColor("#6F56E8") ], begin: Alignment.topLeft, end: Alignment.bottomRight), borderRadius: BorderRadius.only( topLeft: Radius.circular(8.0), bottomLeft: Radius.circular(8.0), bottomRight: Radius.circular(8.0), topRight: Radius.circular(68.0)), boxShadow: lt;BoxShadowgt;[ BoxShadow( color: ZookaAppTheam.grey.withOpacity(0.6), offset: Offset(1.1, 1.1), blurRadius: 10.0), ], ), child: Stack(alignment: Alignment.bottomLeft, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: lt;Widgetgt;[ Text( '', textAlign: TextAlign.left, style: TextStyle( fontFamily: ZookaAppTheam.fontName, fontWeight: FontWeight.normal, fontSize: 14, letterSpacing: 0.0, color: ZookaAppTheam.white, ), ), Padding( padding: const EdgeInsets.only(top: 8.0), child: Text( toolListData[widget.selectedIndex].titleTxt, textAlign: TextAlign.left, style: TextStyle( fontFamily: ZookaAppTheam.fontName, fontWeight: FontWeight.normal, fontSize: 46, letterSpacing: 0.0, color: ZookaAppTheam.white, ), ), ), SizedBox( height: 32, ), Padding( padding: const EdgeInsets.only(right: 4), child: Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.center, children: lt;Widgetgt;[ Expanded( child: SizedBox(), ), Container( decoration: BoxDecoration( color: ZookaAppTheam.nearlyWhite, shape: BoxShape.circle, boxShadow: lt;BoxShadowgt;[ BoxShadow( color: ZookaAppTheam.nearlyBlack .withOpacity(0.4), offset: Offset(8.0, 8.0), blurRadius: 8.0), ], ), child: Padding( padding: const EdgeInsets.all(0.0), child: Icon( Icons.biotech_outlined, color: HexColor("#6F56E8"), size: 44, ), ), ) ], ), ) ], ), ), Padding( padding: const EdgeInsets.all(16.0), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ ElevatedButton( style: ButtonStyle( backgroundColor: MaterialStateProperty.all(Colors.white)), onPressed: () { setState(() { isCheckBoxEnabled = !isCheckBoxEnabled; }); }, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), ), height: 40, width: MediaQuery.of(context).size.width / 4.3, child: Center( child: Text( "Compare Mode", style: TextStyle(color: Colors.deepPurpleAccent), textAlign: TextAlign.center, )), ), ), SizedBox( width: 10, ), isCheckBoxEnabled ? ElevatedButton( style: ButtonStyle( backgroundColor: MaterialStateProperty.all( Colors.white)), onPressed: () { setState(() {}); if (_FluorsCardState.selectedCheckbox.length gt; 0) { Navigator.of(context).push( MaterialPageRoute( builder: (BuildContext context) { return GraphView( moleculesList: toolList[widget.selectedIndex], selectedMolecule: _FluorsCardState.selectedCheckbox, ); })); } else { final snackBar = SnackBar( content: const Text( 'Select atleast 1 flour'), action: SnackBarAction( label: 'close', onPressed: () { // Some code to undo the change. }, )); ScaffoldMessenger.of(context) .showSnackBar(snackBar); } print( "${_FluorsCardState.selectedCheckbox.length}"); }, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), ), height: 40, width: MediaQuery.of(context).size.width / 4, child: Center( child: Text( "Compare", style: TextStyle( color: Colors.deepPurpleAccent), textAlign: TextAlign.center, )), ), ) : Container() ], ), ), ]), ), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 24), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( children: [ IconButton( onPressed: () { setState(() { SetModalSheet(context); }); }, icon: Icon(Icons.sort)), ], ), Container( child: TextField( enabled: true, textAlign: TextAlign.left, showCursor: true, toolbarOptions: ToolbarOptions(copy: false, cut: false), autofillHints: ["Search"], onChanged: (value) { setState(() { Listlt;MoleculesDataListgt; backUpList = toolList[widget.selectedIndex]; var updatedList = this.newSearchList.where((element) { print(element.flourName); var flourTitle = element.flourName.toLowerCase(); return flourTitle.contains(value); }).toList(); this.listObject = value.length == 0 ? backUpList : updatedList; print( "searchValue $value ${value.length}--- ${updatedList.length} ${backUpList.length}"); }); }, autocorrect: true, textAlignVertical: TextAlignVertical.top, keyboardType: TextInputType.text, cursorHeight: 30, decoration: InputDecoration( filled: false, focusColor: Colors.black, suffixIcon: Icon(Icons.search), enabled: true, fillColor: Colors.white70, border: OutlineInputBorder()), ), height: 40, width: MediaQuery.of(context).size.width / 1.6, decoration: BoxDecoration( color: Colors.white70, borderRadius: BorderRadius.circular(5), boxShadow: [ BoxShadow(color: Colors.black54), ])), Row( children: [ IconButton( onPressed: () { setState(() { isSorted = !isSorted; }); }, icon: Icon(Icons.sort_by_alpha_outlined)) ], ), ], ), ), Expanded( child: Container( color: Colors.white.withOpacity(0.0), height: MediaQuery.of(context).size.height / 1.5, child: FluorsCard( key: super.widget.key, dnaListData: this.listObject, selectedIndex: widget.selectedIndex)), ), ], ), ), ); } void SetModalSheet(context) { RangeValues rangeValues = const RangeValues(400, 700); showModalBottomSheet( shape: RoundedRectangleBorder(), context: context, builder: (BuildContext c) { return StatefulBuilder( builder: (BuildContext context, void Function(void Function()) setState) { return Container( height: 250, child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.symmetric( horizontal: 24, vertical: 24), child: Text( "Filter", style: ZookaAppTheam.title, ), ), Flexible( fit: FlexFit.loose, child: Container( height: 180, child: SliderTheme( data: SliderTheme.of(context).copyWith( activeTrackColor: Colors.pink, inactiveTrackColor: Color(0xFF8D8E98), thumbColor: Color(0xFFEB1555), thumbShape: RoundSliderThumbShape(enabledThumbRadius: 15), overlayShape: RoundSliderOverlayShape(overlayRadius: 30.0), overlayColor: Color(0x29EB1555), showValueIndicator: ShowValueIndicator.always, ), child: RangeSlider( values: rangeValues, min: 350, max: 750, labels: RangeLabels( '${rangeValues.start.round()}', '${rangeValues.end.round()}'), // divisions: 10, onChanged: (RangeValues newValue) { setState(() { rangeValues = newValue; rangeStartValue = newValue.start; rangeEndValue = newValue.end; }); print( "sliderRangeMethod: $rangeStartValue $rangeEndValue"); }, ), ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ GestureDetector( onTap: () { // WidgetsBinding.instance?.addPostFrameCallback( // (_) =gt; setState(() {})); setState(() { int startValue = rangeStartValue.toInt(); int endValue = rangeEndValue.toInt(); print("sliderRangeMethod2 $startValue $endValue"); Listlt;MoleculesDataListgt; backUpList = toolList[widget.selectedIndex]; this.newSearchList = // ignore: can_be_null_after_null_aware this.newSearchList?.where((element) { int emissionValue = element.emission; print((element.emission gt; startValue) .toString()); return (element.emission gt;= startValue amp;amp; element.emission lt;= endValue); }).toList(); listObject = this.newSearchList.length lt; backUpList.length ? this.newSearchList : backUpList; print(this.newSearchList.length.toString()); print("ListObject: " listObject.length.toString() backUpList.length.toString()); Navigator.of(context).pop(); }); setState((){ }); }, child: Container( decoration: BoxDecoration( color: Colors.redAccent, borderRadius: BorderRadius.circular(10)), height: 50, width: MediaQuery.of(context).size.width / 2.5, child: Center( child: Text( "Apply123", style: ZookaAppTheam.title, )), ), ), GestureDetector( onTap: () { Navigator.of(context).pop(); return Container(); // setState(() {}); }, child: Container( decoration: BoxDecoration( color: Colors.redAccent, borderRadius: BorderRadius.circular(10)), height: 50, width: MediaQuery.of(context).size.width / 2.5, child: Center( child: Text( "Cancel", style: ZookaAppTheam.title, )), ), ) ], ), ) ], )); }, ); }); } }