Если элемент внутри view - игнорируется gesturedetector и onTap
У меня есть SingleChildScrollView и в нём элемент TextFormField. Не получается отловить нажатие на TextFormField. Если ставлю туда кнопку, то всё норм.
код:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
main() {
runApp(OnePersonScreen());
}
class OnePersonScreen extends StatefulWidget {
final Map<dynamic, dynamic> personInfo = {
"aaa": "123123123",
"vvvvsads": "sdaadsasdasd",
"asdasda": "sdaadsasdasd",
"zxxzc": "sdaadsasdasd",
"cvcvcv": "sdaadsasdasd",
"zxzx": "sdaadsasdasd",
"bvvbc": "sdaadsasdasd",
"zxzc": "sdaadsasdasd",
"bvc": "sdaadsasdasd"
};
@override
OnePersonScreen({
Key key,
}) : super(key: key);
@override
OnePersonScreenState createState() {
return new OnePersonScreenState();
}
}
class OnePersonScreenState extends State<OnePersonScreen> {
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
_getListRowsFromData(data) {
List<Widget> myRows = [];
data.forEach((k, v) {
myRows.addAll([
Row(mainAxisSize: MainAxisSize.min, children: [
Expanded(
flex: 5,
child: GestureDetector(
onTap: () {
print("тап не считывается $v");
},
child: TextFormField(
textAlignVertical: TextAlignVertical.center,
textAlign: TextAlign.start,
maxLines: 2,
initialValue: "$v",
onTap: () {
print("тап не считывается $v");
},
decoration: InputDecoration(
labelText: "$k:",
enabled: false,
border: InputBorder.none),
),
)),
Expanded(
flex: 1,
child: IconButton(
icon: Icon(
Icons.content_copy,
color: Colors.grey,
),
onPressed: () {
print("жали $v");
Clipboard.setData(new ClipboardData(text: "$v"));
_scaffoldKey.currentState
.showSnackBar(SnackBar(content: Text('copied: $v')));
}))
]),
Divider(),
]);
});
return myRows;
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: "${widget.personInfo['aaa']}",
theme: ThemeData.dark(
// primarySwatch: Colors.green,
),
home: Scaffold(
key: _scaffoldKey,
appBar: AppBar(
leading: BackButton(
onPressed: () {
Navigator.pop(context);
},
),
title: Text(
"${widget.personInfo['aaa']}",
),
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Expanded(
flex: 1,
child: Container(
padding: EdgeInsets.all(5),
width: double.infinity,
child: SingleChildScrollView(
controller: ScrollController(),
// primary: false,
child: Column(
mainAxisSize: MainAxisSize.max,
children: [ ..._getListRowsFromData(widget.personInfo),
]))))
])));
}
}
Ответы (1 шт):
Автор решения: Alex
→ Ссылка
Проблема в версии Flutter. Следует вернуться на стабильный канал инструкция.
flutter channel stable flutter upgrade
И потом один элемент будет выглядеть вот так:
Expanded(
flex: 5,
child: TextFormField(
readOnly: true,
textAlignVertical: TextAlignVertical.center,
textAlign: TextAlign.start,
maxLines: 2,
initialValue: "$v",
onTap: () {
print("тап не считывается $v");
},
decoration: InputDecoration(
labelText: "$k:",
border: InputBorder.none),
),
)