【问题标题】:Flutter: Refresh another Widget State from Another RouteFlutter:从另一个路由刷新另一个小部件状态
【发布时间】:2019-02-14 03:51:30
【问题描述】:

在 HompePage,导航到设置页面;

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

Settings() 页面包含一个int 输入,允许用户指定他们希望在HomePage 看到的帖子数量。当用户输入数字和form.save时,该值存储在SharedPreferences中。但是当用户回到HomePage时,最初的帖子数仍然存在。我希望 HomePagestate 刷新,以便用户在设置页面指定的帖子数量将在表单保存后立即生效。

下面是我的代码的一些sn-ps;

这是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');
  }
}

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    您可以使用callbacks 指示HomePage Settings 页面更改了共享首选项中的某些值。参考this

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 2021-07-20
      • 2021-09-11
      相关资源
      最近更新 更多