Я использую модальный нижний лист в качестве раскрывающегося списка, но я не могу понять, как обновить свое состояние, как только я вернусь с нижнего листа через Navigator.pop ().Видимо, класс Modal не поддерживает setState.Я бы с радостью принял любую помощь, которую кто-нибудь может оказать по этой проблеме.Все, кроме текста выбранного языка, работает обновление.Фактически язык, на который настроено приложение, изменяет только текст, который не обновляется, чтобы показать это пользователю.
import 'package:flutter/material.dart';
import 'splash.dart' show lang;
import 'package:shared_preferences/shared_preferences.dart';
String selectedlang;
class LangSelect extends StatefulWidget {
@override
State<StatefulWidget> createState() => _LangSelectState();
}
class _LangSelectState extends State<LangSelect> {
void setLangDefault() {
selectedlang = "English";
lang = 'en';
}
void initState() {
super.initState();
setLangDefault();
}
Modal modal = Modal();
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: WillPopScope(
onWillPop: () async {
Future.value(false);
},
child: Column(
children: <Widget>[
Image.asset('assets/splash_logo.jpg'),
Center(
child: Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Text('Welcome',
style:
TextStyle(fontSize: 40, fontWeight: FontWeight.bold)),
Text(''),
Text(''),
Text(
"Select a language.",
style: TextStyle(fontStyle: FontStyle.italic),
),
Text(''),
Container(
width: 120,
height: 30,
decoration: BoxDecoration(
color: Colors.grey[300],
border: Border.all(
color: Colors.black,
width: 1,
style: BorderStyle.solid),
borderRadius: BorderRadius.all(Radius.circular(20))),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(selectedlang),
IconButton(
padding: EdgeInsets.fromLTRB(25, 2, 2, 2),
icon: Icon(Icons.arrow_drop_down),
onPressed: () => modal.mainBottomSheet(context),
)
],
))
],
)),
],
),
));
}
}
class Modal {
mainBottomSheet(BuildContext context) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
_createTile(context, 'English', _action1),
_createTile(context, 'Español', _action2),
],
);
});
}
ListTile _createTile(BuildContext context, String name, Function action) {
return ListTile(
title: Text(
name,
textAlign: TextAlign.center,
),
onTap: () {
Navigator.pop(context);
action();
},
);
}
_action1() {
lang = 'en';
selectedlang = "English";
print(lang);
}
_action2() {
lang = 'sp';
selectedlang = "Español";
print(lang);
}
}