我的问题是关于与集团模式一起使用的导航.
在我的LoginScreen小部件中,我有一个按钮,可以将事件添加到集团的EventSink中.bloc调用API并验证用户身份.问题是在LoginScreen Widget中我必须监听流,以及在返回成功状态后如何导航到另一个屏幕.
希望我清楚自己.谢谢!
我想知道如何将嵌套的json解析为具有泛型类型的类.我的目的是将来自后端的响应(如包含令牌的loginRespose)与代码和消息包装起来
我有
class BaseResponse<T>{
int code;
String message;
T responseObject;
BaseResponse.fromJson(Map<String, dynamic> parsedJson)
: code = parsedJson['Code'],
message = parsedJson['Message'],
responseObject = T.fromJson(parsedJson['ResponseObject']); //This is what I'd like to do
}
Run Code Online (Sandbox Code Playgroud)
显然,最后一行会抛出错误,因为T没有命名构造函数"fromJson".我尝试为Type添加一些限制,但我找不到任何解决方案.你知道如何解决这个问题吗?
导航到新窗口小部件后,我在尝试访问InheritedWidget时遇到问题.
我有这样的顶级小部件
class App extends StatelessWidget{
build(context){
return MaterialApp(
title: 'Iniciar Sesion',
home: LoginBlocProvider(child: WelcomeScreen()),
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后WelcomeScreen有一个导航到LoginScreen的按钮
class WelcomeScreen extends StatelessWidget {
@override Widget build(BuildContext context){
return Scaffold(
body: Center(child: MyButton)
);
}
}
class MyButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return RaisedButton(
shape: StadiumBorder(),
child: Text('Ingresar', style: TextStyle(color: Colors.black)),
elevation: 5.0,
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) =>LoginScreen()
));
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
最后在LoginScreen中我想访问InheritedWidget
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => …Run Code Online (Sandbox Code Playgroud) 我正在与 Slivers 合作。我有一个 SliverAppBar,然后是 SliverPersistentHeader,最后是 SliverList。
我想要实现的行为是 SliverAppBar 滚动离开屏幕但 SliverPersistentHeader 保持固定在屏幕顶部。
我能够做到这一点,但 SliverPersistentHeader 与 android 状态栏重叠。关于如何解决这个问题的任何想法?
最后这是代码
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: <Widget>[
SliverAppBar(
title: Text('SliverAppBar'),
pinned: false,
floating: true,
snap: true,
elevation: 0.0,
),
SliverPersistentHeader(
pinned: true,
delegate: _SliverAppBarDelegate(
child: PreferredSize(
preferredSize: Size.fromHeight(40.0),
child: Container(
color: Theme.of(context).primaryColor,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 12.0, horizontal: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text('SliverPersistentHeader', style: TextStyle(color: Colors.white, fontSize: 20.0))
],
),
),
), …Run Code Online (Sandbox Code Playgroud)