小编Fab*_*tto的帖子

如何在 Flutter 中使用 Provider 显示 ChangeNotifier 中的错误

我正在尝试找到通过 Snackbar 显示带有 Provider 的 Change Notifier Model 错误的最佳方法。

是否有任何内置方法或任何建议可以帮助我?

我发现这种方式有效,但我不知道它是否正确。

假设我有一个简单的页面,我想在其中显示一个对象列表和一个从 api 检索这些对象的模型。如果出现错误,我会通知一个错误字符串,并且我想用 SnackBar 显示该错误。

页面.dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class Page extends StatefulWidget {
  Page({Key key}) : super(key: key);

  @override
  _PageState createState() => _PageState();
}

class _PageState extends State< Page > {

  @override
  void initState(){
    super.initState();
    Provider.of<Model>(context, listen: false).load();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    Provider.of< Model >(context, listen: false).addListener(_listenForErrors);
  }

  @override
  Widget build(BuildContext context){
    super.build(context);
    return Scaffold(
      appBar: AppBar(),
      body: Consumer<Model>(
          builder: (context, model, child){
  
            if(model.elements != …
Run Code Online (Sandbox Code Playgroud)

provider-model dart flutter flutter-layout flutter-provider

10
推荐指数
2
解决办法
6727
查看次数

跨不同路线共享巴士

我正在尝试跨两条路线共享同一个块。但是,当我从第二条路线回来时,该块会自动处理,因此在第一条路线中,我发现自己所有的流都关闭了。

例如,这是我实例化块的第一条路线(主页),从 api 下载列表并在构建方法中显示它。

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {


  GroupsBloc _groupBloc;

  @override
  void initState() {
    super.initState();
  }

  @override
  void didChangeDependencies(){
    super.didChangeDependencies();
    _groupBloc = GroupsBloc();
    _groupBloc.getAll();
  }

  @override
  void dispose(){
    _groupBloc.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
   ...
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我导航到第二个屏幕,可以在其中将项目添加到列表中。

  _onAddGroupPress(){
    Navigator.of(context).push(new MaterialPageRoute(
        builder: (BuildContext context) => BlocProvider<GroupsBloc>(bloc: _groupBloc, child: GroupPage()),
        fullscreenDialog: true
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

在第二个屏幕中,我检索该块并使用它来添加项目,然后返回主页。

class GroupPage extends StatefulWidget {

  @override
  _GroupPageState createState() => _GroupPageState();
} …
Run Code Online (Sandbox Code Playgroud)

flutter bloc

3
推荐指数
1
解决办法
4867
查看次数