在主页我有一个名为
Select Language
的按钮。单击该按钮后,它将导航到我们可以选择语言的新页面。
现在我想要实现的是,当我导航到语言选择页面时,对讲焦点应该是
AppBar() title
。但它总是转到AppBar()
中的后退按钮。所以我使用 Focus()
小部件以编程方式将焦点更改为 AppBar 标题。在使用 Text()
小部件扭曲 Focus()
小部件之后,对讲焦点始终在标题中,但仅在 debug build 中。在 release build 中,对讲焦点在后退按钮中,很少在标题中。
我做错了什么或者有没有其他方法可以通过编程将可访问性焦点更改为标题?
主页代码:
import 'package:device_info/language_selection.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () => Navigator.push(
context,
CupertinoPageRoute(
builder: (context) => const LanguagePage(),
),
),
child: const Text(
"Select Language",
style: TextStyle(color: Colors.white),
),
),
),
);
}
}
语言选择页面:
import 'package:flutter/material.dart';
class LanguagePage extends StatefulWidget {
const LanguagePage({super.key});
@override
State<LanguagePage> createState() => _LanguagePageState();
}
class _LanguagePageState extends State<LanguagePage> {
FocusNode languageFoucsNode = FocusNode();
String language = "";
List<String> languageList = [
"Tamil",
"Malayalam",
"Telugu",
"English",
"Kanadam",
"Hindi"
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
excludeHeaderSemantics: true,
leading: IconButton(
onPressed: () => Navigator.pop(context),
icon: const Icon(
Icons.arrow_back,
color: Colors.white,
),
),
title: Focus(
autofocus: true,
focusNode: languageFoucsNode,
child: Text(
language.isNotEmpty ? language : "Please Select a Language",
style: const TextStyle(color: Colors.white),
),
),
),
body: ListView.builder(
shrinkWrap: true,
itemCount: languageList.length,
itemBuilder: (BuildContext context, int index) {
return TextButton(
onPressed: () {
setState(() {
language = languageList[index];
});
Navigator.pop(context);
},
child: Text(
languageList[index],
textAlign: TextAlign.left,
style: const TextStyle(color: Colors.black),
),
);
},
),
);
}
}