# #flutter #google-cloud-firestore
Вопрос:
Я использую поле раскрывающейся кнопки в приложении.Поле Раскрывающаяся кнопка получает сохраненное значение из firestore, которое пользователь выбирал ранее.
Проблема в том,что, когда пользователь хочет выбрать другое значение, поле раскрывающейся кнопки не изменяется на новое выбранное значение и показывает сохраненное значение.
Я попытался сбросить форму с помощью _dropdownformkey.currentState.reset()
, но ничего не изменилось
Я попытался присвоить onChanged
параметру значение null,но ничего не изменилось
Как я могу разрешить пользователю выбирать другое значение из выпадающего меню, отличное от сохраненного значения?
StreamBuilderlt;DocumentSnapshotgt;( stream:FirebaseFirestore.instance.collection('users').doc(userx).snapshots(), builder: ( context, snapshot) { if(snapshot.connectionState==ConnectionState.waiting){ return CircularProgressIndicator(); }else { if(snapshot.hasData){ var doc_data=snapshot.data; var job_title=doc_data['job_title']; if(job_title != "0"){ jobtitle_val=job_title; }else{ jobtitle_val=jobtitle_val; } } return DropdownButtonFormField( key: _dropdownformkey, decoration: InputDecoration( border: const OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(30.0), ), ), filled: true, hintStyle: TextStyle(color: Colors.grey[800]), hintText: "Job title", fillColor: Colors.grey[200]), value: jobtitle_val, onChanged: (String Value) { jobtitle_val=null; setState(() jobtitle_val = Value; }); }, validator: (value) =gt; value == null ? 'field required' : null, items: jobtitle .map((cityTitle) =gt; DropdownMenuItem( value: cityTitle, child: Text("$cityTitle"))) .toList(), ); } } )
Ответ №1:
Проверьте это все, что вам нужно, это присвоить переменной значение null и позвонить внутрь setState
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() async { runApp(MyApp()); } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @override _MyAppState createState() =gt; _MyAppState(); } class _MyAppState extends Statelt;MyAppgt; { @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(), darkTheme: ThemeData.dark(), home: const HomePage(), ); } } class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); @override Statelt;HomePagegt; createState() =gt; _HomePageState(); } class _HomePageState extends Statelt;HomePagegt; { var jobtitle_val; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: Column( children: [ TextButton( onPressed: () { setState(() { jobtitle_val = null; }); }, child: Text('Reset')), DropdownButtonFormFieldlt;intgt;( decoration: InputDecoration( border: const OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(30.0), ), ), filled: true, hintStyle: TextStyle(color: Colors.grey[800]), hintText: "Job title", fillColor: Colors.grey[200]), value: jobtitle_val, onChanged: (value) { setState(() { jobtitle_val = value; }); }, validator: (value) =gt; value == null ? 'field required' : null, items: List.generate( 4, (index) =gt; DropdownMenuItem(value: index, child: Text("$index"))), ), ], ), ); } }