flutter/examples/api/lib/widgets/editable_text/text_editing_controller.1.dart
Bruno Leroux 5c88fbf0b9
Add more documentation for TextEditingController default constructor (#143452)
## Description

This PR adds more documentation for `TextEditingController(String text)` constructor and it adds one example.

https://github.com/flutter/flutter/pull/96245 was a first improvement to the documentation.
https://github.com/flutter/flutter/issues/79495 tried to hide the cursor when an invalid selection is set but it was reverted.
https://github.com/flutter/flutter/pull/123777 mitigated the issue of having a default invalid selection: it takes care of setting a proper selection when a text field is focused and its controller selection is not initialized.

I will try changing the initial selection in another PR, but It will probably break several existing tests.

## Related Issue

Fixes https://github.com/flutter/flutter/issues/95978

## Tests

Adds 1 test for the new example.
2024-02-14 20:10:18 +00:00

62 lines
1.6 KiB
Dart

// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/material.dart';
/// Flutter code sample for [TextEditingController].
void main() {
runApp(const TextEditingControllerExampleApp());
}
class TextEditingControllerExampleApp extends StatelessWidget {
const TextEditingControllerExampleApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: TextEditingControllerExample(),
);
}
}
class TextEditingControllerExample extends StatefulWidget {
const TextEditingControllerExample({super.key});
@override
State<TextEditingControllerExample> createState() => _TextEditingControllerExampleState();
}
class _TextEditingControllerExampleState extends State<TextEditingControllerExample> {
// Create a controller whose initial selection is empty (collapsed) and positioned
// before the text (offset is 0).
final TextEditingController _controller = TextEditingController.fromValue(
const TextEditingValue(
text: 'Flutter',
selection: TextSelection.collapsed(offset: 0),
),
);
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
alignment: Alignment.center,
padding: const EdgeInsets.all(16.0),
child: TextField(
controller: _controller,
autofocus: true,
decoration: const InputDecoration(filled: true),
),
),
);
}
}