dart - Flutter:如何访问子页面中的 ScopeModel 属性

标签 dart flutter

我正在尝试理解 Flutter 中的 ScopeModel,并且需要一些帮助来了解如何从不同页面上的模型访问值

我的主页有一个底部导航栏,点击时只显示搜索页面。我用 ScopeModel 包装了小部件树并添加了模型。

计数正在增加,但我不确定如何从搜索页面访问它

class MyHomePage extends StatefulWidget {

  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  ScopeCounter sc;
  @override
  void initState() {
    super.initState();
     sc = new ScopeCounter();
  }
  final List<Widget> _children = [
   ..
    Search()
  ];
  var _currentIndex = 0;
  @override
  Widget build(BuildContext context) {
    return ScopedModel(
        model:sc ,
          child: Scaffold(
          appBar: AppBar(
            title: Center(child: Text("test")),
          ),
          drawer: JobsDrawer(),
          body: _children[_currentIndex],
          bottomNavigationBar: BottomNavigationBar(
              type: BottomNavigationBarType.fixed,
              onTap: onTabTapped, // new
              currentIndex: _currentIndex, // new
              items: [
                new BottomNavigationBarItem(
                  icon: new Icon(Icons.search),
                  title: new Text("search"),
                )
              ])),
    );
  }

  void onTabTapped(int index) {
    setState(() {
       sc.increment();         
      print(sc.counter1.count);
      _currentIndex = index;
    });
  }
}

这是我的模型

class ScopeCounter extends Model {
   Counter counter1 = Counter();
    increment() {
    counter1.count += 1;
    }
}
class Counter {
  int count = 1;
}

搜索页面

class Search extends StatefulWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
        ...

  }
}

我想从“搜索”页面访问计数。

谢谢你的帮助

最佳答案

您只需使用 ScopedModelDescendant 小部件包装您的 SearchPage 小部件(在本例中为脚手架)。这使您可以访问 ScopedModel。

可以在文档中找到很好的解释:https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple

编辑:此外,您的 ScopedModel 必须是两者的父级:MyHomePage 和 Search。

关于dart - Flutter:如何访问子页面中的 ScopeModel 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175210/

相关文章:

flutter 提供程序 : notifyListeners() to specific target

android - 如何在 flutter 中添加角标(Badge)计数作为 BottomNavigationBarItem 的一部分

web - Flutter for web 如何存储凭据?

dart - 在不导航到设置页面的情况下打开位置服务? Dart

unit-testing - Flutter 的 WidgetTester.pumpAndSettle() 不等待渲染完成?

flutter - 在 flutter 中单击按钮添加小部件时处理动态复选框列表

intellij-idea - 如何从 IDEA 在 Dartium 浏览器中正确运行 Angular2 dart 应用程序?

flutter - 如何解决 flutter for web 中的 web 开发服务器错误?

javascript - 如何使用 frog 将 javascript 转换为 dart?

flutter - 在 Flutter 中获取之前的路由名称