சுபாபேஸ் போஸ்ட்கிரெஸ் அடாப்டர்
tracelet_supabase தொகுப்பு உங்கள் பின்னணி இருப்பிடங்களை நேரடியாக Supabase Postgres உடன் ஒத்திசைக்க, ஒரு Postgres RPC செயல்பாடு அல்லது ஒரு Supabase Edge Function மூலம் ஒரு டிராப்-இன் அடாப்டரை வழங்குகிறது.
நிறுவல்
உங்கள் pubspec.yaml இல் அடாப்டரைச் சேர்க்கவும்:
flutter pub add tracelet_supabaseஇந்த அடாப்டர் supabase_flutter ஐப் பயன்படுத்துகிறது. நீங்கள் Supabase கிளையண்டைப் பயன்படுத்துவதற்கு முன் துவக்க வேண்டும்.
இது எப்படி வேலை செய்கிறது
அடாப்டர் ட்ரேஸ்லெட்டின் பேட்டரி திறன் கொண்ட **நேட்டிவ் HTTP ஒத்திசைவு எஞ்சினுடன் இணைக்கிறது
நேட்டிவ் இன்ஜினில் ஒத்திசைவு இயங்குவதால், ஆப்ஸ் ஃபோர்ஸ்-கிட் இருக்கும்போதுஅதிவேக பேக்ஆஃப் மற்றும் ஆஃப்லைன் வரிசையுடன் தொகுப்புகள் பதிவேற்றப்படும். 401 இல், configureTokenRefresh ஆனது Supabase அமர்வை - முன்புறத்திலும், தலையில்லாத பின்னணியில் தனிமைப்படுத்தியும் - புதுப்பித்து மீண்டும் முயற்சிக்கிறது. நீங்கள்சரியாக ஒரு**இலக்கை வழங்குகிறீர்கள்: rpcFunctionஅல்லது edgeFunction.
அமைவு & கட்டமைப்பு
அட்டவணை மற்றும் உட்செலுத்துதல் செயல்பாட்டை உருவாக்கவும்
இருப்பிடங்களைப் பெற ஒரு அட்டவணையை உருவாக்கவும், RLS ஐ இயக்கவும் மற்றும் உள்வரும் தொகுப்பைச் செருகும் Postgres செயல்பாட்டைச் சேர்க்கவும். ட்ரேஸ்லெட் இருப்பிடப் பொருட்களின் தொகுப்பை இடுகையிடுகிறது, எனவே செயல்பாடு jsonb வரிசையை ஏற்றுக்கொள்கிறது:
-- Table
CREATE TABLE public.locations (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id uuid REFERENCES auth.users NOT NULL DEFAULT auth.uid(),
latitude double precision NOT NULL,
longitude double precision NOT NULL,
accuracy double precision,
speed double precision,
timestamp timestamptz NOT NULL,
is_moving boolean,
created_at timestamptz DEFAULT now()
);
ALTER TABLE public.locations ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users insert their own locations" ON public.locations
FOR INSERT WITH CHECK (auth.uid() = user_id);
-- RPC function: receives the batch as a jsonb array and inserts each row.
-- (The exact field names come from Tracelet's sync payload — see the
-- Tracelet Sync docs for the payload schema.)
CREATE OR REPLACE FUNCTION public.insert_tracelet_locations(payload jsonb)
RETURNS void
LANGUAGE sql
SECURITY INVOKER
AS $$
INSERT INTO public.locations (latitude, longitude, accuracy, speed, timestamp, is_moving)
SELECT
(e->'coords'->>'latitude')::double precision,
(e->'coords'->>'longitude')::double precision,
(e->'coords'->>'accuracy')::double precision,
(e->'coords'->>'speed')::double precision,
(e->>'timestamp')::timestamptz,
(e->>'is_moving')::boolean
FROM jsonb_array_elements(payload) AS e;
$$;மேலும் தனிப்பயன் செயலாக்கத்தை விரும்புகிறீர்களா (சரிபார்ப்பு, மின்விசிறி, செறிவூட்டல்)? அதற்குப் பதிலாக ஒரு Supabase Edge Function ஐ வரிசைப்படுத்தி அதன் பெயரை edgeFunction என அனுப்பவும் - அடாப்டர் தொகுதியை /functions/v1/<name> க்கு இடுகையிடும்.
சுபாபேஸைத் துவக்கவும்
உங்கள் main.dart இல் Supabase கிளையண்டைத் தொடங்கவும்:
import 'package:supabase_flutter/supabase_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
url: 'https://xyzcompany.supabase.co',
anonKey: 'public-anon-key',
);
runApp(const MyApp());
}டோக்கன் புதுப்பிப்பை உள்ளமைக்கவும் & HTTP கட்டமைப்பை உருவாக்கவும்
configureTokenRefresh() ஐ ஒருமுறை அழைத்து, உங்கள் RPC (அல்லது எட்ஜ் செயல்பாடு) இலக்காக HttpConfig ஐ உருவாக்கி, அதை Tracelet.ready க்கு அனுப்பவும்:
import 'package:tracelet_supabase/tracelet_supabase.dart';
import 'package:tracelet/tracelet.dart';
const supabaseUrl = 'https://xyzcompany.supabase.co';
const supabaseAnonKey = 'public-anon-key';
// 1. Keep the Supabase session token fresh in the background (resolves 401s).
await TraceletSupabase.configureTokenRefresh(anonKey: supabaseAnonKey);
// 2. Build the native HTTP config. Provide EITHER rpcFunction OR edgeFunction.
final httpConfig = TraceletSupabase.buildHttpConfig(
supabaseUrl: supabaseUrl,
anonKey: supabaseAnonKey,
rpcFunction: 'insert_tracelet_locations', // ...or: edgeFunction: 'tracelet-ingest'
// autoSync: true, batchSync: true, maxBatchSize: 250 are the defaults
);
// 3. Start Tracelet with the adapter's HTTP config.
await Tracelet.ready(Config(
geo: const GeoConfig(distanceFilter: 50),
http: httpConfig,
));
await Tracelet.start();தனிப்பயன் மெட்டாடேட்டாவை இணைக்கிறது
வணிகத் தரவுகளுடன் (எ.கா. driver_id அல்லது trip_id) ஒவ்வொரு இருப்பிடத்தையும் குறியிட, setRouteContext() ஐப் பயன்படுத்தவும் - இது SQLite வரிசையின் மூலம் ஒவ்வொரு இடத்திலும் பயணிக்கிறது மற்றும் உங்கள் செயல்பாடு பெறும் பேலோடில் சேர்க்கப்பட்டுள்ளது:
await Tracelet.setRouteContext(RouteContext(
taskId: 'order_123',
custom: {'trip_id': 'trip_456'},
));செயல்திறன்
ஒத்திசைவு ட்ரேஸ்லெட்டின் பேட்ச் இன்ஜின் மூலம் இயங்குகிறது, எனவே ஆஃப்லைன் புள்ளிகளின் பேக்லாக் ஒரு புள்ளிக்கு ஒரு கோரிக்கைக்கு பதிலாக தொகுதிகளில் (இயல்புநிலை maxBatchSize: 250) சுத்தப்படுத்தப்படுகிறது. உங்கள் RPC க்குள் Postgres இன் மொத்தச் செருகலுடன் இணைந்து, இது சாதனத்தின் பேட்டரி மற்றும் தரவுத்தள சுற்றுப் பயணங்கள் இரண்டிலும் அதிக அதிர்வெண் கண்காணிப்பை (எ.கா. ஒவ்வொரு 10 மீக்கும் ஒரு புள்ளி) வைத்திருக்கும்.