繁体   English   中英

Flutter:从另一条路线刷新另一小部件状态

[英]Flutter: Refresh another Widget State from Another Route

在HompePage上,使用导航到“设置”页面;

 Navigator.push(
      context,
      new MaterialPageRoute(
          builder: (BuildContext context) => Settings()));

Settings()页面包含一个int输入,以允许用户指定他们想要在HomePage上看到的帖子数。 当用户输入数字和form.save时,该值存储在SharedPreferences 但是,当用户返回HomePage ,初始发布数量仍然存在。 我希望刷新HomePage状态,以便用户在“设置”页面上指定的帖子数将立即生效。

下面是我的代码片段;

这是Settings()页面上的_submit形式,

_submit() async {
    final form = _formKey.currentState;
    SharedPreferences prefs = await SharedPreferences.getInstance();
    if (form.validate()) {
      prefs.setInt('defaultField', newva);
      form.save();
      final mysb = SnackBar(
        duration: Duration(seconds: 1),
        content: new Text(
          'Data Saved Successfully',
          style: TextStyle(
            color: Colors.white,
            fontWeight: FontWeight.bold,
          ),
        ),
        backgroundColor: Colors.red,
      );
      _scaffoldKey.currentState?.showSnackBar(mysb);
      myHomePageState.setState(() {
        newSULength = newva;
      });
      print('Done for $newva');
    }
  }

这是我的MyHomePage()

MyHomePageState myHomePageState = new MyHomePageState();

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => new MyHomePageState();
  static MyHomePageState of(BuildContext context){
    final MyHomePageState navigator = context.ancestorStateOfType(const TypeMatcher<MyHomePageState>());
    assert(() {
      if(navigator == null) {
        throw new FlutterError('Error occoured');
      }
      return true;
    }());

    return navigator;
  }
}

class MyHomePageState extends State<MyHomePage> {

  int newSULength = 0;

void initState() {
    // TODO: implement initState
    super.initState();
    loadDF();
  }

  set newle(String value) => setState(() => _string = value);


  loadDF() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      newSULength = (prefs.getInt('defaultField') ?? 5);
      for (int i = 0; i < newSULength; i++) {

\\todos
      }
    });
    print('Done');
  }
}

您可以使用callbacks来指示HomePage ,“ Settings页面更改了共享首选项中的某些值。 推荐这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM