Last active
November 24, 2019 14:15
-
-
Save sakiyamaK/37af21b249362b321be47b3159714761 to your computer and use it in GitHub Desktop.
widgetとsubwidget間で直接参照の仕方
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
void main() => runApp(MyApp()); | |
class MyApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
home: MyHomePage(), | |
); | |
} | |
} | |
class MyHomePage extends StatefulWidget { | |
MyHomePage({Key key}) : super(key: key); | |
final name = "MyHomePage"; | |
@override | |
_MyHomePageState createState() => _MyHomePageState(); | |
} | |
class _MyHomePageState extends State<MyHomePage> { | |
final name = "_MyHomePageState"; | |
GlobalKey<_SubWidgetState> subWidgetGlobalKey = GlobalKey(); | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
body: Center( | |
child: Column( | |
mainAxisAlignment: MainAxisAlignment.center, | |
children: <Widget>[ | |
Text("自分のパラメータ ${widget.name}"), | |
Text("自分のStateのパラメータ ${this.name}"), | |
Text("子のパラメータ ${subWidgetGlobalKey.currentState.widget.name}"), | |
Text("子のStateのパラメータ ${subWidgetGlobalKey.currentState.name}"), | |
Text("---------------------"), | |
SubWidget( | |
key: subWidgetGlobalKey, | |
), | |
], | |
), | |
), | |
); | |
} | |
} | |
class SubWidget extends StatefulWidget { | |
SubWidget({Key key}) : super(key: key); | |
final name = "SubWiget"; | |
@override | |
_SubWidgetState createState() => _SubWidgetState(); | |
} | |
class _SubWidgetState extends State<SubWidget> { | |
var name = "_SubWidgetState"; | |
@override | |
Widget build(BuildContext context) { | |
//親widgetを探す(正確に言うとclassが同じやつ) | |
final MyHomePage homePage = | |
context.findAncestorWidgetOfExactType<MyHomePage>(); | |
//親Stateを探す(正確に言うとclassが同じやつ) | |
final _MyHomePageState homePageState = | |
context.findAncestorStateOfType<_MyHomePageState>(); | |
return Container( | |
child: Column( | |
children: <Widget>[ | |
Text("親のパラメータ1 ${homePage.name}"), | |
Text("親のパラメータ2 ${homePageState.widget.name}"), | |
Text("親のStateのパラメータ ${homePageState.name}"), | |
], | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment