页面初始化后显示工具提示 - Flutter

Show tooltip once page initialized - Flutter

我需要为用户显示一个 hint/tooltip 以指示用户可以通过按下按钮来获取他的当前位置。在代码中包含 Tooltip 但只有当用户长按按钮时才会出现工具提示,我希望工具提示在屏幕初始化时出现。

代码:

  GlobalKey _toolTipKey = GlobalKey();
GestureDetector(
                      onTap: () {
                        final dynamic tooltip = _toolTipKey.currentState;
                        tooltip.ensureTooltipVisible();
                      },
                      child: Tooltip(
                        key: _toolTipKey,
                        message: 'Get current Location',
                        child: CircleAvatar(
                          radius: 30,
                          child: IconButton(
                            onPressed: getLocation,
                            icon: Icon(
                              Icons.my_location,
                              color: Colors.white,
                            ),
                          ),
                        ),
                      ),
                    )

你应该使用 Statefulwidget 并在 initState 中写下代码

import 'package:flutter/scheduler.dart';

 @override
  void initState() {
    super.initState();
    SchedulerBinding.instance.addPostFrameCallback((_) {
        // Flutter get callback here when screen initialized.
        final dynamic tooltip = _toolTipKey.currentState;
        tooltip.ensureTooltipVisible();

    });
  }

这里是完整的源代码当你运行应用程序时,它会直接显示“获取当前位置”工具提示

import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  GlobalKey _toolTipKey = GlobalKey();


  @override
  void initState() {
    super.initState();
    SchedulerBinding.instance!.addPostFrameCallback((_) {
      // Flutter get callback here when screen initialized.
      final dynamic tooltip = _toolTipKey.currentState;
      tooltip.ensureTooltipVisible();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Tooltip(
              key: _toolTipKey,
              message: 'Get current Location',
              child: CircleAvatar(
                radius: 30,
                child: IconButton(
                  onPressed: () {},
                  icon: Icon(
                    Icons.my_location,
                    color: Colors.white,
                  ),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}