Menu
CoddyTech

响应输入

本课属于 Coddy Flutter 学习旅程的“让应用具有交互性”单元。第 23 课,共 34 课。

每当文本发生变化时,字段都会通知你。给它一个 onChanged:,这是一个函数,可以获取当前的完整文本:

TextField(
  onChanged: (String value) {
    print(value);
  },
)

输入 Ada,它会打印三次:A、Ad、Ada。(String value) 是一个参数,就像“带参数的函数”一课中介绍的参数一样:字段会把文本传给你的函数。

若要在屏幕的其他位置显示文本,请将它保存在 State 中,并使用 setState 修改它,方法和按钮修改计数的方式相同:

onChanged: (String value) {
  setState(() {
    _name = value;
  });
},
challenge icon

挑战

简单

让问候语随输入框中的内容变化:输入姓名时,Hello, stranger! 会变成 Hello, Ada!。将 onChanged 中的文本存储到 _name 中。

亲手试试

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _name = 'stranger';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Greeter')),
      body: Padding(
        padding: const EdgeInsets.all(24),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              decoration: const InputDecoration(
                labelText: 'Your name',
                border: OutlineInputBorder(),
              ),
            ),
            const SizedBox(height: 24),
            Text('Hello, $_name!', style: const TextStyle(fontSize: 24)),
          ],
        ),
      ),
    );
  }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

让应用具有交互性中的所有课

自己练习: Flutter 在线编译器