xtyle 0.1.2 xtyle: ^0.1.2 copied to clipboard
Xtyle provides mutiligual-styled Text and TextEditingController. You can use different fontFamily for each languages.
import 'package:flutter/material.dart';
import 'package:xtyle/xtyle.dart';
void main() {
Xtyle.init(
configuration: XtyleConfig.korean(
fontFamilyKor: 'SpoqaHanSansNeo',
defaultFontFamily: 'DancingScript',
),
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Xtyle Example',
theme: ThemeData(
fontFamily: 'Roboto',
useMaterial3: true,
appBarTheme: const AppBarTheme(
backgroundColor: Colors.black,
foregroundColor: Colors.white,
),
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Xtyle Example'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController textEditingController =
TextEditingController(text: 'XYZ마트 파격Sale행사 60%!\n🎁 환Welcome영 🎁');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: SingleChildScrollView(
keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
child: Container(
height: MediaQuery.of(context).size.height,
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(vertical: 24.0),
child: Column(
children: [
Text(
'👇 Type something 👇',
style: Theme.of(context).textTheme.headline4,
),
const SizedBox(height: 24),
TextFormField(
controller: textEditingController,
maxLines: 5,
decoration: InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
),
),
onChanged: (_) => setState(() {}),
),
],
),
),
Expanded(
child: Row(
children: [
Expanded(
child: _TextWidget(
label: 'Flutter Text Widget',
child: Text(
textEditingController.text,
maxLines: 5,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.bodyMedium,
),
),
),
const SizedBox(width: 24),
Expanded(
child: _TextWidget(
label: 'XtyleText Widget',
child: XtyleText(
textEditingController.text,
maxLines: 5,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.bodyMedium,
),
),
),
],
),
),
],
),
),
),
);
}
}
class _TextWidget extends StatelessWidget {
final String label;
final Widget child;
const _TextWidget({
Key? key,
required this.label,
required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
label,
style: Theme.of(context).textTheme.titleMedium,
),
Container(
width: double.maxFinite,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4.0),
border: Border.all(),
),
margin: const EdgeInsets.symmetric(vertical: 16.0),
padding: const EdgeInsets.all(16.0),
child: child,
),
],
);
}
}