import 'package:flutter/material.dart';
import 'dart:async';
void main() => runApp(MyApp());
//Using Bloc
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: bloc.darkThemeEnabled,
initialData: false,
builder: (context, snapshot) => MaterialApp(
theme: snapshot.data ? ThemeData.dark() : ThemeData.light(),
home: HomePage(snapshot.data)),
);
}
}
class HomePage extends StatelessWidget {
final bool darkThemeEnabled;
HomePage(this.darkThemeEnabled);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Dynamic Theme"),
),
body: Center(
child: Text("Hello World"),
),
drawer: Drawer(
child: ListView(
children: <Widget>[
ListTile(
title: Text("Dark Theme"),
trailing: Switch(
value: darkThemeEnabled,
onChanged: bloc.changeTheme,
),
)
],
),
),
);
}
}
class Bloc {
final _themeController = StreamController<bool>();
get changeTheme => _themeController.sink.add;
get darkThemeEnabled => _themeController.stream;
}
final bloc = Bloc();
1.警告说关闭 dart.core.sink 的实例
2.flutter中为什么使用dart.core.sink?
3.我该如何解决这个错误
4.它的错误文档将我重定向到这个网站 link
5.我不知道如何在flutter中使用这些方法请指导我
最佳答案
dart.core.sink
是 interface由 Stream 实现.
警告显示,因为 dart 编译器希望您 .close()
您的 Stream 实例。在这种情况下,这是您的 final _themeController = StreamController<bool>()
.
如果要修复警告,请添加
void dispose() {
_themeController.close();
}
到您的 Bloc 类(class)。
仅仅添加该方法并没有多大作用,因为它没有被调用。所以你应该改变你的 main() 方法来调用
bloc.dispose()
之后 runApp(MyApp())
.
关于flutter - 如何在 flutter 中使用 dart.core.sink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168478/