我是廣告,點擊一下吧!
標籤
#Flutter (11) 、 #PHP (8) 、 #Laravel (6) 、 #Mac (4) 、 #Dart (4) 、 #MySQL (4) 、 #VS Code (2) 、 #IDE (2) 、 #List (2) 、 #Android (2) 、 #Linux (2) 、 #Shell Script (2) 、 #addMonthNoOverflow (1) 、 #Deferred Join (1) 、 #subMonthNoOverflow (1) 、 #floorMonth (1) 、 #資安 (1) 、 #SVG (1) 、 #Directory Structure (1) 、 #SQL Injection (1) 、 #MySQL 效能 (1) 、 #subMonth (1) 、 #addMonth (1) 、 #Carbon (1) 、 #keytool (1) 、 #Play App Signing (1) 、 #copy (1) 、 #file_put_contents (1) 、 #file_get_contents (1) 、 #fwrite (1)使用一些套件時發現必須呼叫套件底層的 Function,這時候就要利用 GlobalKey。
宣告一個 GlobalKey
final GlobalKey<MyState> _myKey = GlobalKey();
加入到需要呼叫的 Widget
MyWidget(
key: _myKey,
),
Widget State 內的 Function 必須是 Public
class MyState extends State<MyWidget> {
foo() {
// some code
}
}
呼叫
_myKey.currentState!.foo();
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final GlobalKey<MyState> _myKey = GlobalKey(); // add
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: MyWidget(
key: _myKey,// add
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_myKey.currentState!.changeText();// add
},
child: const Icon(Icons.navigate_next),
),
),
);
}
}
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() => MyState();
}
class MyState extends State<MyWidget> {
String _text = 'Hello, World!';
// add
changeText() {
setState(() {
_text = '8787';
});
}
@override
Widget build(BuildContext context) => Text(_text);
}
試一試吧:https://dartpad.dev/?id=eef25debf488e003de9b94eaf45744c6