美文网首页
Flutter-InheritedWidget

Flutter-InheritedWidget

作者: MrSYLong | 来源:发表于2019-04-23 17:37 被阅读0次
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('监听'),
        ),
        body: InheritedWidgetTestRoute(),
      ),
    );
  }
}

class ShareDataWidget extends InheritedWidget {

  ShareDataWidget ({
    @required this.data,
    Widget child
  }) : super(child: child);

  int data;
  
  static ShareDataWidget of (BuildContext context) {
    return context.inheritFromWidgetOfExactType(ShareDataWidget);
  }

  @override
  bool updateShouldNotify(ShareDataWidget old) {
    // TODO: implement updateShouldNotify
    return old.data != data;
  }
}


class _TestWidget extends StatefulWidget {
  @override
  __TestWidgetState createState() => __TestWidgetState();
}

class __TestWidgetState extends State<_TestWidget> {
  @override
  Widget build(BuildContext context) {
    return Text(ShareDataWidget.of(context).data.toString());
  }

  @override
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
    super.didChangeDependencies();

    print("Dependencies change");
  }
}

class InheritedWidgetTestRoute extends StatefulWidget {
  @override
  _InheritedWidgetTestRouteState createState() => _InheritedWidgetTestRouteState();
}

class _InheritedWidgetTestRouteState extends State<InheritedWidgetTestRoute> {

  int count = 0;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ShareDataWidget(
          data: count,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.only(bottom: 20.0),
              child: _TestWidget(),
            ),
            RaisedButton(
                child: Text('Increment'),
                onPressed: () {
                  setState(() {
                    ++count;
                  });
                }
            )
          ],
        ),
      ),
    );
  }
}


相关文章

网友评论

      本文标题:Flutter-InheritedWidget

      本文链接:https://www.haomeiwen.com/subject/igrbgqtx.html