在flutter中拆分文件时访问BuildContext

时间:2018-06-07 10:44:24

标签: flutter

我尝试在flutter中设置InheritedWidget,允许从应用程序的任何位置访问模型。

在我尝试将应用程序拆分为多个文件之前,它很有效。似乎调用context.inheritFromWidgetOfExactType(...)仅在从InheritedWidget插入树的同一文件中调用时才起作用。只需将代码块从一个文件移动到另一个文件,就会导致从该方法返回null

代码如下:

基本应用程序是从演示应用程序设置的 import' package:flutter / material.dart&#39 ;; import' views / home.dart';

void main() async {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new StateContainer(
      model: new AppState(),
      child: new MaterialApp(
        title: 'Flutter Demo',
        theme: new ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: new HomePage(),
      ),
    );
  }
}

使用以下模型定义InheritedWidget

class StateContainer extends InheritedWidget {
  final AppState model;

  StateContainer({Key key, this.model, Widget child})
      : super(key: key, child: child);

  @override
  bool updateShouldNotify(StateContainer old) {
    return false;
  }

  static AppState of(BuildContext context) {
    return (context.inheritFromWidgetOfExactType(StateContainer)
            as StateContainer).model;
  }
}

class AppState {
  final String test = "Hi";
}

最后,HomePage定义为:

import 'package:flutter/material.dart';
import 'package:ftest/main.dart';

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var model = StateContainer.of(context);
    return Container(
      child: Center(
        child: Text(model.test),
      ),
    );
  }
}

将最后一个块放在与其他两个文件相同的文件中,该应用程序按预期工作。然而,只需将其移动到新文件中,就会抛出错误消息The getter 'model' was called on null.

我只能猜测BuildContext没有正确传递的地方,但我没有试过修复它。有什么想法吗?

0 个答案:

没有答案