Question #57MediumFlutter Basics

Flutter how to change the first letter capital in all of this “Hello print my Name”; change this to “Hello Print My Name”;

#flutter#api

Answer

Solution

To capitalize the first letter of each word in a string.


Method 1: Using split() and join()

dart
String capitalizeEachWord(String text) {
  if (text.isEmpty) return text;

  return text.split(' ').map((word) {
    if (word.isEmpty) return word;
    return word[0].toUpperCase() + word.substring(1).toLowerCase();
  }).join(' ');
}

void main() {
  String input = "Hello print my Name";
  String output = capitalizeEachWord(input);
  print(output); // Hello Print My Name
}

Method 2: Using RegExp (Regular Expression)

dart
String capitalizeEachWord(String text) {
  return text.replaceAllMapped(
    RegExp(r'\b\w'),
    (match) => match.group(0)!.toUpperCase(),
  );
}

void main() {
  String input = "Hello print my Name";
  String output = capitalizeEachWord(input);
  print(output); // Hello Print My Name
}

Method 3: Extension Method

dart
extension StringExtension on String {
  String capitalizeEachWord() {
    if (isEmpty) return this;

    return split(' ').map((word) {
      if (word.isEmpty) return word;
      return word[0].toUpperCase() + word.substring(1).toLowerCase();
    }).join(' ');
  }
}

void main() {
  String input = "Hello print my Name";
  print(input.capitalizeEachWord()); // Hello Print My Name
}

Method 4: Using intl Package (Title Case)

yaml
# pubspec.yaml
dependencies:
  intl: ^0.18.0
dart
import 'package:intl/intl.dart';

String toTitleCase(String text) {
  return toBeginningOfSentenceCase(text) ?? text;
}

void main() {
  String input = "hello print my name";
  print(toTitleCase(input)); // Hello print my name (only first word)

  // For all words, use split
  String allWords = input.split(' ').map((word) {
    return toBeginningOfSentenceCase(word) ?? word;
  }).join(' ');

  print(allWords); // Hello Print My Name
}

Method 5: Handling Edge Cases

dart
String capitalizeEachWord(String text) {
  if (text.isEmpty) return text;

  return text.split(' ').map((word) {
    if (word.isEmpty) return word;

    // Handle single character words
    if (word.length == 1) return word.toUpperCase();

    // Capitalize first letter, lowercase rest
    return word[0].toUpperCase() + word.substring(1).toLowerCase();
  }).join(' ');
}

void main() {
  print(capitalizeEachWord("Hello print my Name"));     // Hello Print My Name
  print(capitalizeEachWord("i love dart programming")); // I Love Dart Programming
  print(capitalizeEachWord(""));                        // (empty string)
  print(capitalizeEachWord("a b c"));                   // A B C
}

Complete Widget Example

dart
class TextCapitalizeWidget extends StatefulWidget {
  
  _TextCapitalizeWidgetState createState() => _TextCapitalizeWidgetState();
}

class _TextCapitalizeWidgetState extends State<TextCapitalizeWidget> {
  final TextEditingController _controller = TextEditingController();
  String _output = '';

  void _capitalize() {
    setState(() {
      _output = _controller.text.split(' ').map((word) {
        if (word.isEmpty) return word;
        return word[0].toUpperCase() + word.substring(1).toLowerCase();
      }).join(' ');
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Capitalize Each Word')),
      body: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter text',
                hintText: 'Hello print my Name',
              ),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _capitalize,
              child: Text('Capitalize Each Word'),
            ),
            SizedBox(height: 16),
            Text(
              'Output: $_output',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
    );
  }
}

Comparison of Methods

MethodProsCons
split() and join()Simple, readableMultiple iterations
RegExpConcise, powerfulHarder to understand
ExtensionReusable, clean syntaxRequires extension definition
intl packageLocale-awareExtra dependency

Expected Output

text
Input:  "Hello print my Name"
Output: "Hello Print My Name"

Input:  "i love dart programming"
Output: "I Love Dart Programming"

Input:  "this is a test"
Output: "This Is A Test"

Key Concepts

  • split(' ') - Splits string into words
  • map() - Transforms each word
  • toUpperCase() - Converts to uppercase
  • substring(1) - Gets rest of word (from index 1)
  • toLowerCase() - Converts to lowercase
  • join(' ') - Joins words back with spaces

Resources