Сбросить значение поля раскрывающейся кнопки

# #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"))),  ),  ],  ),  );  }  }