Возможно, это моя ошибка или глупая ошибка, но это то, что происходит со мной:
authController.dart:
class AuthController {
BehaviorSubject _hometownController = BehaviorSubject();
Observable get hometown => _hometownController.stream;
void updateHometown(String hometown) {
_hometownController.add(hometown);
print(_hometownController.value); <- This always prints the expected value: "Hello!"`
}
}
Login_screen.дротик:
class Login2 extends StatelessWidget {
AuthController authController = new AuthController();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(
builder: (BuildContext context) =>
Container(
padding: EdgeInsets.all(32.0),
child: Center(
child:
//Hometown:
StreamBuilder(
stream: authController.hometown,
builder: (BuildContext context, AsyncSnapshot snap) {
return ListTile(
leading: Icon(Icons.map),
title: Text("Hometown:"),
subtitle: snap.hasData ? Text(snap.data) : Text("Not set"),
onTap: () {
authController.updateHometown("Hello!");
},
);
}
),
))));}}
И все идет хорошо.Но если я добавлю асинхронную функцию с async и буду ждать до authController.updateHometown:
Login_screen.dart:
onTap: () async {
var x = await something(); <- This always successfully completes
authController.updateHometown("Hello!");
},
Поток никогда не получит новое значение иStreamBuilder никогда не перестраивает!
Но если я использую класс statefulWidget:
class Login2 extends StatefulWidget {
@override
State<StatefulWidget> createState() => Login2State();
}
class Login2State extends State<Login2> {
AuthController authController;
@override
void initState() {
authController = new AuthController();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(
builder: (BuildContext context) =>
Container(
padding: EdgeInsets.all(32.0),
child: Center(
child:
//Hometown:
StreamBuilder(
stream: authController.hometown,
builder: (BuildContext context, AsyncSnapshot snap) {
return ListTile(
leading: Icon(Icons.map),
title: Text("Hometown:"),
subtitle: snap.hasData ? Text(snap.data) : Text("Not set"),
onTap: () async {
var x = await something();
authController.updateHometown("Hello!");
},
);
}),))));}}
Все идет хорошо, даже если я никогда не вызываю setState Почему это происходит?