t_widgets 0.5.3
t_widgets: ^0.5.3 copied to clipboard
flutter custom widgets
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:t_widgets/t_widgets.dart';
import 'package:t_widgets/types/t_loader_types.dart';
import 'package:t_widgets/widgets/t_number_field.dart';
final darkNotifier = ValueNotifier<bool>(false);
void main() async {
await TWidgets.instance.init(
// required for TImage,TCoverImage -> default cover path
defaultImageAssetsPath: 'assets/logo.webp',
isDebugPrint: true,
getDarkMode: () => darkNotifier.value,
onDownloadImage: (url, savePath) async {
//your logic here
//await Dio().download(url, savePath);
//for download image
await Future.delayed(Duration(seconds: 2));
},
);
// app services
// await TAppServices.clearAndRefreshImage();
// await TAppServices.copyText('text');
// final text = await TAppServices.pasteFromClipboard();
runApp(MyApp());
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
List<String> values = ['name', 'age', 'name', 'age', 'place', 'home'];
List<String> allTags = ['name', 'age', 'place', 'home'];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
children: [
// TSeeAllView(title: title, list: list, onSeeAllClicked: onSeeAllClicked, gridItemBuilder: gridItemBuilder),
TCoverChooser(
coverPath:
'/home/than/Downloads/Telegram Desktop/photo_2025-07-16_01-40-55.jpg',
),
TTextField(hintText: 'text'),
TNumberField(hintText: 'number'),
TChip(title: Text('hello')),
TListTileWithDesc(title: 'hello', desc: 'i am desc'),
TTagsWrapView(
textColor: Colors.white,
backgroundColor: Colors.teal,
// title: Text('tags'),
values: values,
allTags: allTags,
// onApply: (values) {
// this.values = values;
// setState(() {});
// },
),
TImageUrl(
url:
'https://raw.githubusercontent.com/ThanCoder/novel-v3-static-server/refs/heads/main/server/images/b1a6805d-8f01-44fc-b241-c349625bf55c.png',
size: 150,
),
TLoader(types: TLoaderTypes.CubeGrid),
TLoaderRandom(),
TImageFile(path: '', size: 100),
TCacheImage(url: '', size: 150),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// darkNotifier.value = !darkNotifier.value;
// showTMessageDialog(context, 'hello',color: Colors.red);
// showTMessageDialogError(context, 'snapbar error');
// showTConfirmDialog(context, contentText: 'content', onSubmit: () {},barrierDismissible: false);
// showTReanmeDialog(
// context,
// text: 'Untitled',
// onSubmit: (text) {},
// title: Text('title'),
// labelText: Text('label'),
// hintText: 'hint',
// barrierDismissible: false,
// );
showTModalBottomSheet(
context,
child: Column(
children: [
ListTile(
title: Text('one'),
onTap: () {
Navigator.pop(context);
},
),
],
),
);
},
),
);
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: darkNotifier,
builder: (context, value, child) {
return MaterialApp(
darkTheme: ThemeData.dark(),
themeMode: value ? ThemeMode.dark : null,
home: HomeScreen(),
);
},
);
}
}